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{ 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 ; 119float f ; 120float arr [4 ]= {1.0 ,2.0 ,3.0 ,4.0 }; 121 122// Unary 123u16v ++ ; 124i16 -- ; 125++ i16 ; 126-- u16v ; 127 128u16v = ~u16v ; 129 130i16 = + i16 ; 131u16v = - u16v ; 132 133// Arithmetic 134i16 += i16 ; 135u16v -= u16v ; 136i *=i16 ; 137uv /=u16v ; 138uv %=i16 ; 139 140uv = u16v + uv ; 141i64 = i16 - i64 ; 142uv = u16v * uv ; 143i64 = i16 * i64 ; 144i = i16 %i ; 145 146// Shift 147u16v <<=i16 ; 148i16 >>=u16v .y ; 149 150i16 = i16 <<u16v .z ; 151uv = u16v <<i ; 152 153// Relational 154b = (u16v .x != i16 ); 155b = (i16 == u16v .x ); 156b = (u16v .x > uv .y ); 157b = (i16 < i ); 158b = (u16v .y >=uv .x ); 159b = (i16 <=i ); 160 161// Bitwise 162uv |=i16 ; 163i = i16 |i ; 164i64 &=i16 ; 165uv = u16v & uv ; 166uv ^=i16 ; 167u16v = u16v ^i16 ; 168 169// Index 170f = arr [i16 ]; 171} 172 173void builtinFuncs () 174{ 175i16vec2 i16v ; 176i16vec4 i16v4 ; 177u16vec3 u16v ; 178u16vec2 u16v2 ; 179u16vec4 u16v4 ; 180bvec3 bv ; 181int16_t i16 ; 182uint16_t u16 ; 183int32_t i32 ; 184uint32_t u32 ; 185int64_t i64 ; 186uint64_t u64 ; 187 188// abs() 189i16v = abs (i16v ); 190 191// sign() 192i16 = sign (i16 ); 193 194// min() 195i16v = min (i16v ,i16 ); 196i16v = min (i16v ,i16vec2 (-1 )); 197u16v = min (u16v ,u16 ); 198u16v = min (u16v ,u16vec3 (0 )); 199 200// max() 201i16v = max (i16v ,i16 ); 202i16v = max (i16v ,i16vec2 (-1 )); 203u16v = max (u16v ,u16 ); 204u16v = max (u16v ,u16vec3 (0 )); 205 206// clamp() 207i16v = clamp (i16v ,- i16 ,i16 ); 208i16v = clamp (i16v ,- i16v ,i16v ); 209u16v = clamp (u16v ,- u16 ,u16 ); 210u16v = clamp (u16v ,- u16v ,u16v ); 211 212// mix() 213i16 = mix (i16v .x ,i16v .y , true); 214i16v = mix (i16vec2 (i16 ),i16vec2 (- i16 ),bvec2 (false)); 215u16 = mix (u16v .x ,u16v .y , true); 216u16v = mix (u16vec3 (u16 ),u16vec3 (- u16 ),bvec3 (false)); 217 218//pack 219i32 = pack32 (i16v ); 220i64 = pack64 (i16v4 ); 221u32 = pack32 (u16v2 ); 222u64 = pack64 (u16v4 ); 223 224i16v = unpack16 (i32 ); 225i16v4 = unpack16 (i64 ); 226u16v2 = unpack16 (u32 ); 227u16v4 = unpack16 (u64 ); 228 229// lessThan() 230bv = lessThan (u16v ,u16vec3 (u16 )); 231bv .xy = lessThan (i16v ,i16vec2 (i16 )); 232 233// lessThanEqual() 234bv = lessThanEqual (u16v ,u16vec3 (u16 )); 235bv .xy = lessThanEqual (i16v ,i16vec2 (i16 )); 236 237// greaterThan() 238bv = greaterThan (u16v ,u16vec3 (u16 )); 239bv .xy = greaterThan (i16v ,i16vec2 (i16 )); 240 241// greaterThanEqual() 242bv = greaterThanEqual (u16v ,u16vec3 (u16 )); 243bv .xy = greaterThanEqual (i16v ,i16vec2 (i16 )); 244 245// equal() 246bv = equal (u16v ,u16vec3 (u16 )); 247bv .xy = equal (i16v ,i16vec2 (i16 )); 248 249// notEqual() 250bv = notEqual (u16v ,u16vec3 (u16 )); 251bv .xy = notEqual (i16v ,i16vec2 (i16 )); 252} 253 254// Type conversion for specialization constant 255layout (constant_id = 100 )const int16_t si16 = int16_t (-10 ); 256layout (constant_id = 101 )const uint16_t su16 = uint16_t (20 );