yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
5cffd9a7
main
1#version 150 2#extension GL_ARB_gpu_shader5 : enable 3 4// Testing storage qualifiers sample in/ sample out 5sample in vec4 colorSampIn ; 6sample out vec4 colorSampOut ;// error: sampler out is not allowed in fragment shader 7 8// Testing integer expression for indexing 9#define SAMPLER_ARRAY_SIZE 10 10uniform sampler2D tex [SAMPLER_ARRAY_SIZE ]; 11vec2 coord ; 12 13void testIndexing () 14{ 15// Enable gl_SampleMaskIn built in variable in fragment shader 16int var = gl_SampleMaskIn [0 ]; 17int i = 0 ; 18texture (tex [i ],coord );//integer expression for indexing 19 20} 21 22// 1. Testing implicity conversin int -> uint 23// 2. Test function overloading with implicit conversion 24 25flat in int b ; 26 27// Test function overloading with implicit conversion 28void func (uint a ,uvec4 b ) 29{ 30 31} 32 33void testImplicitConv () 34{ 35//precise vec2 h; 36//Test implicit conversion 37uint uv = int (0 );// int -> uint 38uvec2 uv2 = ivec2 (0 );// ivec2 -> uvec2 39uvec3 uv3 = ivec3 (0 );// ivec3 -> uvec3 40uvec4 uv4 = ivec4 (0 );// ivec4 -> uvec4 41 42// Function overloading with implict conversion int->uint 43func (b ,ivec4 (1 )); 44} 45 46 47// Test ARB_gpu_shader5 builtins 48uniform sampler2DShadow var16 ; 49uniform samplerCubeShadow var17 ; 50uniform sampler2DArrayShadow var18 ; 51uniform samplerCubeArrayShadow var19 ; 52uniform sampler2DRectShadow var20 ; 53uniform samplerCubeArray svar21 ; 54uniform usamplerCubeArray svar22 ; 55uniform isamplerCubeArray svar23 ; 56uniform sampler2D svar24 ; 57uniform usampler2D svar25 ; 58uniform isampler2D svar26 ; 59uniform sampler2DRect svar27 ; 60uniform usampler2DRect svar28 ; 61uniform isampler2DRect svar29 ; 62uniform samplerCube svar30 ; 63uniform usamplerCube svar31 ; 64uniform isamplerCube svar32 ; 65uniform sampler2DArray svar33 ; 66uniform usampler2DArray svar34 ; 67uniform isampler2DArray svar35 ; 68in float fvar0 ; 69in vec2 fvar1 ; 70in vec3 fvar2 ; 71in vec4 fvar3 ; 72 73 74void testBuiltins () { 75float var0 ; 76vec2 var1 ; 77vec3 var2 ; 78vec4 var3 ; 79int var4 ; 80ivec2 var5 ; 81ivec3 var6 ; 82ivec4 var7 ; 83uint var8 ; 84uvec2 var9 ; 85uvec3 var10 ; 86uvec4 var11 ; 87bool var12 ; 88bvec2 var13 ; 89bvec3 var14 ; 90bvec4 var15 ; 91const ivec2 constOffsets [4 ]= ivec2 [4 ](ivec2 (1 ,2 ),ivec2 (3 ,4 ),ivec2 (15 ,16 ),ivec2 (-2 ,0 )); 92 93// Function Signature : genType fma(genType, genType, genType) 94var0 = fma (var0 ,var0 ,var0 ); 95var1 = fma (var1 ,var1 ,var1 ); 96var2 = fma (var2 ,var2 ,var2 ); 97var3 = fma (var3 ,var3 ,var3 ); 98// Function Signature : genType frexp(genType, genIType) 99var0 = frexp (var0 ,var4 ); 100var1 = frexp (var1 ,var5 ); 101var2 = frexp (var2 ,var6 ); 102var3 = frexp (var3 ,var7 ); 103 104// Function Signature : genType ldexp(genType, genIType) 105var0 = ldexp (var0 ,var4 ); 106var1 = ldexp (var1 ,var5 ); 107var2 = ldexp (var2 ,var6 ); 108var3 = ldexp (var3 ,var7 ); 109 110// Function Signature : genIType bitfieldExtract(genIType, int, int) 111var4 = bitfieldExtract (var4 ,var4 ,var4 ); 112var5 = bitfieldExtract (var5 ,var4 ,var4 ); 113var6 = bitfieldExtract (var6 ,var4 ,var4 ); 114var7 = bitfieldExtract (var7 ,var4 ,var4 ); 115// Function Signature : genUType bitfieldExtract(genUType, int, int) 116var8 = bitfieldExtract (var8 ,var4 ,var4 ); 117var9 = bitfieldExtract (var9 ,var4 ,var4 ); 118var10 = bitfieldExtract (var10 ,var4 ,var4 ); 119var11 = bitfieldExtract (var11 ,var4 ,var4 ); 120// Function Signature : genIType bitfieldInsert(genIType, genIType, int, int) 121var4 = bitfieldInsert (var4 ,var4 ,var4 ,var4 ); 122var5 = bitfieldInsert (var5 ,var5 ,var4 ,var4 ); 123var6 = bitfieldInsert (var6 ,var6 ,var4 ,var4 ); 124var7 = bitfieldInsert (var7 ,var7 ,var4 ,var4 ); 125// Function Signature : genUType bitfieldInsert(genUType, genUType, int, int) 126var8 = bitfieldInsert (var8 ,var8 ,var4 ,var4 ); 127var9 = bitfieldInsert (var9 ,var9 ,var4 ,var4 ); 128var10 = bitfieldInsert (var10 ,var10 ,var4 ,var4 ); 129var11 = bitfieldInsert (var11 ,var11 ,var4 ,var4 ); 130// Function Signature : genIType bitfieldReverse(genIType) 131var4 = bitfieldReverse (var4 ); 132var5 = bitfieldReverse (var5 ); 133var6 = bitfieldReverse (var6 ); 134var7 = bitfieldReverse (var7 ); 135// Function Signature : genUType bitfieldReverse(genUType) 136var8 = bitfieldReverse (var8 ); 137var9 = bitfieldReverse (var9 ); 138var10 = bitfieldReverse (var10 ); 139var11 = bitfieldReverse (var11 ); 140// Function Signature : genIType bitCount(genIType) 141var4 = bitCount (var4 ); 142var5 = bitCount (var5 ); 143var6 = bitCount (var6 ); 144var7 = bitCount (var7 ); 145// Function Signature : genUType bitCount(genUType) 146var8 = bitCount (var8 ); 147var9 = bitCount (var9 ); 148var10 = bitCount (var10 ); 149var11 = bitCount (var11 ); 150// Function Signature : genUType findMSB(genUType) 151var8 = findMSB (var8 ); 152var9 = findMSB (var9 ); 153var10 = findMSB (var10 ); 154var11 = findMSB (var11 ); 155// Function Signature : genIType findLSB(genIType) 156var4 = findMSB (var4 ); 157var5 = findMSB (var5 ); 158var6 = findMSB (var6 ); 159var7 = findMSB (var7 ); 160// Function Signature : genIType findLSB(genIType) 161var4 = findLSB (var4 ); 162var5 = findLSB (var5 ); 163var6 = findLSB (var6 ); 164var7 = findLSB (var7 ); 165// Function Signature : genUType findLSB(genUType) 166var8 = findLSB (var8 ); 167var9 = findLSB (var9 ); 168var10 = findLSB (var10 ); 169var11 = findLSB (var11 ); 170 171// Function Signature : genIType floatBitsToInt(genType) 172var4 = floatBitsToInt (var0 ); 173var5 = floatBitsToInt (var1 ); 174var6 = floatBitsToInt (var2 ); 175var7 = floatBitsToInt (var3 ); 176// Function Signature : genUType floatBitsToUint(genType) 177var8 = floatBitsToUint (var0 ); 178var9 = floatBitsToUint (var1 ); 179var10 = floatBitsToUint (var2 ); 180var11 = floatBitsToUint (var3 ); 181// Function Signature : genType intBitsToFloat(genIType) 182var0 = intBitsToFloat (var4 ); 183var1 = intBitsToFloat (var5 ); 184var2 = intBitsToFloat (var6 ); 185var3 = intBitsToFloat (var7 ); 186// Function Signature : genType uintBitsToFloat(genUType) 187var0 = uintBitsToFloat (var8 ); 188var1 = uintBitsToFloat (var9 ); 189var2 = uintBitsToFloat (var10 ); 190var3 = uintBitsToFloat (var11 ); 191 192// Function Signature : genUType uaddCarry(genUType, genUType, genUType) 193var8 = uaddCarry (var8 ,var8 ,var8 ); 194var9 = uaddCarry (var9 ,var9 ,var9 ); 195var10 = uaddCarry (var10 ,var10 ,var10 ); 196var11 = uaddCarry (var11 ,var11 ,var11 ); 197// Function Signature : genUType usubBorrow(genUType, genUType, genUType) 198var8 = usubBorrow (var8 ,var8 ,var8 ); 199var9 = usubBorrow (var9 ,var9 ,var9 ); 200var10 = usubBorrow (var10 ,var10 ,var10 ); 201var11 = usubBorrow (var11 ,var11 ,var11 ); 202// Function Signature : void umulExtended(genUType, genUType, genUType, genUType) 203umulExtended (var8 ,var8 ,var8 ,var8 ); 204umulExtended (var9 ,var9 ,var9 ,var9 ); 205umulExtended (var10 ,var10 ,var10 ,var10 ); 206umulExtended (var11 ,var11 ,var11 ,var11 ); 207// Function Signature : void imulExtended(genIType, genIType, genIType, genIType) 208imulExtended (var4 ,var4 ,var4 ,var4 ); 209imulExtended (var5 ,var5 ,var5 ,var5 ); 210imulExtended (var6 ,var6 ,var6 ,var6 ); 211imulExtended (var7 ,var7 ,var7 ,var7 ); 212// Generate specific builtins 213var8 = packUnorm2x16 (var1 ); 214var8 = packUnorm4x8 (var3 ); 215var8 = packSnorm4x8 (var3 ); 216 217var1 = unpackUnorm2x16 (var8 ); 218var3 = unpackUnorm4x8 (var8 ); 219var3 = unpackSnorm4x8 (var8 ); 220 221var0 = interpolateAtCentroid (fvar0 ); 222var1 = interpolateAtCentroid (fvar1 ); 223var2 = interpolateAtCentroid (fvar2 ); 224var3 = interpolateAtCentroid (fvar3 ); 225var0 = interpolateAtSample (fvar0 ,var4 ); 226var1 = interpolateAtSample (fvar1 ,var4 ); 227var2 = interpolateAtSample (fvar2 ,var4 ); 228var3 = interpolateAtSample (fvar3 ,var4 ); 229var0 = interpolateAtOffset (fvar0 ,var1 ); 230var1 = interpolateAtOffset (fvar1 ,var1 ); 231var2 = interpolateAtOffset (fvar2 ,var1 ); 232var3 = interpolateAtOffset (fvar3 ,var1 ); 233 234// Generate textue specific intrinsics 235// Function Signature : gvec4 textureGatherOffset(gsampler2D, vec2, ivec2) 236var3 = textureGatherOffset (svar24 ,var1 ,var5 ); 237var11 = textureGatherOffset (svar25 ,var1 ,var5 ); 238var7 = textureGatherOffset (svar26 ,var1 ,var5 ); 239 240// Function Signature : gvec4 textureGatherOffset(gsampler2DArray, vec3, ivec2) 241var3 = textureGatherOffset (svar33 ,var2 ,var5 ); 242var11 = textureGatherOffset (svar34 ,var2 ,var5 ); 243var7 = textureGatherOffset (svar35 ,var2 ,var5 ); 244// Function Signature : gvec4 textureGatherOffset(gsampler2DRect, vec2, ivec2) 245var3 = textureGatherOffset (svar27 ,var1 ,var5 ); 246var11 = textureGatherOffset (svar28 ,var1 ,var5 ); 247var7 = textureGatherOffset (svar29 ,var1 ,var5 ); 248// Function Signature : vec4 textureGatherOffset(sampler2DShadow, vec2, float, ivec2) 249var3 = textureGatherOffset (var16 ,var1 ,var0 ,var5 ); 250// Function Signature : vec4 textureGatherOffset(sampler2DArrayShadow, vec3, float, ivec2) 251var3 = textureGatherOffset (var18 ,var2 ,var0 ,var5 ); 252// Function Signature : vec4 textureGatherOffset(sampler2DRectShadow, vec2, float, ivec2) 253var3 = textureGatherOffset (var20 ,var1 ,var0 ,var5 ); 254 255// Function Signature : gvec4 textureGather(gsampler2D, vec2) 256var3 = textureGather (svar24 ,var1 ); 257var11 = textureGather (svar25 ,var1 ); 258var7 = textureGather (svar26 ,var1 ); 259// Function Signature : gvec4 textureGather(gsampler2DArray, vec3) 260var3 = textureGather (svar33 ,var2 ); 261var11 = textureGather (svar34 ,var2 ); 262var7 = textureGather (svar35 ,var2 ); 263// Function Signature : gvec4 textureGather(gsamplerCube, vec3) 264var3 = textureGather (svar30 ,var2 ); 265var11 = textureGather (svar31 ,var2 ); 266var7 = textureGather (svar32 ,var2 ); 267// Function Signature : gvec4 textureGather(gsamplerCubeArray, vec4) 268var3 = textureGather (svar21 ,var3 ); 269var11 = textureGather (svar22 ,var3 ); 270var7 = textureGather (svar23 ,var3 ); 271// Function Signature : gvec4 textureGather(gsampler2DRect, vec4) 272var3 = textureGather (svar27 ,var1 ); 273var11 = textureGather (svar28 ,var1 ); 274var7 = textureGather (svar29 ,var1 ); 275// Function Signature : vec4 textureGather(sampler2DShadow, vec2, float) 276var3 = textureGather (var16 ,var1 ,var0 ); 277// Function Signature : vec4 textureGather(sampler2DArrayShadow, vec3, float) 278var3 = textureGather (var18 ,var2 ,var0 ); 279// Function Signature : vec4 textureGather(samplerCubeShadow, vec3, float) 280var3 = textureGather (var17 ,var2 ,var0 ); 281// Function Signature : vec4 textureGather(samplerCubeArrayShadow, vec4, float) 282var3 = textureGather (var19 ,var3 ,var0 ); 283// Function Signature : vec4 textureGather(sampler2DRectShadow, vec2, float) 284var3 = textureGather (var20 ,var1 ,var0 ); 285 286// Function Signature : gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4]) 287var3 = textureGatherOffsets (svar24 ,var1 ,constOffsets ); 288var11 = textureGatherOffsets (svar25 ,var1 ,constOffsets ); 289var7 = textureGatherOffsets (svar26 ,var1 ,constOffsets ); 290// Function Signature : gvec4 textureGatherOffsets(gsampler2DArray, vec2, ivec2[4]) 291var3 = textureGatherOffsets (svar33 ,var2 ,constOffsets ); 292var11 = textureGatherOffsets (svar34 ,var2 ,constOffsets ); 293var7 = textureGatherOffsets (svar35 ,var2 ,constOffsets ); 294// Function Signature : gvec4 textureGatherOffsets(gsampler2DRect, vec2, ivec2[4]) 295var3 = textureGatherOffsets (svar27 ,var1 ,constOffsets ); 296var11 = textureGatherOffsets (svar28 ,var1 ,constOffsets ); 297var7 = textureGatherOffsets (svar29 ,var1 ,constOffsets ); 298// Function Signature : vec4 textureGatherOffsets(sampler2DShadow, vec2, float, ivec2[4]) 299var3 = textureGatherOffsets (var16 ,var1 ,var0 ,constOffsets ); 300// Function Signature : vec4 textureGatherOffsets(sampler2DArrayShadow, vec3, float, ivec2[4]) 301var3 = textureGatherOffsets (var18 ,var2 ,var0 ,constOffsets ); 302// Function Signature : vec4 textureGatherOffsets(sampler2DRectShadow, vec2, float, ivec2[4]) 303var3 = textureGatherOffsets (var20 ,var1 ,var0 ,constOffsets ); 304} 305 306 307// Testing integer expression for indexing in interface blocks 308uniform ubName { 309int i ; 310}ubInst [4 ]; 311 312 313void testBlockIndexing () 314{ 315ubInst [1 ]; 316//bbInst[2]; 317int i = 0 ; 318ubInst [i ];//dynamic indexing via ARB_gpu_shader5 or enabled since version 430 319}