Commit 22b71f9a by Neil Roberts

Skip outermost array when assigning locations to auto-array interfaces

When assigning a location to an interface whose stage automatically converts the interfaces to an array, it now strips off the outermost array from the type before calculating how many locations it consumes.
parent fd9d9ef4
...@@ -478,7 +478,16 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver ...@@ -478,7 +478,16 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver
// Placeholder. This does not do proper cross-stage lining up, nor // Placeholder. This does not do proper cross-stage lining up, nor
// work with mixed location/no-location declarations. // work with mixed location/no-location declarations.
int location = nextLocation; int location = nextLocation;
nextLocation += TIntermediate::computeTypeLocationSize(type, stage); int typeLocationSize;
// Don’t take into account the outer-most array if the stage’s
// interface is automatically an array.
if (type.getQualifier().isArrayedIo(stage)) {
TType elementType(type, 0);
typeLocationSize = TIntermediate::computeTypeLocationSize(elementType, stage);
} else {
typeLocationSize = TIntermediate::computeTypeLocationSize(type, stage);
}
nextLocation += typeLocationSize;
return location; return location;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment