Full stack: implement textureQueryLod(*) and textureQueryLevels(*).
authorJohn Kessenich <cepheus@frii.com>
Wed, 16 Sep 2015 01:38:56 +0000 (19:38 -0600)
committerJohn Kessenich <cepheus@frii.com>
Wed, 16 Sep 2015 01:38:56 +0000 (19:38 -0600)
15 files changed:
Test/330.frag
Test/400.frag
Test/400.geom
Test/420.vert
Test/430.vert
Test/baseResults/330.frag.out
Test/baseResults/400.frag.out
Test/baseResults/400.geom.out
Test/baseResults/420.vert.out
Test/baseResults/430.vert.out
Test/baseResults/spv.queryL.frag.out [new file with mode: 0644]
Test/spv.queryL.frag [new file with mode: 0644]
Test/test-spirv-list
glslang/Include/revision.h
glslang/MachineIndependent/Initialize.cpp

index a23ab66..a3301a2 100644 (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
\ No newline at end of file
+layout(location=26, index=0) out indexBlock { int a; } indexBlockI; // ERROR, not on a block
+\r
+uniform sampler1D samp1D;\r
+uniform sampler2DShadow samp2Ds;\r
+\r
+void qlod()\r
+{\r
+    vec2 lod;\r
+    float pf;\r
+    vec2 pf2;\r
+    vec3 pf3;\r
+\r
+    lod = textureQueryLod(samp1D, pf);      // ERROR, not until 400\r
+    lod = textureQueryLod(samp2Ds, pf2);    // ERROR, not until 400\r
+}\r
index 7ca965f..a2c4691 100644 (file)
@@ -138,4 +138,48 @@ void interp()
     float f;\r
     interpolateAtCentroid(f);           // ERROR, not interpolant\r
     interpolateAtSample(outp, 0);       // ERROR, not interpolant\r
-}
\ No newline at end of file
+}\r
+\r
+uniform sampler1D samp1D;\r
+uniform isampler2D isamp2D;\r
+uniform usampler3D usamp3D;\r
+uniform samplerCube sampCube; \r
+uniform isampler1DArray isamp1DA;\r
+uniform usampler2DArray usamp2DA;\r
+uniform isamplerCubeArray isampCubeA;\r
+\r
+uniform sampler1DShadow samp1Ds;\r
+uniform sampler2DShadow samp2Ds;\r
+uniform samplerCubeShadow sampCubes;\r
+uniform sampler1DArrayShadow samp1DAs;\r
+uniform sampler2DArrayShadow samp2DAs;\r
+uniform samplerCubeArrayShadow sampCubeAs;\r
+\r
+uniform samplerBuffer sampBuf;\r
+uniform sampler2DRect sampRect;\r
+\r
+void qlod()\r
+{\r
+    vec2 lod;\r
+    float pf;\r
+    vec2 pf2;\r
+    vec3 pf3;\r
+\r
+    lod = textureQueryLod(samp1D, pf);\r
+    lod = textureQueryLod(isamp2D, pf2);\r
+    lod = textureQueryLod(usamp3D, pf3);\r
+    lod = textureQueryLod(sampCube, pf3);\r
+    lod = textureQueryLod(isamp1DA, pf);\r
+    lod = textureQueryLod(usamp2DA, pf2);\r
+    lod = textureQueryLod(isampCubeA, pf3);\r
+\r
+    lod = textureQueryLod(samp1Ds, pf);\r
+    lod = textureQueryLod(samp2Ds, pf2);\r
+    lod = textureQueryLod(sampCubes, pf3);\r
+    lod = textureQueryLod(samp1DAs, pf);\r
+    lod = textureQueryLod(samp2DAs, pf2);\r
+    lod = textureQueryLod(sampCubeAs, pf3);\r
+\r
+    lod = textureQueryLod(sampBuf, pf);     // ERROR\r
+    lod = textureQueryLod(sampRect, pf2);   // ERROR\r
+}\r
index 7fe9fc1..e2ca9b9 100644 (file)
@@ -101,3 +101,17 @@ void bits()
 }\r
 \r
 layout(location = 7, index = 1) out vec4 indexedOut;\r
+\r
+uniform sampler1D samp1D;\r
+uniform sampler2DShadow samp2Ds;\r
+\r
+void qlod()\r
+{\r
+    vec2 lod;\r
+    float pf;\r
+    vec2 pf2;\r
+    vec3 pf3;\r
+\r
+    lod = textureQueryLod(samp1D, pf);      // ERROR, only in fragment\r
+    lod = textureQueryLod(samp2Ds, pf2);    // ERROR, only in fragment\r
+}\r
index 5007e20..49035ea 100644 (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;\r
+uniform sampler1DShadow samp1Ds;\r
+\r
+void qlod()\r
+{\r
+    int levels;\r
+\r
+    levels = textureQueryLevels(samp1D);   // ERROR, not until 430\r
+    levels = textureQueryLevels(samp1Ds);  // ERROR, not until 430\r
+}
\ No newline at end of file
index 64dd42f..84c3220 100644 (file)
@@ -180,3 +180,44 @@ void fooq2()
     s += imageSamples(ii2dms);    \r
     s += imageSamples(i2dmsa);    \r
 }\r
