yum-mirror/glslang

git clone https://git.yummers.dev/yum-mirror/glslang

Pankaj MistryImplement GL_NV_gpu_shader5 and enable GL_ARB_gpu_shader5 completely5cffd9a7

main
11.3 KiB319 linesraw
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
16    int var = gl_SampleMaskIn[0];
17    int i = 0;
18    texture(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
37    uint uv = int(0); // int -> uint
38    uvec2 uv2 = ivec2 (0); // ivec2 -> uvec2
39    uvec3 uv3 = ivec3 (0); // ivec3 -> uvec3
40    uvec4 uv4 = ivec4 (0); // ivec4 -> uvec4
41
42    // Function overloading with implict conversion int->uint
43    func(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 { 
309	int i; 
310} ubInst[4];
311
312
313void testBlockIndexing()
314{
315    ubInst[1];
316    //bbInst[2];
317    int i = 0;
318    ubInst[i]; //dynamic indexing via ARB_gpu_shader5 or enabled since version 430
319}