Fix off-by-1 bug in gl_MaxCombinedTextureImageUnits check

The problem was only with arrays of samplers.

Fixed #2552
This commit is contained in:
Greg Fischer 2021-02-26 16:59:51 -07:00
parent 3839066ee4
commit 051fbbb69c
3 changed files with 6 additions and 7 deletions

View File

@ -159,3 +159,4 @@ void qlod()
} }
layout(binding=0) writeonly uniform image1D badArray[]; layout(binding=0) writeonly uniform image1D badArray[];
layout(binding = 74) uniform sampler2D u_sampler0[6];

View File

@ -306,6 +306,7 @@ ERROR: node is still EOpNull!
0:? 'samp1D' ( uniform sampler1D) 0:? 'samp1D' ( uniform sampler1D)
0:? 'samp1Ds' ( uniform sampler1DShadow) 0:? 'samp1Ds' ( uniform sampler1DShadow)
0:? 'badArray' (layout( binding=0) writeonly uniform unsized 1-element array of image1D) 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_VertexID' ( gl_VertexId int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
@ -388,6 +389,7 @@ ERROR: node is still EOpNull!
0:? 'samp1D' ( uniform sampler1D) 0:? 'samp1D' ( uniform sampler1D)
0:? 'samp1Ds' ( uniform sampler1DShadow) 0:? 'samp1Ds' ( uniform sampler1DShadow)
0:? 'badArray' (layout( binding=0) writeonly uniform 1-element array of image1D) 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_VertexID' ( gl_VertexId int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)

View File

@ -5913,15 +5913,11 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
if (type.getBasicType() == EbtSampler) { if (type.getBasicType() == EbtSampler) {
int lastBinding = qualifier.layoutBinding; int lastBinding = qualifier.layoutBinding;
if (type.isArray()) { if (type.isArray()) {
if (spvVersion.vulkan > 0) if (spvVersion.vulkan == 0) {
lastBinding += 1;
else {
if (type.isSizedArray()) if (type.isSizedArray())
lastBinding += type.getCumulativeArraySize(); lastBinding += (type.getCumulativeArraySize() - 1);
else { else {
lastBinding += 1;
#ifndef GLSLANG_WEB #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 #endif
} }