Full stack: implement textureQueryLod(*) and textureQueryLevels(*).

This commit is contained in:
John Kessenich 2015-09-15 19:38:56 -06:00
parent ef0118b26e
commit 2398b3a458
15 changed files with 894 additions and 16 deletions

View File

@ -125,4 +125,18 @@ layout(location=0, index=1) out vec4 outVar4; // ERROR overlapping
layout(location=27, index=0) in vec4 indexIn; // ERROR, not on in
layout(location=0, index=0) in; // ERROR, not just on in
layout(location=0, index=0) out; // ERROR, need a variable
layout(location=26, index=0) out indexBlock { int a; } indexBlockI; // ERROR, not on a block
layout(location=26, index=0) out indexBlock { int a; } indexBlockI; // ERROR, not on a block
uniform sampler1D samp1D;
uniform sampler2DShadow samp2Ds;
void qlod()
{
vec2 lod;
float pf;
vec2 pf2;
vec3 pf3;
lod = textureQueryLod(samp1D, pf); // ERROR, not until 400
lod = textureQueryLod(samp2Ds, pf2); // ERROR, not until 400
}

View File

@ -138,4 +138,48 @@ void interp()
float f;
interpolateAtCentroid(f); // ERROR, not interpolant
interpolateAtSample(outp, 0); // ERROR, not interpolant
}
}
uniform sampler1D samp1D;
uniform isampler2D isamp2D;
uniform usampler3D usamp3D;
uniform samplerCube sampCube;
uniform isampler1DArray isamp1DA;
uniform usampler2DArray usamp2DA;
uniform isamplerCubeArray isampCubeA;
uniform sampler1DShadow samp1Ds;
uniform sampler2DShadow samp2Ds;
uniform samplerCubeShadow sampCubes;
uniform sampler1DArrayShadow samp1DAs;
uniform sampler2DArrayShadow samp2DAs;
uniform samplerCubeArrayShadow sampCubeAs;
uniform samplerBuffer sampBuf;
uniform sampler2DRect sampRect;
void qlod()
{
vec2 lod;
float pf;
vec2 pf2;
vec3 pf3;
lod = textureQueryLod(samp1D, pf);
lod = textureQueryLod(isamp2D, pf2);
lod = textureQueryLod(usamp3D, pf3);
lod = textureQueryLod(sampCube, pf3);
lod = textureQueryLod(isamp1DA, pf);
lod = textureQueryLod(usamp2DA, pf2);
lod = textureQueryLod(isampCubeA, pf3);
lod = textureQueryLod(samp1Ds, pf);
lod = textureQueryLod(samp2Ds, pf2);
lod = textureQueryLod(sampCubes, pf3);
lod = textureQueryLod(samp1DAs, pf);
lod = textureQueryLod(samp2DAs, pf2);
lod = textureQueryLod(sampCubeAs, pf3);
lod = textureQueryLod(sampBuf, pf); // ERROR
lod = textureQueryLod(sampRect, pf2); // ERROR
}

View File

@ -101,3 +101,17 @@ void bits()
}
layout(location = 7, index = 1) out vec4 indexedOut;
uniform sampler1D samp1D;
uniform sampler2DShadow samp2Ds;
void qlod()
{
vec2 lod;
float pf;
vec2 pf2;
vec3 pf3;
lod = textureQueryLod(samp1D, pf); // ERROR, only in fragment
lod = textureQueryLod(samp2Ds, pf2); // ERROR, only in fragment
}

View File

@ -146,3 +146,14 @@ layout(r8ui) uniform iimage2D i6bad; // ERROR, type mismatch
uniform offcheck {
layout(offset = 16) int foo; // ERROR
} offcheckI;
uniform sampler1D samp1D;
uniform sampler1DShadow samp1Ds;
void qlod()
{
int levels;
levels = textureQueryLevels(samp1D); // ERROR, not until 430
levels = textureQueryLevels(samp1Ds); // ERROR, not until 430
}

View File

@ -180,3 +180,44 @@ void fooq2()
s += imageSamples(ii2dms);
s += imageSamples(i2dmsa);
}
uniform sampler1D samp1D;
uniform usampler2D usamp2D;
uniform isampler3D isamp3D;
uniform isamplerCube isampCube;
uniform isampler1DArray isamp1DA;
uniform sampler2DArray samp2DA;
uniform usamplerCubeArray usampCubeA;
uniform sampler1DShadow samp1Ds;
uniform sampler2DShadow samp2Ds;
uniform samplerCubeShadow sampCubes;
uniform sampler1DArrayShadow samp1DAs;
uniform sampler2DArrayShadow samp2DAs;
uniform samplerCubeArrayShadow sampCubeAs;
uniform samplerBuffer sampBuf;
uniform sampler2DRect sampRect;
void qlod()
{
int levels;
levels = textureQueryLevels(samp1D);
levels = textureQueryLevels(usamp2D);
levels = textureQueryLevels(isamp3D);
levels = textureQueryLevels(isampCube);
levels = textureQueryLevels(isamp1DA);
levels = textureQueryLevels(samp2DA);
levels = textureQueryLevels(usampCubeA);
levels = textureQueryLevels(samp1Ds);
levels = textureQueryLevels(samp2Ds);
levels = textureQueryLevels(sampCubes);
levels = textureQueryLevels(samp1DAs);
levels = textureQueryLevels(samp2DAs);
levels = textureQueryLevels(sampCubeAs);
levels = textureQueryLevels(sampBuf); // ERROR
levels = textureQueryLevels(sampRect); // ERROR
}

View File