+\r
+uniform sampler1D samp1D;\r
+uniform usampler2D usamp2D;\r
+uniform isampler3D isamp3D;\r
+uniform isamplerCube isampCube; \r
+uniform isampler1DArray isamp1DA;\r
+uniform sampler2DArray samp2DA;\r
+uniform usamplerCubeArray usampCubeA;\r
+\r
+uniform sampler1DShadow samp1Ds;\r
+uniform sampler2DShadow samp2Ds;\r
+uniform samplerCubeShadow sampCubes;\r
+uniform sampler1DArrayShadow samp1DAs;\r
+uniform sampler2DArrayShadow samp2DAs;\r
+uniform samplerCubeArrayShadow sampCubeAs;\r
+\r
+uniform samplerBuffer sampBuf;\r
+uniform sampler2DRect sampRect;\r
+\r
+void qlod()\r
+{\r
+    int levels;\r
+\r
+    levels = textureQueryLevels(samp1D);\r
+    levels = textureQueryLevels(usamp2D);\r
+    levels = textureQueryLevels(isamp3D);\r
+    levels = textureQueryLevels(isampCube);\r
+    levels = textureQueryLevels(isamp1DA);\r
+    levels = textureQueryLevels(samp2DA);\r
+    levels = textureQueryLevels(usampCubeA);\r
+\r
+    levels = textureQueryLevels(samp1Ds);\r
+    levels = textureQueryLevels(samp2Ds);\r
+    levels = textureQueryLevels(sampCubes);\r
+    levels = textureQueryLevels(samp1DAs);\r
+    levels = textureQueryLevels(samp2DAs);\r
+    levels = textureQueryLevels(sampCubeAs);\r
+\r
+    levels = textureQueryLevels(sampBuf);    // ERROR\r
+    levels = textureQueryLevels(sampRect);   // ERROR\r
+}\r
index 3e17d92..2def6c7 100644 (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 \r
 ERROR: 0:127: 'location/component/index' : cannot declare a default, use a full declaration \r
 ERROR: 0:128: 'output block' : not supported in this stage: fragment\r
-ERROR: 34 compilation errors.  No code generated.\r
+ERROR: 0:140: 'textureQueryLod' : no matching overloaded function found \r
+ERROR: 0:140: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'\r
+ERROR: 0:141: 'textureQueryLod' : no matching overloaded function found \r
+ERROR: 0:141: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'\r
+ERROR: 38 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 330\r
@@ -70,6 +74,11 @@ ERROR: node is still EOpNull!
 0:24      move second child to first child (temp 4-component vector of float)\r
 0:24        'outVar' (layout(location=0 index=0 ) out 4-component vector of float)\r
 0:24        'inVar' (smooth in 4-component vector of float)\r
+0:133  Function Definition: qlod( (global void)\r
+0:133    Function Parameters: \r
+0:?     Sequence\r
+0:140      'lod' (temp 2-component vector of float)\r
+0:141      'lod' (temp 2-component vector of float)\r
 0:?   Linker Objects\r
 0:?     'inVar' (smooth in 4-component vector of float)\r
 0:?     'outVar' (layout(location=0 index=0 ) out 4-component vector of float)\r
@@ -102,6 +111,8 @@ ERROR: node is still EOpNull!
 0:?     'outVar4' (layout(location=0 index=1 ) out 4-component vector of float)\r
 0:?     'indexIn' (layout(location=27 index=0 ) smooth in 4-component vector of float)\r
 0:?     'indexBlockI' (layout(location=26 index=0 ) out block{out int a})\r
+0:?     'samp1D' (uniform sampler1D)\r
+0:?     'samp2Ds' (uniform sampler2DShadow)\r
 \r
 \r
 Linked fragment stage:\r
@@ -143,6 +154,11 @@ ERROR: node is still EOpNull!
 0:24      move second child to first child (temp 4-component vector of float)\r
 0:24        'outVar' (layout(location=0 index=0 ) out 4-component vector of float)\r
 0:24        'inVar' (smooth in 4-component vector of float)\r
+0:133  Function Definition: qlod( (global void)\r
+0:133    Function Parameters: \r
+0:?     Sequence\r
+0:140      'lod' (temp 2-component vector of float)\r
+0:141      'lod' (temp 2-component vector of float)\r
 0:?   Linker Objects\r
 0:?     'inVar' (smooth in 4-component vector of float)\r
 0:?     'outVar' (layout(location=0 index=0 ) out 4-component vector of float)\r
@@ -175,4 +191,6 @@ ERROR: node is still EOpNull!
 0:?     'outVar4' (layout(location=0 index=1 ) out 4-component vector of float)\r
 0:?     'indexIn' (layout(location=27 index=0 ) smooth in 4-component vector of float)\r
 0:?     'indexBlockI' (layout(location=26 index=0 ) out block{out int a})\r
+0:?     'samp1D' (uniform sampler1D)\r
+0:?     'samp2Ds' (uniform sampler2DShadow)\r
 \r
index 5ecb908..7e09e8a 100644 (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 \r
 ERROR: 0:139: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element \r
 ERROR: 0:140: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element \r
-ERROR: 30 compilation errors.  No code generated.\r
+ERROR: 0:183: 'textureQueryLod' : no matching overloaded function found \r
+ERROR: 0:183: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'\r
+ERROR: 0:184: 'textureQueryLod' : no matching overloaded function found \r
+ERROR: 0:184: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'\r
+ERROR: 34 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 400\r
@@ -402,6 +406,76 @@ ERROR: node is still EOpNull!
 0:140        'outp' (out 4-component vector of float)\r
 0:140        Constant:\r
 0:140          0 (const int)\r
+0:161  Function Definition: qlod( (global void)\r
+0:161    Function Parameters: \r
+0:?     Sequence\r
+0:168      move second child to first child (temp 2-component vector of float)\r
+0:168        'lod' (temp 2-component vector of float)\r
+0:168        textureQueryLod (global 2-component vector of float)\r
+0:168          'samp1D' (uniform sampler1D)\r
+0:168          'pf' (temp float)\r
+0:169      move second child to first child (temp 2-component vector of float)\r
+0:169        'lod' (temp 2-component vector of float)\r
+0:169        textureQueryLod (global 2-component vector of float)\r
+0:169          'isamp2D' (uniform isampler2D)\r
+0:169          'pf2' (temp 2-component vector of float)\r
+0:170      move second child to first child (temp 2-component vector of float)\r
+0:170        'lod' (temp 2-component vector of float)\r
+0:170        textureQueryLod (global 2-component vector of float)\r
+0:170          'usamp3D' (uniform usampler3D)\r
+0:170          'pf3' (temp 3-component vector of float)\r
+0:171      move second child to first child (temp 2-component vector of float)\r
+0:171        'lod' (temp 2-component vector of float)\r
+0:171        textureQueryLod (global 2-component vector of float)\r
+0:171          'sampCube' (uniform samplerCube)\r
+0:171          'pf3' (temp 3-component vector of float)\r
+0:172      move second child to first child (temp 2-component vector of float)\r
+0:172        'lod' (temp 2-component vector of float)\r
+0:172        textureQueryLod (global 2-component vector of float)\r
+0:172          'isamp1DA' (uniform isampler1DArray)\r
+0:172          'pf' (temp float)\r
+0:173      move second child to first child (temp 2-component vector of float)\r
+0:173        'lod' (temp 2-component vector of float)\r
+0:173        textureQueryLod (global 2-component vector of float)\r
+0:173          'usamp2DA' (uniform usampler2DArray)\r
+0:173          'pf2' (temp 2-component vector of float)\r
+0:174      move second child to first child (temp 2-component vector of float)\r
+0:174        'lod' (temp 2-component vector of float)\r
+0:174        textureQueryLod (global 2-component vector of float)\r
+0:174          'isampCubeA' (uniform isamplerCubeArray)\r
+0:174          'pf3' (temp 3-component vector of float)\r
+0:176      move second child to first child (temp 2-component vector of float)\r
+0:176        'lod' (temp 2-component vector of float)\r
+0:176        textureQueryLod (global 2-component vector of float)\r
+0:176          'samp1Ds' (uniform sampler1DShadow)\r
+0:176          'pf' (temp float)\r
+0:177      move second child to first child (temp 2-component vector of float)\r
+0:177        'lod' (temp 2-component vector of float)\r
+0:177        textureQueryLod (global 2-component vector of float)\r
+0:177          'samp2Ds' (uniform sampler2DShadow)\r
+0:177          'pf2' (temp 2-component vector of float)\r
+0:178      move second child to first child (temp 2-component vector of float)\r
+0:178        'lod' (temp 2-component vector of float)\r
+0:178        textureQueryLod (global 2-component vector of float)\r
+0:178          'sampCubes' (uniform samplerCubeShadow)\r
+0:178          'pf3' (temp 3-component vector of float)\r
+0:179      move second child to first child (temp 2-component vector of float)\r
+0:179        'lod' (temp 2-component vector of float)\r
+0:179        textureQueryLod (global 2-component vector of float)\r
+0:179          'samp1DAs' (uniform sampler1DArrayShadow)\r
+0:179          'pf' (temp float)\r
+0:180      move second child to first child (temp 2-component vector of float)\r
+0:180        'lod' (temp 2-component vector of float)\r
+0:180        textureQueryLod (global 2-component vector of float)\r
+0:180          'samp2DAs' (uniform sampler2DArrayShadow)\r
+0:180          'pf2' (temp 2-component vector of float)\r
+0:181      move second child to first child (temp 2-component vector of float)\r
+0:181        'lod' (temp 2-component vector of float)\r
+0:181        textureQueryLod (global 2-component vector of float)\r
+0:181          'sampCubeAs' (uniform samplerCubeArrayShadow)\r
+0:181          'pf3' (temp 3-component vector of float)\r
+0:183      'lod' (temp 2-component vector of float)\r
+0:184      'lod' (temp 2-component vector of float)\r
 0:?   Linker Objects\r
 0:?     'c2D' (smooth in 2-component vector of float)\r
 0:?     'i' (flat in int)\r
@@ -432,6 +506,21 @@ ERROR: node is still EOpNull!
 0:?     'colorfc' (centroid flat in 2-component vector of float)\r
 0:?     's1' (smooth in structure{global float x})\r
 0:?     's2' (sample temp structure{global float x})\r
+0:?     'samp1D' (uniform sampler1D)\r
+0:?     'isamp2D' (uniform isampler2D)\r
+0:?     'usamp3D' (uniform usampler3D)\r
+0:?     'sampCube' (uniform samplerCube)\r
+0:?     'isamp1DA' (uniform isampler1DArray)\r
+0:?     'usamp2DA' (uniform usampler2DArray)\r
+0:?     'isampCubeA' (uniform isamplerCubeArray)\r
+0:?     'samp1Ds' (uniform sampler1DShadow)\r
+0:?     'samp2Ds' (uniform sampler2DShadow)\r
+0:?     'sampCubes' (uniform samplerCubeShadow)\r
+0:?     'samp1DAs' (uniform sampler1DArrayShadow)\r
+0:?     'samp2DAs' (uniform sampler2DArrayShadow)\r
+0:?     'sampCubeAs' (uniform samplerCubeArrayShadow)\r
+0:?     'sampBuf' (uniform samplerBuffer)\r
+0:?     'sampRect' (uniform sampler2DRect)\r
 \r
 \r
 Linked fragment stage:\r
@@ -806,6 +895,76 @@ ERROR: node is still EOpNull!
 0:140        'outp' (out 4-component vector of float)\r
 0:140        Constant:\r
 0:140          0 (const int)\r
+0:161  Function Definition: qlod( (global void)\r
+0:161    Function Parameters: \r
+0:?     Sequence\r
+0:168      move second child to first child (temp 2-component vector of float)\r
+0:168        'lod' (temp 2-component vector of float)\r
+0:168        textureQueryLod (global 2-component vector of float)\r
+0:168          'samp1D' (uniform sampler1D)\r
+0:168          'pf' (temp float)\r
+0:169      move second child to first child (temp 2-component vector of float)\r
+0:169        'lod' (temp 2-component vector of float)\r
+0:169        textureQueryLod (global 2-component vector of float)\r
+0:169          'isamp2D' (uniform isampler2D)\r
+0:169          'pf2' (temp 2-component vector of float)\r
+0:170      move second child to first child (temp 2-component vector of float)\r
+0:170        'lod' (temp 2-component vector of float)\r
+0:170        textureQueryLod (global 2-component vector of float)\r
+0:170          'usamp3D' (uniform usampler3D)\r
+0:170          'pf3' (temp 3-component vector of float)\r
+0:171      move second child to first child (temp 2-component vector of float)\r
+0:171        'lod' (temp 2-component vector of float)\r
+0:171        textureQueryLod (global 2-component vector of float)\r
+0:171          'sampCube' (uniform samplerCube)\r
+0:171          'pf3' (temp 3-component vector of float)\r
+0:172      move second child to first child (temp 2-component vector of float)\r
+0:172        'lod' (temp 2-component vector of float)\r
+0:172        textureQueryLod (global 2-component vector of float)\r
+0:172          'isamp1DA' (uniform isampler1DArray)\r
+0:172          'pf' (temp float)\r
+0:173      move second child to first child (temp 2-component vector of float)\r
+0:173        'lod' (temp 2-component vector of float)\r
+0:173        textureQueryLod (global 2-component vector of float)\r
+0:173          'usamp2DA' (uniform usampler2DArray)\r
+0:173          'pf2' (temp 2-component vector of float)\r
+0:174      move second child to first child (temp 2-component vector of float)\r
+0:174        'lod' (temp 2-component vector of float)\r
+0:174        textureQueryLod (global 2-component vector of float)\r
+0:174          'isampCubeA' (uniform isamplerCubeArray)\r
+0:174          'pf3' (temp 3-component vector of float)\r
+0:176      move second child to first child (temp 2-component vector of float)\r
+0:176        'lod' (temp 2-component vector of float)\r
+0:176        textureQueryLod (global 2-component vector of float)\r
+0:176          'samp1Ds' (uniform sampler1DShadow)\r
+0:176          'pf' (temp float)\r
+0:177      move second child to first child (temp 2-component vector of float)\r
+0:177        'lod' (temp 2-component vector of float)\r
+0:177        textureQueryLod (global 2-component vector of float)\r
+0:177          'samp2Ds' (uniform sampler2DShadow)\r
+0:177          'pf2' (temp 2-component vector of float)\r
+0:178      move second child to first child (temp 2-component vector of float)\r
+0:178        'lod' (temp 2-component vector of float)\r
+0:178        textureQueryLod (global 2-component vector of float)\r
+0:178          'sampCubes' (uniform samplerCubeShadow)\r
+0:178          'pf3' (temp 3-component vector of float)\r
+0:179      move second child to first child (temp 2-component vector of float)\r
+0:179        'lod' (temp 2-component vector of float)\r
+0:179        textureQueryLod (global 2-component vector of float)\r
+0:179          'samp1DAs' (uniform sampler1DArrayShadow)\r
+0:179          'pf' (temp float)\r
+0:180      move second child to first child (temp 2-component vector of float)\r
+0:180        'lod' (temp 2-component vector of float)\r
+0:180        textureQueryLod (global 2-component vector of float)\r
+0:180          'samp2DAs' (uniform sampler2DArrayShadow)\r
+0:180          'pf2' (temp 2-component vector of float)\r
+0:181      move second child to first child (temp 2-component vector of float)\r
+0:181        'lod' (temp 2-component vector of float)\r
+0:181        textureQueryLod (global 2-component vector of float)\r
+0:181          'sampCubeAs' (uniform samplerCubeArrayShadow)\r
+0:181          'pf3' (temp 3-component vector of float)\r
+0:183      'lod' (temp 2-component vector of float)\r
+0:184      'lod' (temp 2-component vector of float)\r
 0:?   Linker Objects\r
 0:?     'c2D' (smooth in 2-component vector of float)\r
 0:?     'i' (flat in int)\r
@@ -836,4 +995,19 @@ ERROR: node is still EOpNull!
 0:?     'colorfc' (centroid flat in 2-component vector of float)\r
 0:?     's1' (smooth in structure{global float x})\r
 0:?     's2' (sample temp structure{global float x})\r
+0:?     'samp1D' (uniform sampler1D)\r
+0:?     'isamp2D' (uniform isampler2D)\r
+0:?     'usamp3D' (uniform usampler3D)\r
+0:?     'sampCube' (uniform samplerCube)\r
+0:?     'isamp1DA' (uniform isampler1DArray)\r
+0:?     'usamp2DA' (uniform usampler2DArray)\r
+0:?     'isampCubeA' (uniform isamplerCubeArray)\r
+0:?     'samp1Ds' (uniform sampler1DShadow)\r
+0:?     'samp2Ds' (uniform sampler2DShadow)\r
+0:?     'sampCubes' (uniform samplerCubeShadow)\r
+0:?     'samp1DAs' (uniform sampler1DArrayShadow)\r
+0:?     'samp2DAs' (uniform sampler2DArrayShadow)\r
+0:?     'sampCubeAs' (uniform samplerCubeArrayShadow)\r
+0:?     'sampBuf' (uniform samplerBuffer)\r
+0:?     'sampRect' (uniform sampler2DRect)\r
 \r
index 09e0b66..856bf7f 100644 (file)
@@ -19,7 +19,11 @@ ERROR: 0:65: 'invocations' : can only apply to 'in'
 ERROR: 0:67: 'in' : type must be an array: inbls\r
 ERROR: 0:71: 'triangles' : inconsistent input primitive for array size of inbla\r
 ERROR: 0:103: 'index' : there is no such layout identifier for this stage taking an assigned value \r
-ERROR: 19 compilation errors.  No code generated.\r
+ERROR: 0:115: 'textureQueryLod' : no matching overloaded function found \r
+ERROR: 0:115: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'\r
+ERROR: 0:116: 'textureQueryLod' : no matching overloaded function found \r
+ERROR: 0:116: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'\r
+ERROR: 23 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 400\r
@@ -165,6 +169,11 @@ ERROR: node is still EOpNull!
 0:100        'i2' (temp 2-component vector of int)\r
 0:100        findMSB (global 2-component vector of int)\r
 0:100          'u2' (temp 2-component vector of uint)\r
+0:108  Function Definition: qlod( (global void)\r
+0:108    Function Parameters: \r
+0:?     Sequence\r
+0:115      'lod' (temp 2-component vector of float)\r
+0:116      'lod' (temp 2-component vector of float)\r
 0:?   Linker Objects\r
 0:?     'bn' (in 3-element array of block{in int a})\r
 0:?     'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})\r
@@ -182,6 +191,8 @@ ERROR: node is still EOpNull!
 0:?     'inbls' (in block{in int a})\r
 0:?     'inbla' (in 17-element array of block{in int a})\r
 0:?     'indexedOut' (layout(location=7 stream=0 ) out 4-component vector of float)\r
+0:?     'samp1D' (uniform sampler1D)\r
+0:?     'samp2Ds' (uniform sampler2DShadow)\r
 \r
 \r
 Linked geometry stage:\r
@@ -331,6 +342,11 @@ ERROR: node is still EOpNull!
 0:100        'i2' (temp 2-component vector of int)\r
 0:100        findMSB (global 2-component vector of int)\r
 0:100          'u2' (temp 2-component vector of uint)\r
+0:108  Function Definition: qlod( (global void)\r
+0:108    Function Parameters: \r
+0:?     Sequence\r
+0:115      'lod' (temp 2-component vector of float)\r
+0:116      'lod' (temp 2-component vector of float)\r
 0:?   Linker Objects\r
 0:?     'bn' (in 3-element array of block{in int a})\r
 0:?     'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})\r
@@ -348,4 +364,6 @@ ERROR: node is still EOpNull!
 0:?     'inbls' (in block{in int a})\r
 0:?     'inbla' (in 17-element array of block{in int a})\r
 0:?     'indexedOut' (layout(location=7 stream=0 ) out 4-component vector of float)\r
+0:?     'samp1D' (uniform sampler1D)\r
+0:?     'samp2Ds' (uniform sampler2DShadow)\r
 \r
index 13c61eb..2901c39 100644 (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 \r
 ERROR: 0:144: 'r8ui' : does not apply to signed integer images \r
 ERROR: 0:147: 'offset on block member' : not supported for this version or the enabled extensions \r
-ERROR: 48 compilation errors.  No code generated.\r
+ERROR: 0:157: 'textureQueryLevels' : no matching overloaded function found \r
+ERROR: 0:157: 'assign' :  cannot convert from 'const float' to 'temp int'\r
+ERROR: 0:158: 'textureQueryLevels' : no matching overloaded function found \r
+ERROR: 0:158: 'assign' :  cannot convert from 'const float' to 'temp int'\r
+ERROR: 52 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 420\r
@@ -239,6 +243,11 @@ ERROR: node is still EOpNull!
 0:135        'qualim2' (layout(r32i ) coherent volatile readonly uniform iimage2D)\r
 0:136      Function Call: passr(iI21; (global void)\r
 0:136        'iimg2D' (layout(r32i ) uniform iimage2D)\r
+0:153  Function Definition: qlod( (global void)\r
+0:153    Function Parameters: \r
+0:?     Sequence\r
+0:157      'levels' (temp int)\r
+0:158      'levels' (temp int)\r
 0:?   Linker Objects\r
 0:?     'v2' (smooth out 2-component vector of float)\r
 0:?     'bad' (in 10-element array of 4-component vector of float)\r
@@ -290,6 +299,8 @@ ERROR: node is still EOpNull!
 0:?     'i5bad' (layout(rgba32ui ) uniform iimage2D)\r
 0:?     'i6bad' (layout(r8ui ) uniform iimage2D)\r
 0:?     'offcheckI' (layout(column_major shared ) uniform block{layout(column_major shared offset=16 ) uniform int foo})\r
+0:?     'samp1D' (uniform sampler1D)\r
+0:?     'samp1Ds' (uniform sampler1DShadow)\r
 0:?     'gl_VertexID' (gl_VertexId int VertexId)\r
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)\r
 \r
@@ -484,6 +495,11 @@ ERROR: node is still EOpNull!
 0:135        'qualim2' (layout(r32i ) coherent volatile readonly uniform iimage2D)\r
 0:136      Function Call: passr(iI21; (global void)\r
 0:136        'iimg2D' (layout(r32i ) uniform iimage2D)\r
+0:153  Function Definition: qlod( (global void)\r
+0:153    Function Parameters: \r
+0:?     Sequence\r
+0:157      'levels' (temp int)\r
+0:158      'levels' (temp int)\r
 0:?   Linker Objects\r
 0:?     'v2' (smooth out 2-component vector of float)\r
 0:?     'bad' (in 10-element array of 4-component vector of float)\r
@@ -535,6 +551,8 @@ ERROR: node is still EOpNull!
 0:?     'i5bad' (layout(rgba32ui ) uniform iimage2D)\r
 0:?     'i6bad' (layout(r8ui ) uniform iimage2D)\r
 0:?     'offcheckI' (layout(column_major shared ) uniform block{layout(column_major shared offset=16 ) uniform int foo})\r
+0:?     'samp1D' (uniform sampler1D)\r
+0:?     'samp1Ds' (uniform sampler1DShadow)\r
 0:?     'gl_VertexID' (gl_VertexId int VertexId)\r
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)\r
 \r
index 02cd512..5242983 100644 (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 \r
 ERROR: 0:170: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions \r
 ERROR: 0:171: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions \r
-ERROR: 59 compilation errors.  No code generated.\r
+ERROR: 0:221: 'textureQueryLevels' : no matching overloaded function found \r
+ERROR: 0:221: 'assign' :  cannot convert from 'const float' to 'temp int'\r
+ERROR: 0:222: 'textureQueryLevels' : no matching overloaded function found \r
+ERROR: 0:222: 'assign' :  cannot convert from 'const float' to 'temp int'\r
+ERROR: 63 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 430\r
@@ -139,6 +143,63 @@ ERROR: node is still EOpNull!
 0:181        's' (temp int)\r
 0:181        imageQuerySamples (global int)\r
 0:181          'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)\r
+0:202  Function Definition: qlod( (global void)\r
+0:202    Function Parameters: \r
+0:?     Sequence\r
+0:206      move second child to first child (temp int)\r
+0:206        'levels' (temp int)\r
+0:206        textureQueryLevels (global int)\r
+0:206          'samp1D' (uniform sampler1D)\r
+0:207      move second child to first child (temp int)\r
+0:207        'levels' (temp int)\r
+0:207        textureQueryLevels (global int)\r
+0:207          'usamp2D' (uniform usampler2D)\r
+0:208      move second child to first child (temp int)\r
+0:208        'levels' (temp int)\r
+0:208        textureQueryLevels (global int)\r
+0:208          'isamp3D' (uniform isampler3D)\r
+0:209      move second child to first child (temp int)\r
+0:209        'levels' (temp int)\r
+0:209        textureQueryLevels (global int)\r
+0:209          'isampCube' (uniform isamplerCube)\r
+0:210      move second child to first child (temp int)\r
+0:210        'levels' (temp int)\r
+0:210        textureQueryLevels (global int)\r
+0:210          'isamp1DA' (uniform isampler1DArray)\r
+0:211      move second child to first child (temp int)\r
+0:211        'levels' (temp int)\r
+0:211        textureQueryLevels (global int)\r
+0:211          'samp2DA' (uniform sampler2DArray)\r
+0:212      move second child to first child (temp int)\r
+0:212        'levels' (temp int)\r
+0:212        textureQueryLevels (global int)\r
+0:212          'usampCubeA' (uniform usamplerCubeArray)\r
+0:214      move second child to first child (temp int)\r
+0:214        'levels' (temp int)\r
+0:214        textureQueryLevels (global int)\r
+0:214          'samp1Ds' (uniform sampler1DShadow)\r
+0:215      move second child to first child (temp int)\r
+0:215        'levels' (temp int)\r
+0:215        textureQueryLevels (global int)\r
+0:215          'samp2Ds' (uniform sampler2DShadow)\r
+0:216      move second child to first child (temp int)\r
+0:216        'levels' (temp int)\r
+0:216        textureQueryLevels (global int)\r
+0:216          'sampCubes' (uniform samplerCubeShadow)\r
+0:217      move second child to first child (temp int)\r
+0:217        'levels' (temp int)\r
+0:217        textureQueryLevels (global int)\r
+0:217          'samp1DAs' (uniform sampler1DArrayShadow)\r
+0:218      move second child to first child (temp int)\r
+0:218        'levels' (temp int)\r
+0:218        textureQueryLevels (global int)\r
+0:218          'samp2DAs' (uniform sampler2DArrayShadow)\r
+0:219      move second child to first child (temp int)\r
+0:219        'levels' (temp int)\r
+0:219        textureQueryLevels (global int)\r
+0:219          'sampCubeAs' (uniform samplerCubeArrayShadow)\r
+0:221      'levels' (temp int)\r
+0:222      'levels' (temp int)\r
 0:?   Linker Objects\r
 0:?     'v4' (layout(location=3 ) temp 4-component vector of float)\r
 0:?     'uv4' (layout(location=4 ) uniform 4-component vector of float)\r
@@ -184,6 +245,21 @@ ERROR: node is still EOpNull!
 0:?     'us2dmsa' (uniform usampler2DMSArray)\r
 0:?     'ii2dms' (layout(rgba32i ) uniform iimage2DMS)\r
 0:?     'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)\r
+0:?     'samp1D' (uniform sampler1D)\r
+0:?     'usamp2D' (uniform usampler2D)\r
+0:?     'isamp3D' (uniform isampler3D)\r
+0:?     'isampCube' (uniform isamplerCube)\r
+0:?     'isamp1DA' (uniform isampler1DArray)\r
+0:?     'samp2DA' (uniform sampler2DArray)\r
+0:?     'usampCubeA' (uniform usamplerCubeArray)\r
+0:?     'samp1Ds' (uniform sampler1DShadow)\r
+0:?     'samp2Ds' (uniform sampler2DShadow)\r
+0:?     'sampCubes' (uniform samplerCubeShadow)\r
+0:?     'samp1DAs' (uniform sampler1DArrayShadow)\r
+0:?     'samp2DAs' (uniform sampler2DArrayShadow)\r
+0:?     'sampCubeAs' (uniform samplerCubeArrayShadow)\r
+0:?     'sampBuf' (uniform samplerBuffer)\r
+0:?     'sampRect' (uniform sampler2DRect)\r
 0:?     'gl_VertexID' (gl_VertexId int VertexId)\r
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)\r
 \r
@@ -271,6 +347,63 @@ ERROR: node is still EOpNull!
 0:181        's' (temp int)\r
 0:181        imageQuerySamples (global int)\r
 0:181          'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)\r
+0:202  Function Definition: qlod( (global void)\r
+0:202    Function Parameters: \r
+0:?     Sequence\r
+0:206      move second child to first child (temp int)\r
+0:206        'levels' (temp int)\r
+0:206        textureQueryLevels (global int)\r
+0:206          'samp1D' (uniform sampler1D)\r
+0:207      move second child to first child (temp int)\r
+0:207        'levels' (temp int)\r
+0:207        textureQueryLevels (global int)\r
+0:207          'usamp2D' (uniform usampler2D)\r
+0:208      move second child to first child (temp int)\r
+0:208        'levels' (temp int)\r
+0:208        textureQueryLevels (global int)\r
+0:208          'isamp3D' (uniform isampler3D)\r
+0:209      move second child to first child (temp int)\r
+0:209        'levels' (temp int)\r
+0:209        textureQueryLevels (global int)\r
+0:209          'isampCube' (uniform isamplerCube)\r
+0:210      move second child to first child (temp int)\r
+0:210        'levels' (temp int)\r
+0:210        textureQueryLevels (global int)\r
+0:210          'isamp1DA' (uniform isampler1DArray)\r
+0:211      move second child to first child (temp int)\r
+0:211        'levels' (temp int)\r
+0:211        textureQueryLevels (global int)\r
+0:211          'samp2DA' (uniform sampler2DArray)\r
+0:212      move second child to first child (temp int)\r
+0:212        'levels' (temp int)\r
+0:212        textureQueryLevels (global int)\r
+0:212          'usampCubeA' (uniform usamplerCubeArray)\r
+0:214      move second child to first child (temp int)\r
+0:214        'levels' (temp int)\r
+0:214        textureQueryLevels (global int)\r
+0:214          'samp1Ds' (uniform sampler1DShadow)\r
+0:215      move second child to first child (temp int)\r
+0:215        'levels' (temp int)\r
+0:215        textureQueryLevels (global int)\r
+0:215          'samp2Ds' (uniform sampler2DShadow)\r
+0:216      move second child to first child (temp int)\r
+0:216        'levels' (temp int)\r
+0:216        textureQueryLevels (global int)\r
+0:216          'sampCubes' (uniform samplerCubeShadow)\r
+0:217      move second child to first child (temp int)\r
+0:217        'levels' (temp int)\r
+0:217        textureQueryLevels (global int)\r
+0:217          'samp1DAs' (uniform sampler1DArrayShadow)\r
+0:218      move second child to first child (temp int)\r
+0:218        'levels' (temp int)\r
+0:218        textureQueryLevels (global int)\r
+0:218          'samp2DAs' (uniform sampler2DArrayShadow)\r
+0:219      move second child to first child (temp int)\r
+0:219        'levels' (temp int)\r
+0:219        textureQueryLevels (global int)\r
+0:219          'sampCubeAs' (uniform samplerCubeArrayShadow)\r
+0:221      'levels' (temp int)\r
+0:222      'levels' (temp int)\r
 0:?   Linker Objects\r
 0:?     'v4' (layout(location=3 ) temp 4-component vector of float)\r
 0:?     'uv4' (layout(location=4 ) uniform 4-component vector of float)\r
@@ -316,6 +449,21 @@ ERROR: node is still EOpNull!
 0:?     'us2dmsa' (uniform usampler2DMSArray)\r
 0:?     'ii2dms' (layout(rgba32i ) uniform iimage2DMS)\r
 0:?     'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)\r
+0:?     'samp1D' (uniform sampler1D)\r
+0:?     'usamp2D' (uniform usampler2D)\r
+0:?     'isamp3D' (uniform isampler3D)\r
+0:?     'isampCube' (uniform isamplerCube)\r
+0:?     'isamp1DA' (uniform isampler1DArray)\r
+0:?     'samp2DA' (uniform sampler2DArray)\r
+0:?     'usampCubeA' (uniform usamplerCubeArray)\r
+0:?     'samp1Ds' (uniform sampler1DShadow)\r
+0:?     'samp2Ds' (uniform sampler2DShadow)\r
+0:?     'sampCubes' (uniform samplerCubeShadow)\r
+0:?     'samp1DAs' (uniform sampler1DArrayShadow)\r
+0:?     'samp2DAs' (uniform sampler2DArrayShadow)\r
+0:?     'sampCubeAs' (uniform samplerCubeArrayShadow)\r
+0:?     'sampBuf' (uniform samplerBuffer)\r
+0:?     'sampRect' (uniform sampler2DRect)\r
 0:?     'gl_VertexID' (gl_VertexId int VertexId)\r
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)\r
 \r
diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
new file mode 100644 (file)
index 0000000..2b2b57f
--- /dev/null
@@ -0,0 +1,282 @@
+spv.queryL.frag\r
+Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.\r
+\r
+\r
+Linked fragment stage:\r
+\r
+\r
+// Module Version 99\r
+// Generated by (magic number): 51a00bb\r
+// Id's are bound by 211\r
+\r
+                              Source GLSL 430\r
+                              Capability Shader\r
+               1:             ExtInstImport  "GLSL.std.450"\r
+                              MemoryModel Logical GLSL450\r
+                              EntryPoint Fragment 4  "main"\r
+                              ExecutionMode 4 OriginLowerLeft\r
+                              Name 4  "main"\r
+                              Name 9  "lod"\r
+                              Name 13  "samp1D"\r
+                              Name 16  "pf"\r
+                              Name 23  "isamp2D"\r
+                              Name 25  "pf2"\r
+                              Name 34  "usamp3D"\r
+                              Name 38  "pf3"\r
+                              Name 46  "sampCube"\r
+                              Name 55  "isamp1DA"\r
+                              Name 64  "usamp2DA"\r
+                              Name 73  "isampCubeA"\r
+                              Name 82  "samp1Ds"\r
+                              Name 91  "samp2Ds"\r
+                              Name 100  "sampCubes"\r
+                              Name 109  "samp1DAs"\r
+                              Name 118  "samp2DAs"\r
+                              Name 127  "sampCubeAs"\r
+                              Name 134  "levels"\r
+                              Name 140  "usamp2D"\r
+                              Name 148  "isamp3D"\r
+                              Name 156  "isampCube"\r
+                              Name 168  "samp2DA"\r
+                              Name 176  "usampCubeA"\r
+                              Name 206  "sampBuf"\r
+                              Name 210  "sampRect"\r
+                              Decorate 206(sampBuf) NoStaticUse\r
+                              Decorate 210(sampRect) NoStaticUse\r
+               2:             TypeVoid\r
+               3:             TypeFunction 2\r
+               6:             TypeFloat 32\r
+               7:             TypeVector 6(float) 2\r
+               8:             TypePointer Function 7(fvec2)\r
+              10:             TypeImage 6(float) 1D sampled format:Unknown\r
+              11:             TypeSampledImage 10\r
+              12:             TypePointer UniformConstant 11\r
+      13(samp1D):     12(ptr) Variable UniformConstant\r
+              15:             TypePointer Function 6(float)\r
+              19:             TypeInt 32 1\r
+              20:             TypeImage 19(int) 2D sampled format:Unknown\r
+              21:             TypeSampledImage 20\r
+              22:             TypePointer UniformConstant 21\r
+     23(isamp2D):     22(ptr) Variable UniformConstant\r
+              30:             TypeInt 32 0\r
+              31:             TypeImage 30(int) 3D sampled format:Unknown\r
+              32:             TypeSampledImage 31\r
+              33:             TypePointer UniformConstant 32\r
+     34(usamp3D):     33(ptr) Variable UniformConstant\r
+              36:             TypeVector 6(float) 3\r
+              37:             TypePointer Function 36(fvec3)\r
+              43:             TypeImage 6(float) Cube sampled format:Unknown\r
+              44:             TypeSampledImage 43\r
+              45:             TypePointer UniformConstant 44\r
+    46(sampCube):     45(ptr) Variable UniformConstant\r
+              52:             TypeImage 19(int) 1D array sampled format:Unknown\r
+              53:             TypeSampledImage 52\r
+              54:             TypePointer UniformConstant 53\r
+    55(isamp1DA):     54(ptr) Variable UniformConstant\r
+              61:             TypeImage 30(int) 2D array sampled format:Unknown\r
+              62:             TypeSampledImage 61\r
+              63:             TypePointer UniformConstant 62\r
+    64(usamp2DA):     63(ptr) Variable UniformConstant\r
+              70:             TypeImage 19(int) Cube array sampled format:Unknown\r
+              71:             TypeSampledImage 70\r
+              72:             TypePointer UniformConstant 71\r
+  73(isampCubeA):     72(ptr) Variable UniformConstant\r
+              79:             TypeImage 6(float) 1D depth sampled format:Unknown\r
+              80:             TypeSampledImage 79\r
+              81:             TypePointer UniformConstant 80\r
+     82(samp1Ds):     81(ptr) Variable UniformConstant\r
+              88:             TypeImage 6(float) 2D depth sampled format:Unknown\r
+              89:             TypeSampledImage 88\r
+              90:             TypePointer UniformConstant 89\r
+     91(samp2Ds):     90(ptr) Variable UniformConstant\r
+              97:             TypeImage 6(float) Cube depth sampled format:Unknown\r
+              98:             TypeSampledImage 97\r
+              99:             TypePointer UniformConstant 98\r
+  100(sampCubes):     99(ptr) Variable UniformConstant\r
+             106:             TypeImage 6(float) 1D depth array sampled format:Unknown\r
+             107:             TypeSampledImage 106\r
+             108:             TypePointer UniformConstant 107\r
+   109(samp1DAs):    108(ptr) Variable UniformConstant\r
+             115:             TypeImage 6(float) 2D depth array sampled format:Unknown\r
+             116:             TypeSampledImage 115\r
+             117:             TypePointer UniformConstant 116\r
+   118(samp2DAs):    117(ptr) Variable UniformConstant\r
+             124:             TypeImage 6(float) Cube depth array sampled format:Unknown\r
+             125:             TypeSampledImage 124\r
+             126:             TypePointer UniformConstant 125\r
+ 127(sampCubeAs):    126(ptr) Variable UniformConstant\r
+             133:             TypePointer Function 19(int)\r
+             137:             TypeImage 30(int) 2D sampled format:Unknown\r
+             138:             TypeSampledImage 137\r
+             139:             TypePointer UniformConstant 138\r
+    140(usamp2D):    139(ptr) Variable UniformConstant\r
+             145:             TypeImage 19(int) 3D sampled format:Unknown\r
+             146:             TypeSampledImage 145\r
+             147:             TypePointer UniformConstant 146\r
+    148(isamp3D):    147(ptr) Variable UniformConstant\r
+             153:             TypeImage 19(int) Cube sampled format:Unknown\r
+             154:             TypeSampledImage 153\r
+             155:             TypePointer UniformConstant 154\r
+  156(isampCube):    155(ptr) Variable UniformConstant\r
+             165:             TypeImage 6(float) 2D array sampled format:Unknown\r
+             166:             TypeSampledImage 165\r
+             167:             TypePointer UniformConstant 166\r
+    168(samp2DA):    167(ptr) Variable UniformConstant\r
+             173:             TypeImage 30(int) Cube array sampled format:Unknown\r
+             174:             TypeSampledImage 173\r
+             175:             TypePointer UniformConstant 174\r
+ 176(usampCubeA):    175(ptr) Variable UniformConstant\r
+             203:             TypeImage 6(float) Buffer sampled format:Unknown\r
+             204:             TypeSampledImage 203\r
+             205:             TypePointer UniformConstant 204\r
+    206(sampBuf):    205(ptr) Variable UniformConstant\r
+             207:             TypeImage 6(float) Rect sampled format:Unknown\r
+             208:             TypeSampledImage 207\r
+             209:             TypePointer UniformConstant 208\r
+   210(sampRect):    209(ptr) Variable UniformConstant\r
+         4(main):           2 Function None 3\r
+               5:             Label\r
+          9(lod):      8(ptr) Variable Function\r
+          16(pf):     15(ptr) Variable Function\r
+         25(pf2):      8(ptr) Variable Function\r
+         38(pf3):     37(ptr) Variable Function\r
+     134(levels):    133(ptr) Variable Function\r
+              14:          11 Load 13(samp1D)\r
+              17:    6(float) Load 16(pf)\r
+              18:    7(fvec2) ImageQueryLod 14 17\r
+                              Store 9(lod) 18\r
+              24:          21 Load 23(isamp2D)\r
+              26:    7(fvec2) Load 25(pf2)\r
+              27:    7(fvec2) ImageQueryLod 24 26\r
+              28:    7(fvec2) Load 9(lod)\r
+              29:    7(fvec2) FAdd 28 27\r
+                              Store 9(lod) 29\r
+              35:          32 Load 34(usamp3D)\r
+              39:   36(fvec3) Load 38(pf3)\r
+              40:    7(fvec2) ImageQueryLod 35 39\r
+              41:    7(fvec2) Load 9(lod)\r
+              42:    7(fvec2) FAdd 41 40\r
+                              Store 9(lod) 42\r
+              47:          44 Load 46(sampCube)\r
+              48:   36(fvec3) Load 38(pf3)\r
+              49:    7(fvec2) ImageQueryLod 47 48\r
+              50:    7(fvec2) Load 9(lod)\r
+              51:    7(fvec2) FAdd 50 49\r
+                              Store 9(lod) 51\r
+              56:          53 Load 55(isamp1DA)\r
+              57:    6(float) Load 16(pf)\r
+              58:    7(fvec2) ImageQueryLod 56 57\r
+              59:    7(fvec2) Load 9(lod)\r
+              60:    7(fvec2) FAdd 59 58\r
+                              Store 9(lod) 60\r
+              65:          62 Load 64(usamp2DA)\r
+              66:    7(fvec2) Load 25(pf2)\r
+              67:    7(fvec2) ImageQueryLod 65 66\r
+              68:    7(fvec2) Load 9(lod)\r
+              69:    7(fvec2) FAdd 68 67\r
+                              Store 9(lod) 69\r
+              74:          71 Load 73(isampCubeA)\r
+              75:   36(fvec3) Load 38(pf3)\r
+              76:    7(fvec2) ImageQueryLod 74 75\r
+              77:    7(fvec2) Load 9(lod)\r
+              78:    7(fvec2) FAdd 77 76\r
+                              Store 9(lod) 78\r
+              83:          80 Load 82(samp1Ds)\r
+              84:    6(float) Load 16(pf)\r
+              85:    7(fvec2) ImageQueryLod 83 84\r
+              86:    7(fvec2) Load 9(lod)\r
+              87:    7(fvec2) FAdd 86 85\r
+                              Store 9(lod) 87\r
+              92:          89 Load 91(samp2Ds)\r
+              93:    7(fvec2) Load 25(pf2)\r
+              94:    7(fvec2) ImageQueryLod 92 93\r
+              95:    7(fvec2) Load 9(lod)\r
+              96:    7(fvec2) FAdd 95 94\r
+                              Store 9(lod) 96\r
+             101:          98 Load 100(sampCubes)\r
+             102:   36(fvec3) Load 38(pf3)\r
+             103:    7(fvec2) ImageQueryLod 101 102\r
+             104:    7(fvec2) Load 9(lod)\r
+             105:    7(fvec2) FAdd 104 103\r
+                              Store 9(lod) 105\r
+             110:         107 Load 109(samp1DAs)\r
+             111:    6(float) Load 16(pf)\r
+             112:    7(fvec2) ImageQueryLod 110 111\r
+             113:    7(fvec2) Load 9(lod)\r
+             114:    7(fvec2) FAdd 113 112\r
+                              Store 9(lod) 114\r
+             119:         116 Load 118(samp2DAs)\r
+             120:    7(fvec2) Load 25(pf2)\r
+             121:    7(fvec2) ImageQueryLod 119 120\r
+             122:    7(fvec2) Load 9(lod)\r
+             123:    7(fvec2) FAdd 122 121\r
+                              Store 9(lod) 123\r
+             128:         125 Load 127(sampCubeAs)\r
+             129:   36(fvec3) Load 38(pf3)\r
+             130:    7(fvec2) ImageQueryLod 128 129\r
+             131:    7(fvec2) Load 9(lod)\r
+             132:    7(fvec2) FAdd 131 130\r
+                              Store 9(lod) 132\r
+             135:          11 Load 13(samp1D)\r
+             136:     19(int) ImageQueryLevels 135\r
+                              Store 134(levels) 136\r
+             141:         138 Load 140(usamp2D)\r
+             142:     19(int) ImageQueryLevels 141\r
+             143:     19(int) Load 134(levels)\r
+             144:     19(int) IAdd 143 142\r
+                              Store 134(levels) 144\r
+             149:         146 Load 148(isamp3D)\r
+             150:     19(int) ImageQueryLevels 149\r
+             151:     19(int) Load 134(levels)\r
+             152:     19(int) IAdd 151 150\r
+                              Store 134(levels) 152\r
+             157:         154 Load 156(isampCube)\r
+             158:     19(int) ImageQueryLevels 157\r
+             159:     19(int) Load 134(levels)\r
+             160:     19(int) IAdd 159 158\r
+                              Store 134(levels) 160\r
+             161:          53 Load 55(isamp1DA)\r
+             162:     19(int) ImageQueryLevels 161\r
+             163:     19(int) Load 134(levels)\r
+             164:     19(int) IAdd 163 162\r
+                              Store 134(levels) 164\r
+             169:         166 Load 168(samp2DA)\r
+             170:     19(int) ImageQueryLevels 169\r
+             171:     19(int) Load 134(levels)\r
+             172:     19(int) IAdd 171 170\r
+                              Store 134(levels) 172\r
+             177:         174 Load 176(usampCubeA)\r
+             178:     19(int) ImageQueryLevels 177\r
+             179:     19(int) Load 134(levels)\r
+             180:     19(int) IAdd 179 178\r
+                              Store 134(levels) 180\r
+             181:          80 Load 82(samp1Ds)\r
+             182:     19(int) ImageQueryLevels 181\r
+                              Store 134(levels) 182\r
+             183:          89 Load 91(samp2Ds)\r
+             184:     19(int) ImageQueryLevels 183\r
+             185:     19(int) Load 134(levels)\r
+             186:     19(int) IAdd 185 184\r
+                              Store 134(levels) 186\r
+             187:          98 Load 100(sampCubes)\r
+             188:     19(int) ImageQueryLevels 187\r
+             189:     19(int) Load 134(levels)\r
+             190:     19(int) IAdd 189 188\r
+                              Store 134(levels) 190\r
+             191:         107 Load 109(samp1DAs)\r
+             192:     19(int) ImageQueryLevels 191\r
+             193:     19(int) Load 134(levels)\r
+             194:     19(int) IAdd 193 192\r
+                              Store 134(levels) 194\r
+             195:         116 Load 118(samp2DAs)\r
+             196:     19(int) ImageQueryLevels 195\r
+             197:     19(int) Load 134(levels)\r
+             198:     19(int) IAdd 197 196\r
+                              Store 134(levels) 198\r
+             199:         125 Load 127(sampCubeAs)\r
+             200:     19(int) ImageQueryLevels 199\r
+             201:     19(int) Load 134(levels)\r
+             202:     19(int) IAdd 201 200\r
+                              Store 134(levels) 202\r
+                              Return\r
+                              FunctionEnd\r
diff --git a/Test/spv.queryL.frag b/Test/spv.queryL.frag
new file mode 100644 (file)
index 0000000..6f4ad5c
--- /dev/null
@@ -0,0 +1,64 @@
+#version 430 core
+
+uniform sampler1D samp1D;\r
+uniform isampler2D isamp2D;\r
+uniform usampler2D usamp2D;\r
+uniform isampler3D isamp3D;\r
+uniform usampler3D usamp3D;\r
+uniform samplerCube sampCube; \r
+uniform isamplerCube isampCube; \r
+uniform isampler1DArray isamp1DA;\r
+uniform sampler2DArray samp2DA;\r
+uniform usampler2DArray usamp2DA;\r
+uniform isamplerCubeArray isampCubeA;\r
+uniform usamplerCubeArray usampCubeA;\r
+\r
+uniform sampler1DShadow samp1Ds;\r
+uniform sampler2DShadow samp2Ds;\r
+uniform samplerCubeShadow sampCubes;\r
+uniform sampler1DArrayShadow samp1DAs;\r
+uniform sampler2DArrayShadow samp2DAs;\r
+uniform samplerCubeArrayShadow sampCubeAs;\r
+\r
+uniform samplerBuffer sampBuf;\r
+uniform sampler2DRect sampRect;\r
+\r
+void main()\r
+{\r
+    vec2 lod;\r
+    float pf;\r
+    vec2 pf2;\r
+    vec3 pf3;\r
+\r
+    lod = textureQueryLod(samp1D, pf);\r
+    lod += textureQueryLod(isamp2D, pf2);\r
+    lod += textureQueryLod(usamp3D, pf3);\r
+    lod += textureQueryLod(sampCube, pf3);\r
+    lod += textureQueryLod(isamp1DA, pf);\r
+    lod += textureQueryLod(usamp2DA, pf2);\r
+    lod += textureQueryLod(isampCubeA, pf3);\r
+\r
+    lod += textureQueryLod(samp1Ds, pf);\r
+    lod += textureQueryLod(samp2Ds, pf2);\r
+    lod += textureQueryLod(sampCubes, pf3);\r
+    lod += textureQueryLod(samp1DAs, pf);\r
+    lod += textureQueryLod(samp2DAs, pf2);\r
+    lod += textureQueryLod(sampCubeAs, pf3);\r
+\r
+    int levels;\r
+\r
+    levels = textureQueryLevels(samp1D);\r
+    levels += textureQueryLevels(usamp2D);\r
+    levels += textureQueryLevels(isamp3D);\r
+    levels += textureQueryLevels(isampCube);\r
+    levels += textureQueryLevels(isamp1DA);\r
+    levels += textureQueryLevels(samp2DA);\r
+    levels += textureQueryLevels(usampCubeA);\r
+\r
+    levels = textureQueryLevels(samp1Ds);\r
+    levels += textureQueryLevels(samp2Ds);\r
+    levels += textureQueryLevels(sampCubes);\r
+    levels += textureQueryLevels(samp1DAs);\r
+    levels += textureQueryLevels(samp2DAs);\r
+    levels += textureQueryLevels(sampCubeAs);\r
+}\r
index a7d8c8d..bddd8aa 100644 (file)
@@ -80,3 +80,4 @@ spv.voidFunction.frag
 spv.whileLoop.frag
 spv.atomic.comp
 spv.AofA.frag
+spv.queryL.frag
index a6bdb45..aa5dcd9 100644 (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"
index 0411a46..df7ab84 100644 (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");
+    }
 }
 
 //