SPV: Don't do stride decorations for arrays of arrays of blocks.
This commit is contained in:
parent
c9e0a42b92
commit
f8842e55c0
@ -1655,7 +1655,8 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
|
|||||||
|
|
||||||
// Do all but the outer dimension
|
// Do all but the outer dimension
|
||||||
if (type.getArraySizes()->getNumDims() > 1) {
|
if (type.getArraySizes()->getNumDims() > 1) {
|
||||||
if (explicitLayout != glslang::ElpNone) {
|
// We need to decorate array strides for types needing explicit layout, except blocks.
|
||||||
|
if (explicitLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock) {
|
||||||
// Use a dummy glslang type for querying internal strides of
|
// Use a dummy glslang type for querying internal strides of
|
||||||
// arrays of arrays, but using just a one-dimensional array.
|
// arrays of arrays, but using just a one-dimensional array.
|
||||||
glslang::TType simpleArrayType(type, 0); // deference type of the array
|
glslang::TType simpleArrayType(type, 0); // deference type of the array
|
||||||
@ -1666,6 +1667,8 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
|
|||||||
// pile of types and doing repetitive recursion on their contents.
|
// pile of types and doing repetitive recursion on their contents.
|
||||||
stride = getArrayStride(simpleArrayType, explicitLayout, qualifier.layoutMatrix);
|
stride = getArrayStride(simpleArrayType, explicitLayout, qualifier.layoutMatrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make the arrays
|
||||||
for (int dim = type.getArraySizes()->getNumDims() - 1; dim > 0; --dim) {
|
for (int dim = type.getArraySizes()->getNumDims() - 1; dim > 0; --dim) {
|
||||||
int size = type.getArraySizes()->getDimSize(dim);
|
int size = type.getArraySizes()->getDimSize(dim);
|
||||||
assert(size > 0);
|
assert(size > 0);
|
||||||
@ -1677,9 +1680,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
|
|||||||
} else {
|
} else {
|
||||||
// single-dimensional array, and don't yet have stride
|
// single-dimensional array, and don't yet have stride
|
||||||
|
|
||||||
// We need to decorate array strides for types needing explicit layout,
|
// We need to decorate array strides for types needing explicit layout, except blocks.
|
||||||
// except for the very top if it is an array of blocks; that array is
|
|
||||||
// not laid out in memory in a way needing a stride.
|
|
||||||
if (explicitLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock)
|
if (explicitLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock)
|
||||||
stride = getArrayStride(type, explicitLayout, qualifier.layoutMatrix);
|
stride = getArrayStride(type, explicitLayout, qualifier.layoutMatrix);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user