Fix off-by-1 bug in gl_MaxCombinedTextureImageUnits check
authorGreg Fischer <greg@lunarg.com>
Fri, 26 Feb 2021 23:59:51 +0000 (16:59 -0700)
committerGreg Fischer <greg@lunarg.com>
Sat, 27 Feb 2021 00:07:52 +0000 (17:07 -0700)
The problem was only with arrays of samplers.

Fixed #2552

Test/420.vert
Test/baseResults/420.vert.out
glslang/MachineIndependent/ParseHelper.cpp

index c7ffa90..cfae71f 100644 (file)
@@ -159,3 +159,4 @@ void qlod()
 }\r
 \r
 layout(binding=0) writeonly uniform image1D badArray[];\r
+layout(binding = 74) uniform sampler2D u_sampler0[6];
index 1a57b34..b3d9e70 100644 (file)
@@ -306,6 +306,7 @@ ERROR: node is still EOpNull!
 0:?     'samp1D' ( uniform sampler1D)
 0:?     'samp1Ds' ( uniform sampler1DShadow)
 0:?     'badArray' (layout( binding=0) writeonly uniform unsized 1-element array of image1D)
+0:?     'u_sampler0' (layout( binding=74) uniform 6-element array of sampler2D)
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
@@ -388,6 +389,7 @@ ERROR: node is still EOpNull!
 0:?     'samp1D' ( uniform sampler1D)
 0:?     'samp1Ds' ( uniform sampler1DShadow)
 0:?     'badArray' (layout( binding=0) writeonly uniform 1-element array of image1D)
+0:?     'u_sampler0' (layout( binding=74) uniform 6-element array of sampler2D)
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
index ea530ce..12d68a3 100644 (file)
@@ -5913,16 +5913,12 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
         if (type.getBasicType() == EbtSampler) {
             int lastBinding = qualifier.layoutBinding;
             if (type.isArray()) {
-                if (spvVersion.vulkan > 0)
-                    lastBinding += 1;
-                else {
+                if (spvVersion.vulkan == 0) {
                     if (type.isSizedArray())
-                        lastBinding += type.getCumulativeArraySize();
+                        lastBinding += (type.getCumulativeArraySize() - 1);
                     else {
-                        lastBinding += 1;
 #ifndef GLSLANG_WEB
-                        if (spvVersion.vulkan == 0)
-                            warn(loc, "assuming binding count of one for compile-time checking of binding numbers for unsized array", "[]", "");
+                        warn(loc, "assuming binding count of one for compile-time checking of binding numbers for unsized array", "[]", "");
 #endif
                     }
                 }