Fix maybe-uninitialized warning
The 'set' and 'setRT' variables were warning as maybe-uninitialized even though in practice that case would never trigger (due to how the function flow-controls). The code blocks where these variables are actually read do not overlap, so merge them into the same 'set' variable. Simplify the control flow of the function with early-returns, which drops indentation and simplifies the function.
This commit is contained in:
parent
d5f3ad6c9a
commit
9afd346127
@ -1633,7 +1633,6 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ
|
|||||||
typeCollision = false;
|
typeCollision = false;
|
||||||
|
|
||||||
int set;
|
int set;
|
||||||
int setRT;
|
|
||||||
if (qualifier.isPipeInput())
|
if (qualifier.isPipeInput())
|
||||||
set = 0;
|
set = 0;
|
||||||
else if (qualifier.isPipeOutput())
|
else if (qualifier.isPipeOutput())
|
||||||
@ -1645,11 +1644,11 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ
|
|||||||
else if (qualifier.storage == EvqTileImageEXT)
|
else if (qualifier.storage == EvqTileImageEXT)
|
||||||
set = 4;
|
set = 4;
|
||||||
else if (qualifier.isAnyPayload())
|
else if (qualifier.isAnyPayload())
|
||||||
setRT = 0;
|
set = 0;
|
||||||
else if (qualifier.isAnyCallable())
|
else if (qualifier.isAnyCallable())
|
||||||
setRT = 1;
|
set = 1;
|
||||||
else if (qualifier.isHitObjectAttrNV())
|
else if (qualifier.isHitObjectAttrNV())
|
||||||
setRT = 2;
|
set = 2;
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -1691,10 +1690,12 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ
|
|||||||
#ifndef GLSLANG_WEB
|
#ifndef GLSLANG_WEB
|
||||||
if (qualifier.isAnyPayload() || qualifier.isAnyCallable() || qualifier.isHitObjectAttrNV()) {
|
if (qualifier.isAnyPayload() || qualifier.isAnyCallable() || qualifier.isHitObjectAttrNV()) {
|
||||||
TRange range(qualifier.layoutLocation, qualifier.layoutLocation);
|
TRange range(qualifier.layoutLocation, qualifier.layoutLocation);
|
||||||
collision = checkLocationRT(setRT, qualifier.layoutLocation);
|
collision = checkLocationRT(set, qualifier.layoutLocation);
|
||||||
if (collision < 0)
|
if (collision < 0)
|
||||||
usedIoRT[setRT].push_back(range);
|
usedIoRT[set].push_back(range);
|
||||||
} else if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 &&
|
return collision;
|
||||||
|
}
|
||||||
|
if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 &&
|
||||||
(qualifier.isPipeInput() || qualifier.isPipeOutput())) {
|
(qualifier.isPipeInput() || qualifier.isPipeOutput())) {
|
||||||
// Dealing with dvec3 in/out split across two locations.
|
// Dealing with dvec3 in/out split across two locations.
|
||||||
// Need two io-ranges.
|
// Need two io-ranges.
|
||||||
@ -1720,34 +1721,33 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ
|
|||||||
if (collision < 0)
|
if (collision < 0)
|
||||||
usedIo[set].push_back(range2);
|
usedIo[set].push_back(range2);
|
||||||
}
|
}
|
||||||
} else
|
return collision;
|
||||||
#endif
|
|
||||||
{
|
|
||||||
// Not a dvec3 in/out split across two locations, generic path.
|
|
||||||
// Need a single IO-range block.
|
|
||||||
|
|
||||||
TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation + size - 1);
|
|
||||||
TRange componentRange(0, 3);
|
|
||||||
if (qualifier.hasComponent() || type.getVectorSize() > 0) {
|
|
||||||
int consumedComponents = type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1);
|
|
||||||
if (qualifier.hasComponent())
|
|
||||||
componentRange.start = qualifier.layoutComponent;
|
|
||||||
componentRange.last = componentRange.start + consumedComponents - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// combine location and component ranges
|
|
||||||
TBasicType basicTy = type.getBasicType();
|
|
||||||
if (basicTy == EbtSampler && type.getSampler().isAttachmentEXT())
|
|
||||||
basicTy = type.getSampler().type;
|
|
||||||
TIoRange range(locationRange, componentRange, basicTy, qualifier.hasIndex() ? qualifier.getIndex() : 0);
|
|
||||||
|
|
||||||
// check for collisions, except for vertex inputs on desktop targeting OpenGL
|
|
||||||
if (! (!isEsProfile() && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0)
|
|
||||||
collision = checkLocationRange(set, range, type, typeCollision);
|
|
||||||
|
|
||||||
if (collision < 0)
|
|
||||||
usedIo[set].push_back(range);
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
// Not a dvec3 in/out split across two locations, generic path.
|
||||||
|
// Need a single IO-range block.
|
||||||
|
|
||||||
|
TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation + size - 1);
|
||||||
|
TRange componentRange(0, 3);
|
||||||
|
if (qualifier.hasComponent() || type.getVectorSize() > 0) {
|
||||||
|
int consumedComponents = type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1);
|
||||||
|
if (qualifier.hasComponent())
|
||||||
|
componentRange.start = qualifier.layoutComponent;
|
||||||
|
componentRange.last = componentRange.start + consumedComponents - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// combine location and component ranges
|
||||||
|
TBasicType basicTy = type.getBasicType();
|
||||||
|
if (basicTy == EbtSampler && type.getSampler().isAttachmentEXT())
|
||||||
|
basicTy = type.getSampler().type;
|
||||||
|
TIoRange range(locationRange, componentRange, basicTy, qualifier.hasIndex() ? qualifier.getIndex() : 0);
|
||||||
|
|
||||||
|
// check for collisions, except for vertex inputs on desktop targeting OpenGL
|
||||||
|
if (! (!isEsProfile() && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0)
|
||||||
|
collision = checkLocationRange(set, range, type, typeCollision);
|
||||||
|
|
||||||
|
if (collision < 0)
|
||||||
|
usedIo[set].push_back(range);
|
||||||
|
|
||||||
return collision;
|
return collision;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user