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 = 74) uniform sampler2D u_sampler0[6];

View 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)

View 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
}
}