mirror of https://github.com/xemu-project/xemu.git
319 lines
11 KiB
JavaScript
319 lines
11 KiB
JavaScript
#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
|
|
} |