summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2020-09-02 12:21:28 -0700
committerGitHub <noreply@github.com>2020-09-02 12:21:28 -0700
commita2a7c4d988b2b7126130d9dcbe4ec94e1ce8424b (patch)
tree5e9559abd79b9e2f7d4f22f65a77daaaae3eed16 /tools
parent7f567df6937b33c653c424af3abb20d32eb80561 (diff)
Allow unspecialized existential shader parameters (dynamic dispatch). (#1529)
* Allow unspecialized existential shader parameters (dynamic dispatch). * Fixes. * Fixes * disable cuda test
Diffstat (limited to 'tools')
-rw-r--r--tools/render-test/cpu-compute-util.cpp17
-rw-r--r--tools/render-test/shader-input-layout.cpp4
2 files changed, 18 insertions, 3 deletions
diff --git a/tools/render-test/cpu-compute-util.cpp b/tools/render-test/cpu-compute-util.cpp
index 6e1fc12cf..2c9a9dc82 100644
--- a/tools/render-test/cpu-compute-util.cpp
+++ b/tools/render-test/cpu-compute-util.cpp
@@ -374,7 +374,16 @@ SlangResult CPUComputeUtil::populateRTTIEntries(
switch (rtti.type)
{
case RTTIDataEntryType::RTTIObject:
- ptrValue = sharedLib->findSymbolAddressByName(rtti.typeName.getBuffer());
+ {
+ auto reflection =
+ slang::ShaderReflection::get(compilationAndLayout.output.request);
+ auto concreteType = reflection->findTypeByName(rtti.typeName.getBuffer());
+ ComPtr<ISlangBlob> outName;
+ linkage->getTypeRTTIMangledName(concreteType, outName.writeRef());
+ if (!outName)
+ return SLANG_FAIL;
+ ptrValue = sharedLib->findSymbolAddressByName((char*)outName->getBufferPointer());
+ }
break;
case RTTIDataEntryType::WitnessTable:
{
@@ -385,8 +394,8 @@ SlangResult CPUComputeUtil::populateRTTIEntries(
auto interfaceType = reflection->findTypeByName(rtti.interfaceName.getBuffer());
if (!interfaceType)
return SLANG_FAIL;
- ISlangBlob* outName = nullptr;
- linkage->getTypeConformanceWitnessMangledName(concreteType, interfaceType, &outName);
+ ComPtr<ISlangBlob> outName;
+ linkage->getTypeConformanceWitnessMangledName(concreteType, interfaceType, outName.writeRef());
if (!outName)
return SLANG_FAIL;
ptrValue = sharedLib->findSymbolAddressByName((char*)outName->getBufferPointer());
@@ -395,6 +404,8 @@ SlangResult CPUComputeUtil::populateRTTIEntries(
default:
break;
}
+ if (!ptrValue)
+ return SLANG_FAIL;
if (rtti.offset >= 0 && rtti.offset + sizeof(ptrValue) <= entry.bufferData.getCount() * sizeof(decltype(entry.bufferData[0])))
{
memcpy(
diff --git a/tools/render-test/shader-input-layout.cpp b/tools/render-test/shader-input-layout.cpp
index edf617f76..40beffc05 100644
--- a/tools/render-test/shader-input-layout.cpp
+++ b/tools/render-test/shader-input-layout.cpp
@@ -412,6 +412,8 @@ namespace renderer_test
parser.Read(")");
offset += 8;
entry.rttiEntries.add(rttiEntry);
+ entry.bufferData.add(0);
+ entry.bufferData.add(0);
continue;
}
else if (parser.LookAhead("witness"))
@@ -426,6 +428,8 @@ namespace renderer_test
parser.Read(")");
offset += 8;
entry.rttiEntries.add(rttiEntry);
+ entry.bufferData.add(0);
+ entry.bufferData.add(0);
continue;
}