summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-lower-generic-function.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2020-09-10 15:10:11 -0700
committerGitHub <noreply@github.com>2020-09-10 15:10:11 -0700
commite5b796db188416dfc414dab27b92c86b0b53de2b (patch)
treeeab72001c550d80927805bd5462fb529c20170ae /source/slang/slang-ir-lower-generic-function.cpp
parentd6a2d2905125715629fe8972a374136189d0c9ef (diff)
Allow existential types in `StructuredBuffer` element type. (#1536)
* Allow existential types in `StructuredBuffer` element type. * Handle StructuredBuffer.Load/.Consume methods * Clean up unnecessary changes * Code cleanup * Update test comment
Diffstat (limited to 'source/slang/slang-ir-lower-generic-function.cpp')
-rw-r--r--source/slang/slang-ir-lower-generic-function.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/source/slang/slang-ir-lower-generic-function.cpp b/source/slang/slang-ir-lower-generic-function.cpp
index c02e9e3d6..f5bd469ac 100644
--- a/source/slang/slang-ir-lower-generic-function.cpp
+++ b/source/slang/slang-ir-lower-generic-function.cpp
@@ -201,8 +201,15 @@ namespace Slang
void lowerWitnessTable(IRWitnessTable* witnessTable)
{
auto interfaceType = maybeLowerInterfaceType(cast<IRInterfaceType>(witnessTable->getConformanceType()));
+ IRBuilder builderStorage;
+ auto builder = &builderStorage;
+ builder->sharedBuilder = &sharedContext->sharedBuilderStorage;
+ builder->setInsertBefore(witnessTable);
if (interfaceType != witnessTable->getConformanceType())
- witnessTable->setConformanceType(interfaceType);
+ {
+ auto newWitnessTableType = builder->getWitnessTableType(interfaceType);
+ witnessTable->setFullType(newWitnessTableType);
+ }
if (isBuiltin(interfaceType))
return;
for (auto child : witnessTable->getChildren())
@@ -223,10 +230,6 @@ namespace Slang
{
// Translate a Type value to an RTTI object pointer.
auto rttiObject = sharedContext->maybeEmitRTTIObject(entry->getSatisfyingVal());
- IRBuilder builderStorage;
- auto builder = &builderStorage;
- builder->sharedBuilder = &sharedContext->sharedBuilderStorage;
- builder->setInsertBefore(witnessTable);
auto rttiObjectPtr = builder->emitGetAddress(
builder->getPtrType(builder->getRTTIType()),
rttiObject);