| #version 150 | |
| #extension GL_ARB_gpu_shader5 : enable | |
| // Testing storage qualifiers sample in/ sample out | |
| sample in vec4 colorSampIn; | |
| sample out vec4 colorSampOut; // error: sampler out is not allowed in fragment shader | |
| // Testing integer expression for indexing | |
| #define SAMPLER_ARRAY_SIZE 10 | |
| uniform sampler2D tex[SAMPLER_ARRAY_SIZE]; | |
| vec2 coord; | |
| void testIndexing() | |
| { | |
| // Enable gl_SampleMaskIn built in variable in fragment shader | |
| int var = gl_SampleMaskIn[0]; | |
| int i = 0; | |
| texture(tex[i], coord); //integer expression for indexing | |
| } | |
| // 1. Testing implicity conversin int -> uint | |
| // 2. Test function overloading with implicit conversion | |
| flat in int b; | |
| // Test function overloading with implicit conversion | |
| void func(uint a, uvec4 b) | |
| { | |
| } | |
| void testImplicitConv() | |
| { | |
| //precise vec2 h; | |
| //Test implicit conversion | |
| uint uv = int(0); // int -> uint | |
| uvec2 uv2 = ivec2 (0); // ivec2 -> uvec2 | |
| uvec3 uv3 = ivec3 (0); // ivec3 -> uvec3 | |
| uvec4 uv4 = ivec4 (0); // ivec4 -> uvec4 | |
| // Function overloading with implict conversion int->uint | |
| func(b, ivec4(1)); | |
| } | |
| // Test ARB_gpu_shader5 builtins | |
| uniform sampler2DShadow var16; | |
| uniform samplerCubeShadow var17; | |
| uniform sampler2DArrayShadow var18; | |
| uniform samplerCubeArrayShadow var19; | |
| uniform sampler2DRectShadow var20; | |
| uniform samplerCubeArray svar21; | |
| uniform usamplerCubeArray svar22; | |
| uniform isamplerCubeArray svar23; | |
| uniform sampler2D svar24; | |
| uniform usampler2D svar25; | |
| uniform isampler2D svar26; | |
| uniform sampler2DRect svar27; | |
| uniform usampler2DRect svar28; | |
| uniform isampler2DRect svar29; | |
| uniform samplerCube svar30; | |
| uniform usamplerCube svar31; | |
| uniform isamplerCube svar32; | |
| uniform sampler2DArray svar33; | |
| uniform usampler2DArray svar34; | |
| uniform isampler2DArray svar35; | |
| in float fvar0; | |
| in vec2 fvar1; | |
| in vec3 fvar2; | |
| in vec4 fvar3; | |
| void testBuiltins() { | |
| float var0; | |
| vec2 var1; | |
| vec3 var2; | |
| vec4 var3; | |
| int var4; | |
| ivec2 var5; | |
| ivec3 var6; | |
| ivec4 var7; | |
| uint var8; | |
| uvec2 var9; | |
| uvec3 var10; | |
| uvec4 var11; | |
| bool var12; | |
| bvec2 var13; | |
| bvec3 var14; | |
| bvec4 var15; | |
| const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0)); | |
| // Function Signature : genType fma(genType, genType, genType) | |
| var0 = fma(var0, var0, var0); | |
| var1 = fma(var1, var1, var1); | |
| var2 = fma(var2, var2, var2); | |
| var3 = fma(var3, var3, var3); | |
| // Function Signature : genType frexp(genType, genIType) | |
| var0 = frexp(var0, var4); | |
| var1 = frexp(var1, var5); | |
| var2 = frexp(var2, var6); | |
| var3 = frexp(var3, var7); | |
| // Function Signature : genType ldexp(genType, genIType) | |
| var0 = ldexp(var0, var4); | |
| var1 = ldexp(var1, var5); | |
| var2 = ldexp(var2, var6); | |
| var3 = ldexp(var3, var7); | |
| // Function Signature : genIType bitfieldExtract(genIType, int, int) | |
| var4 = bitfieldExtract(var4, var4, var4); | |
| var5 = bitfieldExtract(var5, var4, var4); | |
| var6 = bitfieldExtract(var6, var4, var4); | |
| var7 = bitfieldExtract(var7, var4, var4); | |
| // Function Signature : genUType bitfieldExtract(genUType, int, int) | |
| var8 = bitfieldExtract(var8, var4, var4); | |
| var9 = bitfieldExtract(var9, var4, var4); | |
| var10 = bitfieldExtract(var10, var4, var4); | |
| var11 = bitfieldExtract(var11, var4, var4); | |
| // Function Signature : genIType bitfieldInsert(genIType, genIType, int, int) | |
| var4 = bitfieldInsert(var4, var4, var4, var4); | |
| var5 = bitfieldInsert(var5, var5, var4, var4); | |
| var6 = bitfieldInsert(var6, var6, var4, var4); | |
| var7 = bitfieldInsert(var7, var7, var4, var4); | |
| // Function Signature : genUType bitfieldInsert(genUType, genUType, int, int) | |
| var8 = bitfieldInsert(var8, var8, var4, var4); | |
| var9 = bitfieldInsert(var9, var9, var4, var4); | |
| var10 = bitfieldInsert(var10, var10, var4, var4); | |
| var11 = bitfieldInsert(var11, var11, var4, var4); | |
| // Function Signature : genIType bitfieldReverse(genIType) | |
| var4 = bitfieldReverse(var4); | |
| var5 = bitfieldReverse(var5); | |
| var6 = bitfieldReverse(var6); | |
| var7 = bitfieldReverse(var7); | |
| // Function Signature : genUType bitfieldReverse(genUType) | |
| var8 = bitfieldReverse(var8); | |
| var9 = bitfieldReverse(var9); | |
| var10 = bitfieldReverse(var10); | |
| var11 = bitfieldReverse(var11); | |
| // Function Signature : genIType bitCount(genIType) | |
| var4 = bitCount(var4); | |
| var5 = bitCount(var5); | |
| var6 = bitCount(var6); | |
| var7 = bitCount(var7); | |
| // Function Signature : genUType bitCount(genUType) | |
| var8 = bitCount(var8); | |
| var9 = bitCount(var9); | |
| var10 = bitCount(var10); | |
| var11 = bitCount(var11); | |
| // Function Signature : genUType findMSB(genUType) | |
| var8 = findMSB(var8); | |
| var9 = findMSB(var9); | |
| var10 = findMSB(var10); | |
| var11 = findMSB(var11); | |
| // Function Signature : genIType findLSB(genIType) | |
| var4 = findMSB(var4); | |
| var5 = findMSB(var5); | |
| var6 = findMSB(var6); | |
| var7 = findMSB(var7); | |
| // Function Signature : genIType findLSB(genIType) | |
| var4 = findLSB(var4); | |
| var5 = findLSB(var5); | |
| var6 = findLSB(var6); | |
| var7 = findLSB(var7); | |
| // Function Signature : genUType findLSB(genUType) | |
| var8 = findLSB(var8); | |
| var9 = findLSB(var9); | |
| var10 = findLSB(var10); | |
| var11 = findLSB(var11); | |
| // Function Signature : genIType floatBitsToInt(genType) | |
| var4 = floatBitsToInt(var0); | |
| var5 = floatBitsToInt(var1); | |
| var6 = floatBitsToInt(var2); | |
| var7 = floatBitsToInt(var3); | |
| // Function Signature : genUType floatBitsToUint(genType) | |
| var8 = floatBitsToUint(var0); | |
| var9 = floatBitsToUint(var1); | |
| var10 = floatBitsToUint(var2); | |
| var11 = floatBitsToUint(var3); | |
| // Function Signature : genType intBitsToFloat(genIType) | |
| var0 = intBitsToFloat(var4); | |
| var1 = intBitsToFloat(var5); | |
| var2 = intBitsToFloat(var6); | |
| var3 = intBitsToFloat(var7); | |
| // Function Signature : genType uintBitsToFloat(genUType) | |
| var0 = uintBitsToFloat(var8); | |
| var1 = uintBitsToFloat(var9); | |
| var2 = uintBitsToFloat(var10); | |
| var3 = uintBitsToFloat(var11); | |
| // Function Signature : genUType uaddCarry(genUType, genUType, genUType) | |
| var8 = uaddCarry(var8, var8, var8); | |
| var9 = uaddCarry(var9, var9, var9); | |
| var10 = uaddCarry(var10, var10, var10); | |
| var11 = uaddCarry(var11, var11, var11); | |
| // Function Signature : genUType usubBorrow(genUType, genUType, genUType) | |
| var8 = usubBorrow(var8, var8, var8); | |
| var9 = usubBorrow(var9, var9, var9); | |
| var10 = usubBorrow(var10, var10, var10); | |
| var11 = usubBorrow(var11, var11, var11); | |
| // Function Signature : void umulExtended(genUType, genUType, genUType, genUType) | |
| umulExtended(var8, var8, var8, var8); | |
| umulExtended(var9, var9, var9, var9); | |
| umulExtended(var10, var10, var10, var10); | |
| umulExtended(var11, var11, var11, var11); | |
| // Function Signature : void imulExtended(genIType, genIType, genIType, genIType) | |
| imulExtended(var4, var4, var4, var4); | |
| imulExtended(var5, var5, var5, var5); | |
| imulExtended(var6, var6, var6, var6); | |
| imulExtended(var7, var7, var7, var7); | |
| // Generate specific builtins | |
| var8 = packUnorm2x16(var1); | |
| var8 = packUnorm4x8(var3); | |
| var8 = packSnorm4x8(var3); | |
| var1 = unpackUnorm2x16(var8); | |
| var3 = unpackUnorm4x8(var8); | |
| var3 = unpackSnorm4x8(var8); | |
| var0 = interpolateAtCentroid(fvar0); | |
| var1 = interpolateAtCentroid(fvar1); | |
| var2 = interpolateAtCentroid(fvar2); | |
| var3 = interpolateAtCentroid(fvar3); | |
| var0 = interpolateAtSample(fvar0, var4); | |
| var1 = interpolateAtSample(fvar1, var4); | |
| var2 = interpolateAtSample(fvar2, var4); | |
| var3 = interpolateAtSample(fvar3, var4); | |
| var0 = interpolateAtOffset(fvar0, var1); | |
| var1 = interpolateAtOffset(fvar1, var1); | |
| var2 = interpolateAtOffset(fvar2, var1); | |
| var3 = interpolateAtOffset(fvar3, var1); | |
| // Generate textue specific intrinsics | |
| // Function Signature : gvec4 textureGatherOffset(gsampler2D, vec2, ivec2) | |
| var3 = textureGatherOffset(svar24, var1, var5); | |
| var11 = textureGatherOffset(svar25, var1, var5); | |
| var7 = textureGatherOffset(svar26, var1, var5); | |
| // Function Signature : gvec4 textureGatherOffset(gsampler2DArray, vec3, ivec2) | |
| var3 = textureGatherOffset(svar33, var2, var5); | |
| var11 = textureGatherOffset(svar34, var2, var5); | |
| var7 = textureGatherOffset(svar35, var2, var5); | |
| // Function Signature : gvec4 textureGatherOffset(gsampler2DRect, vec2, ivec2) | |
| var3 = textureGatherOffset(svar27, var1, var5); | |
| var11 = textureGatherOffset(svar28, var1, var5); | |
| var7 = textureGatherOffset(svar29, var1, var5); | |
| // Function Signature : vec4 textureGatherOffset(sampler2DShadow, vec2, float, ivec2) | |
| var3 = textureGatherOffset(var16, var1, var0, var5); | |
| // Function Signature : vec4 textureGatherOffset(sampler2DArrayShadow, vec3, float, ivec2) | |
| var3 = textureGatherOffset(var18, var2, var0, var5); | |
| // Function Signature : vec4 textureGatherOffset(sampler2DRectShadow, vec2, float, ivec2) | |
| var3 = textureGatherOffset(var20, var1, var0, var5); | |
| // Function Signature : gvec4 textureGather(gsampler2D, vec2) | |
| var3 = textureGather(svar24, var1); | |
| var11 = textureGather(svar25, var1); | |
| var7 = textureGather(svar26, var1); | |
| // Function Signature : gvec4 textureGather(gsampler2DArray, vec3) | |
| var3 = textureGather(svar33, var2); | |
| var11 = textureGather(svar34, var2); | |
| var7 = textureGather(svar35, var2); | |
| // Function Signature : gvec4 textureGather(gsamplerCube, vec3) | |
| var3 = textureGather(svar30, var2); | |
| var11 = textureGather(svar31, var2); | |
| var7 = textureGather(svar32, var2); | |
| // Function Signature : gvec4 textureGather(gsamplerCubeArray, vec4) | |
| var3 = textureGather(svar21, var3); | |
| var11 = textureGather(svar22, var3); | |
| var7 = textureGather(svar23, var3); | |
| // Function Signature : gvec4 textureGather(gsampler2DRect, vec4) | |
| var3 = textureGather(svar27, var1); | |
| var11 = textureGather(svar28, var1); | |
| var7 = textureGather(svar29, var1); | |
| // Function Signature : vec4 textureGather(sampler2DShadow, vec2, float) | |
| var3 = textureGather(var16, var1, var0); | |
| // Function Signature : vec4 textureGather(sampler2DArrayShadow, vec3, float) | |
| var3 = textureGather(var18, var2, var0); | |
| // Function Signature : vec4 textureGather(samplerCubeShadow, vec3, float) | |
| var3 = textureGather(var17, var2, var0); | |
| // Function Signature : vec4 textureGather(samplerCubeArrayShadow, vec4, float) | |
| var3 = textureGather(var19, var3, var0); | |
| // Function Signature : vec4 textureGather(sampler2DRectShadow, vec2, float) | |
| var3 = textureGather(var20, var1, var0); | |
| // Function Signature : gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4]) | |
| var3 = textureGatherOffsets(svar24, var1, constOffsets); | |
| var11 = textureGatherOffsets(svar25, var1, constOffsets); | |
| var7 = textureGatherOffsets(svar26, var1, constOffsets); | |
| // Function Signature : gvec4 textureGatherOffsets(gsampler2DArray, vec2, ivec2[4]) | |
| var3 = textureGatherOffsets(svar33, var2, constOffsets); | |
| var11 = textureGatherOffsets(svar34, var2, constOffsets); | |
| var7 = textureGatherOffsets(svar35, var2, constOffsets); | |
| // Function Signature : gvec4 textureGatherOffsets(gsampler2DRect, vec2, ivec2[4]) | |
| var3 = textureGatherOffsets(svar27, var1, constOffsets); | |
| var11 = textureGatherOffsets(svar28, var1, constOffsets); | |
| var7 = textureGatherOffsets(svar29, var1, constOffsets); | |
| // Function Signature : vec4 textureGatherOffsets(sampler2DShadow, vec2, float, ivec2[4]) | |
| var3 = textureGatherOffsets(var16, var1, var0, constOffsets); | |
| // Function Signature : vec4 textureGatherOffsets(sampler2DArrayShadow, vec3, float, ivec2[4]) | |
| var3 = textureGatherOffsets(var18, var2, var0, constOffsets); | |
| // Function Signature : vec4 textureGatherOffsets(sampler2DRectShadow, vec2, float, ivec2[4]) | |
| var3 = textureGatherOffsets(var20, var1, var0, constOffsets); | |
| } | |
| // Testing integer expression for indexing in interface blocks | |
| uniform ubName { | |
| int i; | |
| } ubInst[4]; | |
| void testBlockIndexing() | |
| { | |
| ubInst[1]; | |
| //bbInst[2]; | |
| int i = 0; | |
| ubInst[i]; //dynamic indexing via ARB_gpu_shader5 or enabled since version 430 | |
| } |