summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-generics-lowering-context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir-generics-lowering-context.cpp')
-rw-r--r--source/slang/slang-ir-generics-lowering-context.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/source/slang/slang-ir-generics-lowering-context.cpp b/source/slang/slang-ir-generics-lowering-context.cpp
index 097fa58b8..199eae2fc 100644
--- a/source/slang/slang-ir-generics-lowering-context.cpp
+++ b/source/slang/slang-ir-generics-lowering-context.cpp
@@ -405,12 +405,23 @@ bool SharedGenericsLoweringContext::doesTypeFitInAnyValue(
IRType* concreteType,
IRInterfaceType* interfaceType,
IRIntegerValue* outTypeSize,
- IRIntegerValue* outLimit)
+ IRIntegerValue* outLimit,
+ bool* outIsTypeOpaque)
{
auto anyValueSize = getInterfaceAnyValueSize(interfaceType, interfaceType->sourceLoc);
if (outLimit)
*outLimit = anyValueSize;
+ if (!areResourceTypesBindlessOnTarget(targetProgram->getTargetReq()))
+ {
+ IRType* opaqueType = nullptr;
+ if (isOpaqueType(concreteType, &opaqueType))
+ {
+ if (outIsTypeOpaque)
+ *outIsTypeOpaque = true;
+ return false;
+ }
+ }
IRSizeAndAlignment sizeAndAlignment;
Result result =
getNaturalSizeAndAlignment(targetProgram->getOptionSet(), concreteType, &sizeAndAlignment);