@@ -344,7 +344,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
344
344
}
345
345
if (primitives == TQualifier::layoutNotSet)
346
346
primitives = unit.primitives ;
347
- else if (primitives != unit.primitives ) {
347
+ else if (unit. primitives != TQualifier::layoutNotSet && primitives != unit.primitives ) {
348
348
if (language == EShLangMesh)
349
349
error (infoSink, " Contradictory layout max_primitives values" );
350
350
else
@@ -366,12 +366,12 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
366
366
367
367
if (vertexSpacing == EvsNone)
368
368
vertexSpacing = unit.vertexSpacing ;
369
- else if (vertexSpacing != unit.vertexSpacing )
369
+ else if (unit. vertexSpacing != EvsNone && vertexSpacing != unit.vertexSpacing )
370
370
error (infoSink, " Contradictory input vertex spacing" );
371
371
372
372
if (vertexOrder == EvoNone)
373
373
vertexOrder = unit.vertexOrder ;
374
- else if (vertexOrder != unit.vertexOrder )
374
+ else if (unit. vertexOrder != EvoNone && vertexOrder != unit.vertexOrder )
375
375
error (infoSink, " Contradictory triangle ordering" );
376
376
377
377
MERGE_TRUE (pointMode);
@@ -388,7 +388,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
388
388
389
389
if (localSizeSpecId[i] == TQualifier::layoutNotSet)
390
390
localSizeSpecId[i] = unit.localSizeSpecId [i];
391
- else if (localSizeSpecId[i] != unit.localSizeSpecId [i])
391
+ else if (unit. localSizeSpecId [i] != TQualifier::layoutNotSet && localSizeSpecId[i] != unit.localSizeSpecId [i])
392
392
error (infoSink, " Contradictory local size specialization ids" );
393
393
}
394
394
@@ -400,7 +400,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
400
400
401
401
if (depthLayout == EldNone)
402
402
depthLayout = unit.depthLayout ;
403
- else if (depthLayout != unit.depthLayout )
403
+ else if (unit. depthLayout != EldNone && depthLayout != unit.depthLayout )
404
404
error (infoSink, " Contradictory depth layouts" );
405
405
406
406
MERGE_TRUE (depthReplacing);
@@ -413,7 +413,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
413
413
for (size_t b = 0 ; b < xfbBuffers.size (); ++b) {
414
414
if (xfbBuffers[b].stride == TQualifier::layoutXfbStrideEnd)
415
415
xfbBuffers[b].stride = unit.xfbBuffers [b].stride ;
416
- else if (xfbBuffers[b].stride != unit.xfbBuffers [b].stride )
416
+ else if (unit. xfbBuffers [b]. stride != TQualifier::layoutXfbStrideEnd && xfbBuffers[b].stride != unit.xfbBuffers [b].stride )
417
417
error (infoSink, " Contradictory xfb_stride" );
418
418
xfbBuffers[b].implicitStride = std::max (xfbBuffers[b].implicitStride , unit.xfbBuffers [b].implicitStride );
419
419
if (unit.xfbBuffers [b].contains64BitType )
0 commit comments