diff options
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-emit-spirv.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp index 7c2e80846..24d8cc0c6 100644 --- a/source/slang/slang-emit-spirv.cpp +++ b/source/slang/slang-emit-spirv.cpp @@ -1669,11 +1669,19 @@ struct SPIRVEmitContext : public SourceEmitterBase, public SPIRVEmitSharedContex &sizeAndAlignment); stride = (int)sizeAndAlignment.getStride(); } - emitOpDecorateArrayStride( - getSection(SpvLogicalSectionID::Annotations), - nullptr, - arrayType, - SpvLiteralInteger::from32(stride)); + + // Avoid validation error: Array containing a Block or BufferBlock must not be + // decorated with ArrayStride + if (!elementType->findDecorationImpl(kIROp_SPIRVBufferBlockDecoration) && + !elementType->findDecorationImpl(kIROp_SPIRVBlockDecoration)) + { + emitOpDecorateArrayStride( + getSection(SpvLogicalSectionID::Annotations), + nullptr, + arrayType, + SpvLiteralInteger::from32(stride)); + } + return arrayType; } case kIROp_AtomicType: |
