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{ 19int32_t i32 ; 20i32vec2 i32v2 ; 21i32vec3 i32v3 ; 22i32vec4 i32v4 ; 23uint32_t u32 ; 24u32vec2 u32v2 ; 25u32vec3 u32v3 ; 26u32vec4 u32v4 ; 27}block ; 28 29void main () 30{ 31} 32 33void literal () 34{ 35 36const int32_t i32Const [3 ]= 37 { 38-0x11111111 ,// Hex 39-1 ,// Dec 4004000000000 ,// Oct 41 }; 42 43int32_t i32 = i32Const [index ]; 44 45const uint32_t u32Const []= 46 { 470xFFFFFFFF ,// Hex 484294967295 ,// Dec 49017777777777 ,// Oct 50 }; 51 52uint32_t u32 = u32Const [index ]; 53} 54 55void typeCast32 () 56{ 57i8vec2 i8v ; 58u8vec2 u8v ; 59i16vec2 i16v ; 60u16vec2 u16v ; 61i32vec2 i32v ; 62u32vec2 u32v ; 63i64vec2 i64v ; 64u64vec2 u64v ; 65f16vec2 f16v ; 66f32vec2 f32v ; 67f64vec2 f64v ; 68bvec2 bv ; 69 70u32v = i32v ;// int32_t -> uint32_t 71i64v = i32v ;// int32_t -> int64_t 72u64v = i32v ;// int32_t -> uint64_t 73i64v = u32v ;// uint32_t -> int64_t 74u64v = u32v ;// uint32_t -> uint64_t 75f32v = i32v ;// int32_t -> float32_t 76f64v = i32v ;// int32_t -> float64_t 77f32v = u32v ;// uint32_t -> float32_t 78f64v = u32v ;// uint32_t -> float64_t 79 80i8v = i8vec2 (i32v );// int32_t -> int8_t 81i8v = i8vec2 (u32v );// uint32_t -> int8_t 82i16v = i16vec2 (i32v );// int32_t -> int16_t 83i16v = i16vec2 (u32v );// uint32_t -> int16_t 84i32v = i32vec2 (i32v );// int32_t -> int32_t 85i32v = i32vec2 (u32v );// uint32_t -> int32_t 86i64v = i64vec2 (i32v );// int32_t -> int64_t 87i64v = i64vec2 (u32v );// uint32_t -> int64_t 88u8v = u8vec2 (i32v );// int32_t -> uint8_t 89u8v = u8vec2 (u32v );// uint32_t -> uint8_t 90u16v = u16vec2 (i32v );// int32_t -> uint16_t 91u16v = u16vec2 (u32v );// uint32_t -> uint16_t 92u32v = u32vec2 (i32v );// int32_t -> uint32_t 93u32v = u32vec2 (u32v );// uint32_t -> uint32_t 94u64v = u64vec2 (i32v );// int32_t -> uint64_t 95u64v = u64vec2 (u32v );// uint32_t -> uint64_t 96 97f16v = f16vec2 (i32v );// int32_t -> float16_t 98f32v = f32vec2 (i32v );// int32_t -> float32_t 99f64v = f64vec2 (i32v );// int32_t -> float64_t 100f16v = f16vec2 (u32v );// uint32_t -> float16_t 101f32v = f32vec2 (u32v );// uint32_t -> float32_t 102f64v = f64vec2 (u32v );// uint32_t -> float64_t 103 104i32v = i32vec2 (bv );// bool -> int32 105u32v = u32vec2 (bv );// bool -> uint32 106bv = bvec2 (i32v );// int32 -> bool 107bv = bvec2 (u32v );// uint32 -> bool 108} 109 110void operators () 111{ 112u32vec3 u32v ; 113int32_t i32 ; 114uvec3 uv ; 115int32_t i ; 116int64_t i64 ; 117bool b ; 118 119// Unary 120u32v ++ ; 121i32 -- ; 122++ i32 ; 123-- u32v ; 124 125u32v = ~u32v ; 126 127i32 = + i32 ; 128u32v = - u32v ; 129 130// Arithmetic 131i32 += i32 ; 132u32v -= u32v ; 133i *=i32 ; 134uv /=u32v ; 135uv %=i32 ; 136 137uv = u32v + uv ; 138i64 = i32 - i64 ; 139uv = u32v * uv ; 140i64 = i32 * i64 ; 141i = i32 %i ; 142 143// Shift 144u32v <<=i32 ; 145i32 >>=u32v .y ; 146 147i64 = i64 <<u32v .z ; 148uv = u32v <<i ; 149 150// Relational 151b = (u32v .x != i32 ); 152b = (i32 == u32v .x ); 153b = (u32v .x > uv .y ); 154b = (i32 < i ); 155b = (u32v .y >=uv .x ); 156b = (i32 <=i ); 157 158// Bitwise 159uv |=i32 ; 160i = i32 |i ; 161i64 &=i32 ; 162uv = u32v & uv ; 163uv ^=i32 ; 164u32v = u32v ^i32 ; 165} 166 167void builtinFuncs () 168{ 169i32vec2 i32v ; 170i32vec4 i32v4 ; 171u32vec3 u32v ; 172u32vec2 u32v2 ; 173u32vec4 u32v4 ; 174bvec3 bv ; 175int32_t i32 ; 176uint32_t u32 ; 177int64_t i64 ; 178uint64_t u64 ; 179i8vec4 i8v4 ; 180u8vec4 u8v4 ; 181i16vec2 i16v2 ; 182u16vec2 u16v2 ; 183 184// abs() 185i32v = abs (i32v ); 186 187// sign() 188i32 = sign (i32 ); 189 190// min() 191i32v = min (i32v ,i32 ); 192i32v = min (i32v ,i32vec2 (-1 )); 193u32v = min (u32v ,u32 ); 194u32v = min (u32v ,u32vec3 (0 )); 195 196// max() 197i32v = max (i32v ,i32 ); 198i32v = max (i32v ,i32vec2 (-1 )); 199u32v = max (u32v ,u32 ); 200u32v = max (u32v ,u32vec3 (0 )); 201 202// clamp() 203i32v = clamp (i32v ,- i32 ,i32 ); 204i32v = clamp (i32v ,- i32v ,i32v ); 205u32v = clamp (u32v ,- u32 ,u32 ); 206u32v = clamp (u32v ,- u32v ,u32v ); 207 208// mix() 209i32 = mix (i32v .x ,i32v .y , true); 210i32v = mix (i32vec2 (i32 ),i32vec2 (- i32 ),bvec2 (false)); 211u32 = mix (u32v .x ,u32v .y , true); 212u32v = mix (u32vec3 (u32 ),u32vec3 (- u32 ),bvec3 (false)); 213 214//pack 215i32 = pack32 (i8v4 ); 216i32 = pack32 (i16v2 ); 217u32 = pack32 (u8v4 ); 218u32 = pack32 (u16v2 ); 219 220i32v = unpack32 (i64 ); 221u32v2 = unpack32 (u64 ); 222 223// lessThan() 224bv = lessThan (u32v ,u32vec3 (u32 )); 225bv .xy = lessThan (i32v ,i32vec2 (i32 )); 226 227// lessThanEqual() 228bv = lessThanEqual (u32v ,u32vec3 (u32 )); 229bv .xy = lessThanEqual (i32v ,i32vec2 (i32 )); 230 231// greaterThan() 232bv = greaterThan (u32v ,u32vec3 (u32 )); 233bv .xy = greaterThan (i32v ,i32vec2 (i32 )); 234 235// greaterThanEqual() 236bv = greaterThanEqual (u32v ,u32vec3 (u32 )); 237bv .xy = greaterThanEqual (i32v ,i32vec2 (i32 )); 238 239// equal() 240bv = equal (u32v ,u32vec3 (u32 )); 241bv .xy = equal (i32v ,i32vec2 (i32 )); 242 243// notEqual() 244bv = notEqual (u32v ,u32vec3 (u32 )); 245bv .xy = notEqual (i32v ,i32vec2 (i32 )); 246} 247 248// Type conversion for specialization constant 249layout (constant_id = 100 )const int32_t si32 = -10 ; 250layout (constant_id = 101 )const uint32_t su32 = 20U ; 251layout (constant_id = 102 )const int si = -5 ; 252layout (constant_id = 103 )const uint su = 4 ; 253layout (constant_id = 104 )const bool sb = true; 254 255#define UINT32_MAX 4294967295u 256uint32_t u32Max = UINT32_MAX ;