yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
9290474d
main
1#version 450 2 3#extension GL_EXT_shader_explicit_arithmetic_types : enable 4#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require 5#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require 6#extension GL_EXT_shader_explicit_arithmetic_types_int32 : require 7#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require 8#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require 9#extension GL_EXT_shader_explicit_arithmetic_types_float32 : require 10#extension GL_EXT_shader_explicit_arithmetic_types_float64 : require 11 12layout (binding = 0 )uniform Uniforms 13{ 14uint index ; 15}; 16 17layout (std140 ,binding = 1 )uniform Block 18{ 19int8_t i8 ; 20i8vec2 i8v2 ; 21i8vec3 i8v3 ; 22i8vec4 i8v4 ; 23uint8_t u8 ; 24u8vec2 u8v2 ; 25u8vec3 u8v3 ; 26u8vec4 u8v4 ; 27}block ; 28 29void main () 30{ 31} 32 33void literal () 34{ 35const int8_t i8Const [3 ]= 36 { 37int8_t (-0x11 ),// Hex 38int8_t (-1 ),// Dec 39int8_t (0400 ),// Oct 40 }; 41 42int8_t i8 = i8Const [index ]; 43 44const uint8_t u8Const []= 45 { 46uint8_t (0xFF ),// Hex 47uint8_t (255 ),// Dec 48uint8_t (0177 ),// Oct 49 }; 50 51uint8_t u8 = u8Const [index ]; 52} 53 54void typeCast8 () 55{ 56i8vec2 i8v ; 57u8vec2 u8v ; 58i16vec2 i16v ; 59u16vec2 u16v ; 60i32vec2 i32v ; 61u32vec2 u32v ; 62i64vec2 i64v ; 63u64vec2 u64v ; 64f16vec2 f16v ; 65f32vec2 f32v ; 66f64vec2 f64v ; 67bvec2 bv ; 68 69u8v = i8v ;// int8_t -> uint8_t 70i16v = i8v ;// int8_t -> int16_t 71i16v = u8v ;// uint8_t -> int16_t 72i32v = i8v ;// int8_t -> int32_t 73i32v = u8v ;// uint8_t -> int32_t 74u32v = i8v ;// int8_t -> uint32_t 75i64v = i8v ;// int8_t -> int64_t 76u64v = i8v ;// int8_t -> uint64_t 77u32v = u8v ;// uint8_t -> uint32_t 78i64v = u8v ;// uint8_t -> int64_t 79u64v = u8v ;// uint8_t -> uint64_t 80f16v = i8v ;// int8_t -> float16_t 81f32v = i8v ;// int8_t -> float32_t 82f64v = i8v ;// int8_t -> float64_t 83f16v = u8v ;// uint8_t -> float16_t 84f32v = u8v ;// uint8_t -> float32_t 85f64v = u8v ;// uint8_t -> float64_t 86 87i8v = i8vec2 (u8v );// uint8_t -> int8_t 88i16v = i16vec2 (i8v );// int8_t -> int16_t 89i16v = i16vec2 (u8v );// uint8_t -> int16_t 90i32v = i32vec2 (i8v );// int8_t -> int32_t 91i32v = i32vec2 (u8v );// uint8_t -> int32_t 92i64v = i64vec2 (i8v );// int8_t -> int64_t 93u64v = i64vec2 (i8v );// int8_t -> uint64_t 94u16v = u16vec2 (i8v );// int8_t -> uint16_t 95u16v = u16vec2 (u8v );// uint8_t -> uint16_t 96u32v = u32vec2 (u8v );// uint8_t -> uint32_t 97i64v = i64vec2 (u8v );// uint8_t -> int64_t 98u64v = i64vec2 (u8v );// uint8_t -> uint64_t 99f16v = f16vec2 (i8v );// int8_t -> float16_t 100f32v = f32vec2 (i8v );// int8_t -> float32_t 101f64v = f64vec2 (i8v );// int8_t -> float64_t 102f16v = f16vec2 (u8v );// uint8_t -> float16_t 103f32v = f32vec2 (u8v );// uint8_t -> float32_t 104f64v = f64vec2 (u8v );// uint8_t -> float64_t 105 106i8v = i8vec2 (bv );// bool -> int8 107u8v = u8vec2 (bv );// bool -> uint8 108bv = bvec2 (i8v );// int8 -> bool 109bv = bvec2 (u8v );// uint8 -> bool 110} 111 112void operators () 113{ 114u8vec3 u8v ; 115int8_t i8 ; 116uvec3 uv ; 117int32_t i ; 118int16_t i16 ; 119bool b ; 120float arr [4 ]= {1.0 ,2.0 ,3.0 ,4.0 }; 121float f ; 122 123// Unary 124u8v ++ ; 125i8 -- ; 126++ i8 ; 127-- u8v ; 128 129u8v = ~u8v ; 130 131i8 = + i8 ; 132u8v = - u8v ; 133 134// Arithmetic 135i8 += i8 ; 136u8v -= u8v ; 137i *=i8 ; 138uv /=u8v ; 139uv %=i8 ; 140 141uv = u8v + uv ; 142i16 = i8 - i16 ; 143uv = u8v * uv ; 144i16 = i8 * i16 ; 145i = i8 %i ; 146 147// Shift 148u8v <<=i8 ; 149i8 >>=u8v .y ; 150 151i8 = i8 <<u8v .z ; 152u8v = u8v <<i8 ; 153 154// Relational 155b = (u8v .x != i8 ); 156b = (i8 == u8v .x ); 157b = (u8v .x > uv .y ); 158b = (i8 < i ); 159b = (u8v .y >=uv .x ); 160b = (i8 <=i ); 161 162// Bitwise 163uv |=i8 ; 164i = i8 |i ; 165i16 &=i8 ; 166uv = u8v & uv ; 167uv ^=i8 ; 168u8v = u8v ^i8 ; 169 170// Index 171f = arr [i8 ]; 172} 173 174void builtinFuncs () 175{ 176i8vec2 i8v ; 177i8vec4 i8v4 ; 178u8vec3 u8v ; 179u8vec2 u8v2 ; 180u8vec4 u8v4 ; 181bvec3 bv ; 182int16_t i16 ; 183int32_t i32 ; 184uint16_t u16 ; 185uint32_t u32 ; 186 187int8_t i8 ; 188uint8_t u8 ; 189 190// abs() 191i8v = abs (i8v ); 192 193// sign() 194i8 = sign (i8 ); 195 196// min() 197i8v = min (i8v ,i8 ); 198i8v = min (i8v ,i8vec2 (-1 )); 199u8v = min (u8v ,u8 ); 200u8v = min (u8v ,u8vec3 (0 )); 201 202// max() 203i8v = max (i8v ,i8 ); 204i8v = max (i8v ,i8vec2 (-1 )); 205u8v = max (u8v ,u8 ); 206u8v = max (u8v ,u8vec3 (0 )); 207 208// clamp() 209i8v = clamp (i8v ,- i8 ,i8 ); 210i8v = clamp (i8v ,- i8v ,i8v ); 211u8v = clamp (u8v ,- u8 ,u8 ); 212u8v = clamp (u8v ,- u8v ,u8v ); 213 214// mix() 215i8 = mix (i8v .x ,i8v .y , true); 216i8v = mix (i8vec2 (i8 ),i8vec2 (- i8 ),bvec2 (false)); 217u8 = mix (u8v .x ,u8v .y , true); 218u8v = mix (u8vec3 (u8 ),u8vec3 (- u8 ),bvec3 (false)); 219 220//pack 221i16 = pack16 (i8v ); 222i32 = pack32 (i8v4 ); 223u16 = pack16 (u8v2 ); 224u32 = pack32 (u8v4 ); 225 226i8v = unpack8 (i16 ); 227i8v4 = unpack8 (i32 ); 228u8v2 = unpack8 (u16 ); 229u8v4 = unpack8 (u32 ); 230 231// lessThan() 232bv = lessThan (u8v ,u8vec3 (u8 )); 233bv .xy = lessThan (i8v ,i8vec2 (i8 )); 234 235// lessThanEqual() 236bv = lessThanEqual (u8v ,u8vec3 (u8 )); 237bv .xy = lessThanEqual (i8v ,i8vec2 (i8 )); 238 239// greaterThan() 240bv = greaterThan (u8v ,u8vec3 (u8 )); 241bv .xy = greaterThan (i8v ,i8vec2 (i8 )); 242 243// greaterThanEqual() 244bv = greaterThanEqual (u8v ,u8vec3 (u8 )); 245bv .xy = greaterThanEqual (i8v ,i8vec2 (i8 )); 246 247// equal() 248bv = equal (u8v ,u8vec3 (u8 )); 249bv .xy = equal (i8v ,i8vec2 (i8 )); 250 251// notEqual() 252bv = notEqual (u8v ,u8vec3 (u8 )); 253bv .xy = notEqual (i8v ,i8vec2 (i8 )); 254} 255 256// Type conversion for specialization constant 257layout (constant_id = 100 )const int8_t si8 = int8_t (-10 ); 258layout (constant_id = 101 )const uint8_t su8 = uint8_t (20 );