@ -33,7 +33,11 @@ ERROR: 0:126: 'index' : can only be used on an output
ERROR: 0:126: 'location/component/index' : cannot declare a default, use a full declaration
ERROR: 0:127: 'location/component/index' : cannot declare a default, use a full declaration
ERROR: 0:128: 'output block' : not supported in this stage: fragment
ERROR: 34 compilation errors. No code generated.
ERROR: 0:140: 'textureQueryLod' : no matching overloaded function found
ERROR: 0:140: 'assign' : cannot convert from 'const float' to 'temp 2-component vector of float'
ERROR: 0:141: 'textureQueryLod' : no matching overloaded function found
ERROR: 0:141: 'assign' : cannot convert from 'const float' to 'temp 2-component vector of float'
ERROR: 38 compilation errors. No code generated.
Shader version: 330
@ -70,6 +74,11 @@ ERROR: node is still EOpNull!
0:24 move second child to first child (temp 4-component vector of float)
0:24 'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
0:24 'inVar' (smooth in 4-component vector of float)
0:133 Function Definition: qlod( (global void)
0:133 Function Parameters:
0:? Sequence
0:140 'lod' (temp 2-component vector of float)
0:141 'lod' (temp 2-component vector of float)
0:? Linker Objects
0:? 'inVar' (smooth in 4-component vector of float)
0:? 'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
@ -102,6 +111,8 @@ ERROR: node is still EOpNull!
0:? 'outVar4' (layout(location=0 index=1 ) out 4-component vector of float)
0:? 'indexIn' (layout(location=27 index=0 ) smooth in 4-component vector of float)
0:? 'indexBlockI' (layout(location=26 index=0 ) out block{out int a})
0:? 'samp1D' (uniform sampler1D)
0:? 'samp2Ds' (uniform sampler2DShadow)
Linked fragment stage:
@ -143,6 +154,11 @@ ERROR: node is still EOpNull!
0:24 move second child to first child (temp 4-component vector of float)
0:24 'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
0:24 'inVar' (smooth in 4-component vector of float)
0:133 Function Definition: qlod( (global void)
0:133 Function Parameters:
0:? Sequence
0:140 'lod' (temp 2-component vector of float)
0:141 'lod' (temp 2-component vector of float)
0:? Linker Objects
0:? 'inVar' (smooth in 4-component vector of float)
0:? 'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
@ -175,4 +191,6 @@ ERROR: node is still EOpNull!
0:? 'outVar4' (layout(location=0 index=1 ) out 4-component vector of float)
0:? 'indexIn' (layout(location=27 index=0 ) smooth in 4-component vector of float)
0:? 'indexBlockI' (layout(location=26 index=0 ) out block{out int a})
0:? 'samp1D' (uniform sampler1D)
0:? 'samp2Ds' (uniform sampler2DShadow)

View File

@ -30,7 +30,11 @@ ERROR: 0:135: 'interpolateAtOffset' : first argument must be an interpolant, or
ERROR: 0:136: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element
ERROR: 0:139: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element
ERROR: 0:140: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element
ERROR: 30 compilation errors. No code generated.
ERROR: 0:183: 'textureQueryLod' : no matching overloaded function found
ERROR: 0:183: 'assign' : cannot convert from 'const float' to 'temp 2-component vector of float'
ERROR: 0:184: 'textureQueryLod' : no matching overloaded function found
ERROR: 0:184: 'assign' : cannot convert from 'const float' to 'temp 2-component vector of float'
ERROR: 34 compilation errors. No code generated.
Shader version: 400
@ -402,6 +406,76 @@ ERROR: node is still EOpNull!
0:140 'outp' (out 4-component vector of float)
0:140 Constant:
0:140 0 (const int)
0:161 Function Definition: qlod( (global void)
0:161 Function Parameters:
0:? Sequence
0:168 move second child to first child (temp 2-component vector of float)
0:168 'lod' (temp 2-component vector of float)
0:168 textureQueryLod (global 2-component vector of float)
0:168 'samp1D' (uniform sampler1D)
0:168 'pf' (temp float)
0:169 move second child to first child (temp 2-component vector of float)
0:169 'lod' (temp 2-component vector of float)
0:169 textureQueryLod (global 2-component vector of float)
0:169 'isamp2D' (uniform isampler2D)
0:169 'pf2' (temp 2-component vector of float)
0:170 move second child to first child (temp 2-component vector of float)
0:170 'lod' (temp 2-component vector of float)
0:170 textureQueryLod (global 2-component vector of float)
0:170 'usamp3D' (uniform usampler3D)
0:170 'pf3' (temp 3-component vector of float)
0:171 move second child to first child (temp 2-component vector of float)
0:171 'lod' (temp 2-component vector of float)
0:171 textureQueryLod (global 2-component vector of float)
0:171 'sampCube' (uniform samplerCube)
0:171 'pf3' (temp 3-component vector of float)
0:172 move second child to first child (temp 2-component vector of float)
0:172 'lod' (temp 2-component vector of float)
0:172 textureQueryLod (global 2-component vector of float)
0:172 'isamp1DA' (uniform isampler1DArray)
0:172 'pf' (temp float)
0:173 move second child to first child (temp 2-component vector of float)
0:173 'lod' (temp 2-component vector of float)
0:173 textureQueryLod (global 2-component vector of float)
0:173 'usamp2DA' (uniform usampler2DArray)
0:173 'pf2' (temp 2-component vector of float)
0:174 move second child to first child (temp 2-component vector of float)
0:174 'lod' (temp 2-component vector of float)
0:174 textureQueryLod (global 2-component vector of float)
0:174 'isampCubeA' (uniform isamplerCubeArray)
0:174 'pf3' (temp 3-component vector of float)
0:176 move second child to first child (temp 2-component vector of float)
0:176 'lod' (temp 2-component vector of float)
0:176 textureQueryLod (global 2-component vector of float)
0:176 'samp1Ds' (uniform sampler1DShadow)
0:176 'pf' (temp float)
0:177 move second child to first child (temp 2-component vector of float)
0:177 'lod' (temp 2-component vector of float)
0:177 textureQueryLod (global 2-component vector of float)
0:177 'samp2Ds' (uniform sampler2DShadow)
0:177 'pf2' (temp 2-component vector of float)
0:178 move second child to first child (temp 2-component vector of float)
0:178 'lod' (temp 2-component vector of float)
0:178 textureQueryLod (global 2-component vector of float)
0:178 'sampCubes' (uniform samplerCubeShadow)
0:178 'pf3' (temp 3-component vector of float)
0:179 move second child to first child (temp 2-component vector of float)
0:179 'lod' (temp 2-component vector of float)
0:179 textureQueryLod (global 2-component vector of float)
0:179 'samp1DAs' (uniform sampler1DArrayShadow)
0:179 'pf' (temp float)
0:180 move second child to first child (temp 2-component vector of float)
0:180 'lod' (temp 2-component vector of float)
0:180 textureQueryLod (global 2-component vector of float)
0:180 'samp2DAs' (uniform sampler2DArrayShadow)
0:180 'pf2' (temp 2-component vector of float)
0:181 move second child to first child (temp 2-component vector of float)
0:181 'lod' (temp 2-component vector of float)
0:181 textureQueryLod (global 2-component vector of float)
0:181 'sampCubeAs' (uniform samplerCubeArrayShadow)
0:181 'pf3' (temp 3-component vector of float)
0:183 'lod' (temp 2-component vector of float)
0:184 'lod' (temp 2-component vector of float)
0:? Linker Objects
0:? 'c2D' (smooth in 2-component vector of float)
0:? 'i' (flat in int)
@ -432,6 +506,21 @@ ERROR: node is still EOpNull!
0:? 'colorfc' (centroid flat in 2-component vector of float)
0:? 's1' (smooth in structure{global float x})
0:? 's2' (sample temp structure{global float x})
0:? 'samp1D' (uniform sampler1D)
0:? 'isamp2D' (uniform isampler2D)
0:? 'usamp3D' (uniform usampler3D)
0:? 'sampCube' (uniform samplerCube)
0:? 'isamp1DA' (uniform isampler1DArray)
0:? 'usamp2DA' (uniform usampler2DArray)
0:? 'isampCubeA' (uniform isamplerCubeArray)
0:? 'samp1Ds' (uniform sampler1DShadow)
0:? 'samp2Ds' (uniform sampler2DShadow)
0:? 'sampCubes' (uniform samplerCubeShadow)
0:? 'samp1DAs' (uniform sampler1DArrayShadow)
0:? 'samp2DAs' (uniform sampler2DArrayShadow)
0:? 'sampCubeAs' (uniform samplerCubeArrayShadow)
0:? 'sampBuf' (uniform samplerBuffer)
0:? 'sampRect' (uniform sampler2DRect)
Linked fragment stage:
@ -806,6 +895,76 @@ ERROR: node is still EOpNull!
0:140 'outp' (out 4-component vector of float)
0:140 Constant:
0:140 0 (const int)
0:161 Function Definition: qlod( (global void)
0:161 Function Parameters:
0:? Sequence
0:168 move second child to first child (temp 2-component vector of float)
0:168 'lod' (temp 2-component vector of float)
0:168 textureQueryLod (global 2-component vector of float)
0:168 'samp1D' (uniform sampler1D)
0:168 'pf' (temp float)
0:169 move second child to first child (temp 2-component vector of float)
0:169 'lod' (temp 2-component vector of float)
0:169 textureQueryLod (global 2-component vector of float)
0:169 'isamp2D' (uniform isampler2D)
0:169 'pf2' (temp 2-component vector of float)
0:170 move second child to first child (temp 2-component vector of float)
0:170 'lod' (temp 2-component vector of float)
0:170 textureQueryLod (global 2-component vector of float)
0:170 'usamp3D' (uniform usampler3D)
0:170 'pf3' (temp 3-component vector of float)
0:171 move second child to first child (temp 2-component vector of float)
0:171 'lod' (temp 2-component vector of float)
0:171 textureQueryLod (global 2-component vector of float)
0:171 'sampCube' (uniform samplerCube)
0:171 'pf3' (temp 3-component vector of float)
0:172 move second child to first child (temp 2-component vector of float)
0:172 'lod' (temp 2-component vector of float)
0:172 textureQueryLod (global 2-component vector of float)
0:172 'isamp1DA' (uniform isampler1DArray)
0:172 'pf' (temp float)
0:173 move second child to first child (temp 2-component vector of float)
0:173 'lod' (temp 2-component vector of float)
0:173 textureQueryLod (global 2-component vector of float)
0:173 'usamp2DA' (uniform usampler2DArray)
0:173 'pf2' (temp 2-component vector of float)
0:174 move second child to first child (temp 2-component vector of float)
0:174 'lod' (temp 2-component vector of float)
0:174 textureQueryLod (global 2-component vector of float)
0:174 'isampCubeA' (uniform isamplerCubeArray)
0:174 'pf3' (temp 3-component vector of float)
0:176 move second child to first child (temp 2-component vector of float)
0:176 'lod' (temp 2-component vector of float)
0:176 textureQueryLod (global 2-component vector of float)
0:176 'samp1Ds' (uniform sampler1DShadow)
0:176 'pf' (temp float)
0:177 move second child to first child (temp 2-component vector of float)
0:177 'lod' (temp 2-component vector of float)
0:177 textureQueryLod (global 2-component vector of float)
0:177 'samp2Ds' (uniform sampler2DShadow)
0:177 'pf2' (temp 2-component vector of float)
0:178 move second child to first child (temp 2-component vector of float)
0:178 'lod' (temp 2-component vector of float)
0:178 textureQueryLod (global 2-component vector of float)
0:178 'sampCubes' (uniform samplerCubeShadow)
0:178 'pf3' (temp 3-component vector of float)
0:179 move second child to first child (temp 2-component vector of float)
0:179 'lod' (temp 2-component vector of float)
0:179 textureQueryLod (global 2-component vector of float)
0:179 'samp1DAs' (uniform sampler1DArrayShadow)
0:179 'pf' (temp float)
0:180 move second child to first child (temp 2-component vector of float)
0:180 'lod' (temp 2-component vector of float)
0:180 textureQueryLod (global 2-component vector of float)
0:180 'samp2DAs' (uniform sampler2DArrayShadow)
0:180 'pf2' (temp 2-component vector of float)
0:181 move second child to first child (temp 2-component vector of float)
0:181 'lod' (temp 2-component vector of float)
0:181 textureQueryLod (global 2-component vector of float)
0:181 'sampCubeAs' (uniform samplerCubeArrayShadow)
0:181 'pf3' (temp 3-component vector of float)
0:183 'lod' (temp 2-component vector of float)
0:184 'lod' (temp 2-component vector of float)
0:? Linker Objects
0:? 'c2D' (smooth in 2-component vector of float)
0:? 'i' (flat in int)
@ -836,4 +995,19 @@ ERROR: node is still EOpNull!
0:? 'colorfc' (centroid flat in 2-component vector of float)
0:? 's1' (smooth in structure{global float x})
0:? 's2' (sample temp structure{global float x})
0:? 'samp1D' (uniform sampler1D)
0:? 'isamp2D' (uniform isampler2D)
0:? 'usamp3D' (uniform usampler3D)
0:? 'sampCube' (uniform samplerCube)
0:? 'isamp1DA' (uniform isampler1DArray)
0:? 'usamp2DA' (uniform usampler2DArray)
0:? 'isampCubeA' (uniform isamplerCubeArray)
0:? 'samp1Ds' (uniform sampler1DShadow)
0:? 'samp2Ds' (uniform sampler2DShadow)
0:? 'sampCubes' (uniform samplerCubeShadow)
0:? 'samp1DAs' (uniform sampler1DArrayShadow)
0:? 'samp2DAs' (uniform sampler2DArrayShadow)
0:? 'sampCubeAs' (uniform samplerCubeArrayShadow)
0:? 'sampBuf' (uniform samplerBuffer)
0:? 'sampRect' (uniform sampler2DRect)

View File

@ -19,7 +19,11 @@ ERROR: 0:65: 'invocations' : can only apply to 'in'
ERROR: 0:67: 'in' : type must be an array: inbls
ERROR: 0:71: 'triangles' : inconsistent input primitive for array size of inbla
ERROR: 0:103: 'index' : there is no such layout identifier for this stage taking an assigned value
ERROR: 19 compilation errors. No code generated.
ERROR: 0:115: 'textureQueryLod' : no matching overloaded function found
ERROR: 0:115: 'assign' : cannot convert from 'const float' to 'temp 2-component vector of float'
ERROR: 0:116: 'textureQueryLod' : no matching overloaded function found
ERROR: 0:116: 'assign' : cannot convert from 'const float' to 'temp 2-component vector of float'
ERROR: 23 compilation errors. No code generated.
Shader version: 400
@ -165,6 +169,11 @@ ERROR: node is still EOpNull!
0:100 'i2' (temp 2-component vector of int)
0:100 findMSB (global 2-component vector of int)
0:100 'u2' (temp 2-component vector of uint)
0:108 Function Definition: qlod( (global void)
0:108 Function Parameters:
0:? Sequence
0:115 'lod' (temp 2-component vector of float)
0:116 'lod' (temp 2-component vector of float)
0:? Linker Objects
0:? 'bn' (in 3-element array of block{in int a})
0:? 'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
@ -182,6 +191,8 @@ ERROR: node is still EOpNull!
0:? 'inbls' (in block{in int a})
0:? 'inbla' (in 17-element array of block{in int a})
0:? 'indexedOut' (layout(location=7 stream=0 ) out 4-component vector of float)
0:? 'samp1D' (uniform sampler1D)
0:? 'samp2Ds' (uniform sampler2DShadow)
Linked geometry stage:
@ -331,6 +342,11 @@ ERROR: node is still EOpNull!
0:100 'i2' (temp 2-component vector of int)
0:100 findMSB (global 2-component vector of int)
0:100 'u2' (temp 2-component vector of uint)
0:108 Function Definition: qlod( (global void)
0:108 Function Parameters:
0:? Sequence
0:115 'lod' (temp 2-component vector of float)
0:116 'lod' (temp 2-component vector of float)
0:? Linker Objects
0:? 'bn' (in 3-element array of block{in int a})
0:? 'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
@ -348,4 +364,6 @@ ERROR: node is still EOpNull!
0:? 'inbls' (in block{in int a})
0:? 'inbla' (in 17-element array of block{in int a})
0:? 'indexedOut' (layout(location=7 stream=0 ) out 4-component vector of float)
0:? 'samp1D' (uniform sampler1D)
0:? 'samp2Ds' (uniform sampler2DShadow)

View File

@ -49,7 +49,11 @@ ERROR: 0:142: 'r8_snorm' : does not apply to signed integer images
ERROR: 0:143: 'rgba32ui' : does not apply to signed integer images
ERROR: 0:144: 'r8ui' : does not apply to signed integer images
ERROR: 0:147: 'offset on block member' : not supported for this version or the enabled extensions
ERROR: 48 compilation errors. No code generated.
ERROR: 0:157: 'textureQueryLevels' : no matching overloaded function found
ERROR: 0:157: 'assign' : cannot convert from 'const float' to 'temp int'
ERROR: 0:158: 'textureQueryLevels' : no matching overloaded function found
ERROR: 0:158: 'assign' : cannot convert from 'const float' to 'temp int'
ERROR: 52 compilation errors. No code generated.
Shader version: 420
@ -239,6 +243,11 @@ ERROR: node is still EOpNull!
0:135 'qualim2' (layout(r32i ) coherent volatile readonly uniform iimage2D)
0:136 Function Call: passr(iI21; (global void)
0:136 'iimg2D' (layout(r32i ) uniform iimage2D)
0:153 Function Definition: qlod( (global void)
0:153 Function Parameters:
0:? Sequence
0:157 'levels' (temp int)
0:158 'levels' (temp int)
0:? Linker Objects
0:? 'v2' (smooth out 2-component vector of float)
0:? 'bad' (in 10-element array of 4-component vector of float)
@ -290,6 +299,8 @@ ERROR: node is still EOpNull!
0:? 'i5bad' (layout(rgba32ui ) uniform iimage2D)
0:? 'i6bad' (layout(r8ui ) uniform iimage2D)
0:? 'offcheckI' (layout(column_major shared ) uniform block{layout(column_major shared offset=16 ) uniform int foo})
0:? 'samp1D' (uniform sampler1D)
0:? 'samp1Ds' (uniform sampler1DShadow)
0:? 'gl_VertexID' (gl_VertexId int VertexId)
0:? 'gl_InstanceID' (gl_InstanceId int InstanceId)
@ -484,6 +495,11 @@ ERROR: node is still EOpNull!
0:135 'qualim2' (layout(r32i ) coherent volatile readonly uniform iimage2D)
0:136 Function Call: passr(iI21; (global void)
0:136 'iimg2D' (layout(r32i ) uniform iimage2D)
0:153 Function Definition: qlod( (global void)
0:153 Function Parameters:
0:? Sequence
0:157 'levels' (temp int)
0:158 'levels' (temp int)
0:? Linker Objects
0:? 'v2' (smooth out 2-component vector of float)
0:? 'bad' (in 10-element array of 4-component vector of float)
@ -535,6 +551,8 @@ ERROR: node is still EOpNull!
0:? 'i5bad' (layout(rgba32ui ) uniform iimage2D)
0:? 'i6bad' (layout(r8ui ) uniform iimage2D)
0:? 'offcheckI' (layout(column_major shared ) uniform block{layout(column_major shared offset=16 ) uniform int foo})
0:? 'samp1D' (uniform sampler1D)
0:? 'samp1Ds' (uniform sampler1DShadow)
0:? 'gl_VertexID' (gl_VertexId int VertexId)
0:? 'gl_InstanceID' (gl_InstanceId int InstanceId)

View File

@ -59,7 +59,11 @@ ERROR: 0:168: 'textureSamples and imageSamples' : not supported for this version
ERROR: 0:169: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions
ERROR: 0:170: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions
ERROR: 0:171: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions
ERROR: 59 compilation errors. No code generated.
ERROR: 0:221: 'textureQueryLevels' : no matching overloaded function found
ERROR: 0:221: 'assign' : cannot convert from 'const float' to 'temp int'
ERROR: 0:222: 'textureQueryLevels' : no matching overloaded function found
ERROR: 0:222: 'assign' : cannot convert from 'const float' to 'temp int'
ERROR: 63 compilation errors. No code generated.
Shader version: 430
@ -139,6 +143,63 @@ ERROR: node is still EOpNull!
0:181 's' (temp int)
0:181 imageQuerySamples (global int)
0:181 'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
0:202 Function Definition: qlod( (global void)
0:202 Function Parameters:
0:? Sequence
0:206 move second child to first child (temp int)
0:206 'levels' (temp int)
0:206 textureQueryLevels (global int)
0:206 'samp1D' (uniform sampler1D)
0:207 move second child to first child (temp int)
0:207 'levels' (temp int)
0:207 textureQueryLevels (global int)
0:207 'usamp2D' (uniform usampler2D)
0:208 move second child to first child (temp int)
0:208 'levels' (temp int)
0:208 textureQueryLevels (global int)
0:208 'isamp3D' (uniform isampler3D)
0:209 move second child to first child (temp int)
0:209 'levels' (temp int)
0:209 textureQueryLevels (global int)
0:209 'isampCube' (uniform isamplerCube)
0:210 move second child to first child (temp int)
0:210 'levels' (temp int)
0:210 textureQueryLevels (global int)
0:210 'isamp1DA' (uniform isampler1DArray)
0:211 move second child to first child (temp int)
0:211 'levels' (temp int)
0:211 textureQueryLevels (global int)
0:211 'samp2DA' (uniform sampler2DArray)
0:212 move second child to first child (temp int)
0:212 'levels' (temp int)
0:212 textureQueryLevels (global int)
0:212 'usampCubeA' (uniform usamplerCubeArray)
0:214 move second child to first child (temp int)
0:214 'levels' (temp int)
0:214 textureQueryLevels (global int)
0:214 'samp1Ds' (uniform sampler1DShadow)
0:215 move second child to first child (temp int)
0:215 'levels' (temp int)
0:215 textureQueryLevels (global int)
0:215 'samp2Ds' (uniform sampler2DShadow)
0:216 move second child to first child (temp int)
0:216 'levels' (temp int)
0:216 textureQueryLevels (global int)
0:216 'sampCubes' (uniform samplerCubeShadow)
0:217 move second child to first child (temp int)
0:217 'levels' (temp int)
0:217 textureQueryLevels (global int)
0:217 'samp1DAs' (uniform sampler1DArrayShadow)
0:218 move second child to first child (temp int)
0:218 'levels' (temp int)
0:218 textureQueryLevels (global int)
0:218 'samp2DAs' (uniform sampler2DArrayShadow)
0:219 move second child to first child (temp int)
0:219 'levels' (temp int)
0:219 textureQueryLevels (global int)
0:219 'sampCubeAs' (uniform samplerCubeArrayShadow)
0:221 'levels' (temp int)
0:222 'levels' (temp int)
0:? Linker Objects
0:? 'v4' (layout(location=3 ) temp 4-component vector of float)
0:? 'uv4' (layout(location=4 ) uniform 4-component vector of float)
@ -184,6 +245,21 @@ ERROR: node is still EOpNull!
0:? 'us2dmsa' (uniform usampler2DMSArray)
0:? 'ii2dms' (layout(rgba32i ) uniform iimage2DMS)
0:? 'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
0:? 'samp1D' (uniform sampler1D)
0:? 'usamp2D' (uniform usampler2D)
0:? 'isamp3D' (uniform isampler3D)
0:? 'isampCube' (uniform isamplerCube)
0:? 'isamp1DA' (uniform isampler1DArray)
0:? 'samp2DA' (uniform sampler2DArray)
0:? 'usampCubeA' (uniform usamplerCubeArray)
0:? 'samp1Ds' (uniform sampler1DShadow)
0:? 'samp2Ds' (uniform sampler2DShadow)
0:? 'sampCubes' (uniform samplerCubeShadow)
0:? 'samp1DAs' (uniform sampler1DArrayShadow)
0:? 'samp2DAs' (uniform sampler2DArrayShadow)
0:? 'sampCubeAs' (uniform samplerCubeArrayShadow)
0:? 'sampBuf' (uniform samplerBuffer)
0:? 'sampRect' (uniform sampler2DRect)
0:? 'gl_VertexID' (gl_VertexId int VertexId)
0:? 'gl_InstanceID' (gl_InstanceId int InstanceId)
@ -271,6 +347,63 @@ ERROR: node is still EOpNull!
0:181 's' (temp int)
0:181 imageQuerySamples (global int)
0:181 'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
0:202 Function Definition: qlod( (global void)
0:202 Function Parameters:
0:? Sequence
0:206 move second child to first child (temp int)
0:206 'levels' (temp int)
0:206 textureQueryLevels (global int)
0:206 'samp1D' (uniform sampler1D)
0:207 move second child to first child (temp int)
0:207 'levels' (temp int)
0:207 textureQueryLevels (global int)
0:207 'usamp2D' (uniform usampler2D)
0:208 move second child to first child (temp int)
0:208 'levels' (temp int)
0:208 textureQueryLevels (global int)
0:208 'isamp3D' (uniform isampler3D)
0:209 move second child to first child (temp int)
0:209 'levels' (temp int)
0:209 textureQueryLevels (global int)
0:209 'isampCube' (uniform isamplerCube)
0:210 move second child to first child (temp int)
0:210 'levels' (temp int)
0:210 textureQueryLevels (global int)
0:210 'isamp1DA' (uniform isampler1DArray)
0:211 move second child to first child (temp int)
0:211 'levels' (temp int)
0:211 textureQueryLevels (global int)
0:211 'samp2DA' (uniform sampler2DArray)
0:212 move second child to first child (temp int)
0:212 'levels' (temp int)
0:212 textureQueryLevels (global int)
0:212 'usampCubeA' (uniform usamplerCubeArray)
0:214 move second child to first child (temp int)
0:214 'levels' (temp int)
0:214 textureQueryLevels (global int)
0:214 'samp1Ds' (uniform sampler1DShadow)
0:215 move second child to first child (temp int)
0:215 'levels' (temp int)
0:215 textureQueryLevels (global int)
0:215 'samp2Ds' (uniform sampler2DShadow)
0:216 move second child to first child (temp int)
0:216 'levels' (temp int)
0:216 textureQueryLevels (global int)
0:216 'sampCubes' (uniform samplerCubeShadow)
0:217 move second child to first child (temp int)
0:217 'levels' (temp int)
0:217 textureQueryLevels (global int)
0:217 'samp1DAs' (uniform sampler1DArrayShadow)
0:218 move second child to first child (temp int)
0:218 'levels' (temp int)
0:218 textureQueryLevels (global int)
0:218 'samp2DAs' (uniform sampler2DArrayShadow)
0:219 move second child to first child (temp int)
0:219 'levels' (temp int)
0:219 textureQueryLevels (global int)
0:219 'sampCubeAs' (uniform samplerCubeArrayShadow)
0:221 'levels' (temp int)
0:222 'levels' (temp int)
0:? Linker Objects
0:? 'v4' (layout(location=3 ) temp 4-component vector of float)
0:? 'uv4' (layout(location=4 ) uniform 4-component vector of float)
@ -316,6 +449,21 @@ ERROR: node is still EOpNull!
0:? 'us2dmsa' (uniform usampler2DMSArray)
0:? 'ii2dms' (layout(rgba32i ) uniform iimage2DMS)
0:? 'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
0:? 'samp1D' (uniform sampler1D)
0:? 'usamp2D' (uniform usampler2D)
0:? 'isamp3D' (uniform isampler3D)
0:? 'isampCube' (uniform isamplerCube)
0:? 'isamp1DA' (uniform isampler1DArray)
0:? 'samp2DA' (uniform sampler2DArray)
0:? 'usampCubeA' (uniform usamplerCubeArray)
0:? 'samp1Ds' (uniform sampler1DShadow)
0:? 'samp2Ds' (uniform sampler2DShadow)
0:? 'sampCubes' (uniform samplerCubeShadow)
0:? 'samp1DAs' (uniform sampler1DArrayShadow)
0:? 'samp2DAs' (uniform sampler2DArrayShadow)
0:? 'sampCubeAs' (uniform samplerCubeArrayShadow)
0:? 'sampBuf' (uniform samplerBuffer)
0:? 'sampRect' (uniform sampler2DRect)
0:? 'gl_VertexID' (gl_VertexId int VertexId)
0:? 'gl_InstanceID' (gl_InstanceId int InstanceId)

View File

@ -0,0 +1,282 @@
spv.queryL.frag
Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 211
Source GLSL 430
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginLowerLeft
Name 4 "main"
Name 9 "lod"
Name 13 "samp1D"
Name 16 "pf"
Name 23 "isamp2D"
Name 25 "pf2"
Name 34 "usamp3D"
Name 38 "pf3"
Name 46 "sampCube"
Name 55 "isamp1DA"
Name 64 "usamp2DA"
Name 73 "isampCubeA"
Name 82 "samp1Ds"
Name 91 "samp2Ds"
Name 100 "sampCubes"
Name 109 "samp1DAs"
Name 118 "samp2DAs"
Name 127 "sampCubeAs"
Name 134 "levels"
Name 140 "usamp2D"
Name 148 "isamp3D"
Name 156 "isampCube"
Name 168 "samp2DA"
Name 176 "usampCubeA"
Name 206 "sampBuf"
Name 210 "sampRect"
Decorate 206(sampBuf) NoStaticUse
Decorate 210(sampRect) NoStaticUse
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 2
8: TypePointer Function 7(fvec2)
10: TypeImage 6(float) 1D sampled format:Unknown
11: TypeSampledImage 10
12: TypePointer UniformConstant 11
13(samp1D): 12(ptr) Variable UniformConstant
15: TypePointer Function 6(float)
19: TypeInt 32 1
20: TypeImage 19(int) 2D sampled format:Unknown
21: TypeSampledImage 20
22: TypePointer UniformConstant 21
23(isamp2D): 22(ptr) Variable UniformConstant
30: TypeInt 32 0
31: TypeImage 30(int) 3D sampled format:Unknown
32: TypeSampledImage 31
33: TypePointer UniformConstant 32
34(usamp3D): 33(ptr) Variable UniformConstant
36: TypeVector 6(float) 3
37: TypePointer Function 36(fvec3)
43: TypeImage 6(float) Cube sampled format:Unknown
44: TypeSampledImage 43
45: TypePointer UniformConstant 44
46(sampCube): 45(ptr) Variable UniformConstant
52: TypeImage 19(int) 1D array sampled format:Unknown
53: TypeSampledImage 52
54: TypePointer UniformConstant 53
55(isamp1DA): 54(ptr) Variable UniformConstant
61: TypeImage 30(int) 2D array sampled format:Unknown
62: TypeSampledImage 61
63: TypePointer UniformConstant 62
64(usamp2DA): 63(ptr) Variable UniformConstant
70: TypeImage 19(int) Cube array sampled format:Unknown
71: TypeSampledImage 70
72: TypePointer UniformConstant 71
73(isampCubeA): 72(ptr) Variable UniformConstant
79: TypeImage 6(float) 1D depth sampled format:Unknown
80: TypeSampledImage 79
81: TypePointer UniformConstant 80
82(samp1Ds): 81(ptr) Variable UniformConstant
88: TypeImage 6(float) 2D depth sampled format:Unknown
89: TypeSampledImage 88
90: TypePointer UniformConstant 89
91(samp2Ds): 90(ptr) Variable UniformConstant
97: TypeImage 6(float) Cube depth sampled format:Unknown
98: TypeSampledImage 97
99: TypePointer UniformConstant 98
100(sampCubes): 99(ptr) Variable UniformConstant
106: TypeImage 6(float) 1D depth array sampled format:Unknown
107: TypeSampledImage 106
108: TypePointer UniformConstant 107
109(samp1DAs): 108(ptr) Variable UniformConstant
115: TypeImage 6(float) 2D depth array sampled format:Unknown
116: TypeSampledImage 115
117: TypePointer UniformConstant 116
118(samp2DAs): 117(ptr) Variable UniformConstant
124: TypeImage 6(float) Cube depth array sampled format:Unknown
125: TypeSampledImage 124
126: TypePointer UniformConstant 125
127(sampCubeAs): 126(ptr) Variable UniformConstant
133: TypePointer Function 19(int)
137: TypeImage 30(int) 2D sampled format:Unknown
138: TypeSampledImage 137
139: TypePointer UniformConstant 138
140(usamp2D): 139(ptr) Variable UniformConstant
145: TypeImage 19(int) 3D sampled format:Unknown
146: TypeSampledImage 145
147: TypePointer UniformConstant 146
148(isamp3D): 147(ptr) Variable UniformConstant
153: TypeImage 19(int) Cube sampled format:Unknown
154: TypeSampledImage 153
155: TypePointer UniformConstant 154
156(isampCube): 155(ptr) Variable UniformConstant
165: TypeImage 6(float) 2D array sampled format:Unknown
166: TypeSampledImage 165
167: TypePointer UniformConstant 166
168(samp2DA): 167(ptr) Variable UniformConstant
173: TypeImage 30(int) Cube array sampled format:Unknown
174: TypeSampledImage 173
175: TypePointer UniformConstant 174
176(usampCubeA): 175(ptr) Variable UniformConstant
203: TypeImage 6(float) Buffer sampled format:Unknown
204: TypeSampledImage 203
205: TypePointer UniformConstant 204
206(sampBuf): 205(ptr) Variable UniformConstant
207: TypeImage 6(float) Rect sampled format:Unknown
208: TypeSampledImage 207
209: TypePointer UniformConstant 208
210(sampRect): 209(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
9(lod): 8(ptr) Variable Function
16(pf): 15(ptr) Variable Function
25(pf2): 8(ptr) Variable Function
38(pf3): 37(ptr) Variable Function
134(levels): 133(ptr) Variable Function
14: 11 Load 13(samp1D)
17: 6(float) Load 16(pf)
18: 7(fvec2) ImageQueryLod 14 17
Store 9(lod) 18
24: 21 Load 23(isamp2D)
26: 7(fvec2) Load 25(pf2)
27: 7(fvec2) ImageQueryLod 24 26
28: 7(fvec2) Load 9(lod)
29: 7(fvec2) FAdd 28 27
Store 9(lod) 29
35: 32 Load 34(usamp3D)
39: 36(fvec3) Load 38(pf3)
40: 7(fvec2) ImageQueryLod 35 39
41: 7(fvec2) Load 9(lod)
42: 7(fvec2) FAdd 41 40
Store 9(lod) 42
47: 44 Load 46(sampCube)
48: 36(fvec3) Load 38(pf3)
49: 7(fvec2) ImageQueryLod 47 48
50: 7(fvec2) Load 9(lod)
51: 7(fvec2) FAdd 50 49
Store 9(lod) 51
56: 53 Load 55(isamp1DA)
57: 6(float) Load 16(pf)
58: 7(fvec2) ImageQueryLod 56 57
59: 7(fvec2) Load 9(lod)
60: 7(fvec2) FAdd 59 58
Store 9(lod) 60
65: 62 Load 64(usamp2DA)
66: 7(fvec2) Load 25(pf2)
67: 7(fvec2) ImageQueryLod 65 66
68: 7(fvec2) Load 9(lod)
69: 7(fvec2) FAdd 68 67
Store 9(lod) 69
74: 71 Load 73(isampCubeA)
75: 36(fvec3) Load 38(pf3)
76: 7(fvec2) ImageQueryLod 74 75
77: 7(fvec2) Load 9(lod)
78: 7(fvec2) FAdd 77 76
Store 9(lod) 78
83: 80 Load 82(samp1Ds)
84: 6(float) Load 16(pf)
85: 7(fvec2) ImageQueryLod 83 84
86: 7(fvec2) Load 9(lod)
87: 7(fvec2) FAdd 86 85
Store 9(lod) 87
92: 89 Load 91(samp2Ds)
93: 7(fvec2) Load 25(pf2)
94: 7(fvec2) ImageQueryLod 92 93
95: 7(fvec2) Load 9(lod)
96: 7(fvec2) FAdd 95 94
Store 9(lod) 96
101: 98 Load 100(sampCubes)
102: 36(fvec3) Load 38(pf3)
103: 7(fvec2) ImageQueryLod 101 102
104: 7(fvec2) Load 9(lod)
105: 7(fvec2) FAdd 104 103
Store 9(lod) 105
110: 107 Load 109(samp1DAs)
111: 6(float) Load 16(pf)
112: 7(fvec2) ImageQueryLod 110 111
113: 7(fvec2) Load 9(lod)
114: 7(fvec2) FAdd 113 112
Store 9(lod) 114
119: 116 Load 118(samp2DAs)
120: 7(fvec2) Load 25(pf2)
121: 7(fvec2) ImageQueryLod 119 120
122: 7(fvec2) Load 9(lod)
123: 7(fvec2) FAdd 122 121
Store 9(lod) 123
128: 125 Load 127(sampCubeAs)
129: 36(fvec3) Load 38(pf3)
130: 7(fvec2) ImageQueryLod 128 129
131: 7(fvec2) Load 9(lod)
132: 7(fvec2) FAdd 131 130
Store 9(lod) 132
135: 11 Load 13(samp1D)
136: 19(int) ImageQueryLevels 135
Store 134(levels) 136
141: 138 Load 140(usamp2D)
142: 19(int) ImageQueryLevels 141
143: 19(int) Load 134(levels)
144: 19(int) IAdd 143 142
Store 134(levels) 144
149: 146 Load 148(isamp3D)
150: 19(int) ImageQueryLevels 149
151: 19(int) Load 134(levels)
152: 19(int) IAdd 151 150
Store 134(levels) 152
157: 154 Load 156(isampCube)
158: 19(int) ImageQueryLevels 157
159: 19(int) Load 134(levels)
160: 19(int) IAdd 159 158
Store 134(levels) 160
161: 53 Load 55(isamp1DA)
162: 19(int) ImageQueryLevels 161
163: 19(int) Load 134(levels)
164: 19(int) IAdd 163 162
Store 134(levels) 164
169: 166 Load 168(samp2DA)
170: 19(int) ImageQueryLevels 169
171: 19(int) Load 134(levels)
172: 19(int) IAdd 171 170
Store 134(levels) 172
177: 174 Load 176(usampCubeA)
178: 19(int) ImageQueryLevels 177
179: 19(int) Load 134(levels)
180: 19(int) IAdd 179 178
Store 134(levels) 180
181: 80 Load 82(samp1Ds)
182: 19(int) ImageQueryLevels 181
Store 134(levels) 182
183: 89 Load 91(samp2Ds)
184: 19(int) ImageQueryLevels 183
185: 19(int) Load 134(levels)
186: 19(int) IAdd 185 184
Store 134(levels) 186
187: 98 Load 100(sampCubes)
188: 19(int) ImageQueryLevels 187
189: 19(int) Load 134(levels)
190: 19(int) IAdd 189 188
Store 134(levels) 190
191: 107 Load 109(samp1DAs)
192: 19(int) ImageQueryLevels 191
193: 19(int) Load 134(levels)
194: 19(int) IAdd 193 192
Store 134(levels) 194
195: 116 Load 118(samp2DAs)
196: 19(int) ImageQueryLevels 195
197: 19(int) Load 134(levels)
198: 19(int) IAdd 197 196
Store 134(levels) 198
199: 125 Load 127(sampCubeAs)
200: 19(int) ImageQueryLevels 199
201: 19(int) Load 134(levels)
202: 19(int) IAdd 201 200
Store 134(levels) 202
Return
FunctionEnd

64
Test/spv.queryL.frag Normal file
View File

@ -0,0 +1,64 @@
#version 430 core
uniform sampler1D samp1D;
uniform isampler2D isamp2D;
uniform usampler2D usamp2D;
uniform isampler3D isamp3D;
uniform usampler3D usamp3D;
uniform samplerCube sampCube;
uniform isamplerCube isampCube;
uniform isampler1DArray isamp1DA;
uniform sampler2DArray samp2DA;
uniform usampler2DArray usamp2DA;
uniform isamplerCubeArray isampCubeA;
uniform usamplerCubeArray usampCubeA;
uniform sampler1DShadow samp1Ds;
uniform sampler2DShadow samp2Ds;
uniform samplerCubeShadow sampCubes;
uniform sampler1DArrayShadow samp1DAs;
uniform sampler2DArrayShadow samp2DAs;
uniform samplerCubeArrayShadow sampCubeAs;
uniform samplerBuffer sampBuf;
uniform sampler2DRect sampRect;
void main()
{
vec2 lod;
float pf;
vec2 pf2;
vec3 pf3;
lod = textureQueryLod(samp1D, pf);
lod += textureQueryLod(isamp2D, pf2);
lod += textureQueryLod(usamp3D, pf3);
lod += textureQueryLod(sampCube, pf3);
lod += textureQueryLod(isamp1DA, pf);
lod += textureQueryLod(usamp2DA, pf2);
lod += textureQueryLod(isampCubeA, pf3);
lod += textureQueryLod(samp1Ds, pf);
lod += textureQueryLod(samp2Ds, pf2);
lod += textureQueryLod(sampCubes, pf3);
lod += textureQueryLod(samp1DAs, pf);
lod += textureQueryLod(samp2DAs, pf2);
lod += textureQueryLod(sampCubeAs, pf3);
int levels;
levels = textureQueryLevels(samp1D);
levels += textureQueryLevels(usamp2D);
levels += textureQueryLevels(isamp3D);
levels += textureQueryLevels(isampCube);
levels += textureQueryLevels(isamp1DA);
levels += textureQueryLevels(samp2DA);
levels += textureQueryLevels(usampCubeA);
levels = textureQueryLevels(samp1Ds);
levels += textureQueryLevels(samp2Ds);
levels += textureQueryLevels(sampCubes);
levels += textureQueryLevels(samp1DAs);
levels += textureQueryLevels(samp2DAs);
levels += textureQueryLevels(sampCubeAs);
}

View File

@ -80,3 +80,4 @@ spv.voidFunction.frag
spv.whileLoop.frag
spv.atomic.comp
spv.AofA.frag
spv.queryL.frag

View File

@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits.
// For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "3.0.755"
#define GLSLANG_REVISION "3.0.756"
#define GLSLANG_DATE "15-Sep-2015"

View File

@ -1848,7 +1848,8 @@ void TBuiltIns::initialize(int version, EProfile profile)
if (version >= 130)
add2ndGenerationSamplingImaging(version, profile);
// printf("%s\n", commonBuiltins.c_str());
//printf("%s\n", commonBuiltins.c_str());
//printf("%s\n", stageBuiltins[EShLangFragment].c_str());
}
//
@ -1946,21 +1947,21 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile)
//
void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int version, EProfile profile)
{
//
// textureSize
//
if (sampler.image && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 430)))
return;
//
// textureSize() and imageSize()
//
int sizeDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0) - (sampler.dim == EsdCube ? 1 : 0);
if (profile == EEsProfile)
commonBuiltins.append("highp ");
int dims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0) - (sampler.dim == EsdCube ? 1 : 0);
if (dims == 1)
if (sizeDims == 1)
commonBuiltins.append("int");
else {
commonBuiltins.append("ivec");
commonBuiltins.append(postfixes[dims]);
commonBuiltins.append(postfixes[sizeDims]);
}
if (sampler.image)
commonBuiltins.append(" imageSize(readonly writeonly volatile coherent ");
@ -1972,6 +1973,10 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int versi
else
commonBuiltins.append(");\n");
//
// textureSamples() and imageSamples()
//
// GL_ARB_shader_texture_image_samples
// TODO: spec issue? there are no memory qualifiers; how to query a writeonly/readonly image, etc?
if (profile != EEsProfile && version >= 430 && sampler.ms) {
@ -1983,6 +1988,32 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int versi
commonBuiltins.append(typeName);
commonBuiltins.append(");\n");
}
//
// textureQueryLod(), fragment stage only
//
if (profile != EEsProfile && version >= 400 && ! sampler.image && sampler.dim != EsdRect && ! sampler.ms && sampler.dim != EsdBuffer) {
stageBuiltins[EShLangFragment].append("vec2 textureQueryLod(");
stageBuiltins[EShLangFragment].append(typeName);
if (dimMap[sampler.dim] == 1)
stageBuiltins[EShLangFragment].append(", float");
else {
stageBuiltins[EShLangFragment].append(", vec");
stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
}
stageBuiltins[EShLangFragment].append(");\n");
}
//
// textureQueryLevels()
//
if (profile != EEsProfile && version >= 430 && ! sampler.image && sampler.dim != EsdRect && ! sampler.ms && sampler.dim != EsdBuffer) {
commonBuiltins.append("int textureQueryLevels(");
commonBuiltins.append(typeName);
commonBuiltins.append(");\n");
}
}
//