yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
0bb930fc
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{ 19int16_t i16 ; 20i16vec2 i16v2 ; 21i16vec3 i16v3 ; 22i16vec4 i16v4 ; 23uint16_t u16 ; 24u16vec2 u16v2 ; 25u16vec3 u16v3 ; 26u16vec4 u16v4 ; 27}block ; 28 29void main () 30{ 31} 32 33void literal () 34{ 35const int16_t i16Const [3 ]= 36 { 37int16_t (-0x1111 ),// Hex 38int16_t (-1 ),// Dec 39int16_t (040000 ),// Oct 40 }; 41 42int16_t i16 = i16Const [index ]; 43 44const uint16_t u16Const []= 45 { 46uint16_t (0xFFFF ),// Hex 47uint16_t (65535 ),// Dec 48uint16_t (077777 ),// Oct 49 }; 50 51uint16_t u16 = u16Const [index ]; 52} 53 54void typeCast16 () 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 69i32v = i16v ;// int16_t -> int32_t 70i32v = u16v ;// uint16_t -> int32_t 71u16v = i16v ;// int16_t -> uint16_t 72u32v = i16v ;// int16_t -> uint32_t 73i64v = i16v ;// int16_t -> int64_t 74u64v = i16v ;// int16_t -> uint64_t 75u32v = u16v ;// uint16_t -> uint32_t 76i64v = u16v ;// uint16_t -> int64_t 77u64v = u16v ;// uint16_t -> uint64_t 78f16v = i16v ;// int16_t -> float16_t 79f32v = i16v ;// int16_t -> float32_t 80f64v = i16v ;// int16_t -> float64_t 81f16v = u16v ;// uint16_t -> float16_t 82f32v = u16v ;// uint16_t -> float32_t 83f64v = u16v ;// uint16_t -> float64_t 84 85i32v = i32vec2 (i16v );// int16_t -> int32_t 86i32v = i32vec2 (u16v );// uint16_t -> int32_t 87u16v = u16vec2 (i16v );// int16_t -> uint16_t 88u32v = u32vec2 (i16v );// int16_t -> uint32_t 89i64v = i64vec2 (i16v );// int16_t -> int64_t 90u64v = i64vec2 (i16v );// int16_t -> uint64_t 91u32v = u32vec2 (u16v );// uint16_t -> uint32_t 92i64v = i64vec2 (u16v );// uint16_t -> int64_t 93u64v = i64vec2 (u16v );// uint16_t -> uint64_t 94f16v = f16vec2 (i16v );// int16_t -> float16_t 95f32v = f32vec2 (i16v );// int16_t -> float32_t 96f64v = f64vec2 (i16v );// int16_t -> float64_t 97f16v = f16vec2 (u16v );// uint16_t -> float16_t 98f32v = f32vec2 (u16v );// uint16_t -> float32_t 99f64v = f64vec2 (u16v );// uint16_t -> float64_t 100 101i8v = i8vec2 (i16v );// int16_t -> int8_t 102i8v = i8vec2 (u16v );// uint16_t -> int8_t 103u8v = u8vec2 (i16v );// int16_t -> uint8_t 104u8v = u8vec2 (u16v );// uint16_t -> uint8_t 105i16v = u8vec2 (u16v );// uint16_t -> int16_t 106i16v = i16vec2 (bv );// bool -> int16 107u16v = u16vec2 (bv );// bool -> uint16 108bv = bvec2 (i16v );// int16 -> bool 109bv = bvec2 (u16v );// uint16 -> bool 110} 111void operators () 112{ 113u16vec3 u16v ; 114int16_t i16 ; 115uvec3 uv ; 116int32_t i ; 117int64_t i64 ; 118bool b ; 119 120// Unary 121u16v ++ ; 122i16 -- ; 123++ i16 ; 124-- u16v ; 125 126u16v = ~u16v ; 127 128i16 = + i16 ; 129u16v = - u16v ; 130 131// Arithmetic 132i16 += i16 ; 133u16v -= u16v ; 134i *=i16 ; 135uv /=u16v ; 136uv %=i16 ; 137 138uv = u16v + uv ; 139i64 = i16 - i64 ; 140uv = u16v * uv ; 141i64 = i16 * i64 ; 142i = i16 %i ; 143 144// Shift 145u16v <<=i16 ; 146i16 >>=u16v .y ; 147 148i16 = i16 <<u16v .z ; 149uv = u16v <<i ; 150 151// Relational 152b = (u16v .x != i16 ); 153b = (i16 == u16v .x ); 154b = (u16v .x > uv .y ); 155b = (i16 < i ); 156b = (u16v .y >=uv .x ); 157b = (i16 <=i ); 158 159// Bitwise 160uv |=i16 ; 161i = i16 |i ; 162i64 &=i16 ; 163uv = u16v & uv ; 164uv ^=i16 ; 165u16v = u16v ^i16 ; 166} 167 168void builtinFuncs () 169{ 170i16vec2 i16v ; 171i16vec4 i16v4 ; 172u16vec3 u16v ; 173u16vec2 u16v2 ; 174u16vec4 u16v4 ; 175bvec3 bv ; 176int16_t i16 ; 177uint16_t u16 ; 178int32_t i32 ; 179uint32_t u32 ; 180int64_t i64 ; 181uint64_t u64 ; 182 183// abs() 184i16v = abs (i16v ); 185 186// sign() 187i16 = sign (i16 ); 188 189// min() 190i16v = min (i16v ,i16 ); 191i16v = min (i16v ,i16vec2 (-1 )); 192u16v = min (u16v ,u16 ); 193u16v = min (u16v ,u16vec3 (0 )); 194 195// max() 196i16v = max (i16v ,i16 ); 197i16v = max (i16v ,i16vec2 (-1 )); 198u16v = max (u16v ,u16 ); 199u16v = max (u16v ,u16vec3 (0 )); 200 201// clamp() 202i16v = clamp (i16v ,- i16 ,i16 ); 203i16v = clamp (i16v ,- i16v ,i16v ); 204u16v = clamp (u16v ,- u16 ,u16 ); 205u16v = clamp (u16v ,- u16v ,u16v ); 206 207// mix() 208i16 = mix (i16v .x ,i16v .y , true); 209i16v = mix (i16vec2 (i16 ),i16vec2 (- i16 ),bvec2 (false)); 210u16 = mix (u16v .x ,u16v .y , true); 211u16v = mix (u16vec3 (u16 ),u16vec3 (- u16 ),bvec3 (false)); 212 213//pack 214i32 = pack32 (i16v ); 215i64 = pack64 (i16v4 ); 216u32 = pack32 (u16v2 ); 217u64 = pack64 (u16v4 ); 218 219i16v = unpack16 (i32 ); 220i16v4 = unpack16 (i64 ); 221u16v2 = unpack16 (u32 ); 222u16v4 = unpack16 (u64 ); 223 224// lessThan() 225bv = lessThan (u16v ,u16vec3 (u16 )); 226bv .xy = lessThan (i16v ,i16vec2 (i16 )); 227 228// lessThanEqual() 229bv = lessThanEqual (u16v ,u16vec3 (u16 )); 230bv .xy = lessThanEqual (i16v ,i16vec2 (i16 )); 231 232// greaterThan() 233bv = greaterThan (u16v ,u16vec3 (u16 )); 234bv .xy = greaterThan (i16v ,i16vec2 (i16 )); 235 236// greaterThanEqual() 237bv = greaterThanEqual (u16v ,u16vec3 (u16 )); 238bv .xy = greaterThanEqual (i16v ,i16vec2 (i16 )); 239 240// equal() 241bv = equal (u16v ,u16vec3 (u16 )); 242bv .xy = equal (i16v ,i16vec2 (i16 )); 243 244// notEqual() 245bv = notEqual (u16v ,u16vec3 (u16 )); 246bv .xy = notEqual (i16v ,i16vec2 (i16 )); 247} 248 249// Type conversion for specialization constant 250layout (constant_id = 100 )const int16_t si16 = int16_t (-10 ); 251layout (constant_id = 101 )const uint16_t su16 = uint16_t (20 );