diff options
| author | Yong He <yonghe@outlook.com> | 2020-09-02 12:21:28 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-02 12:21:28 -0700 |
| commit | a2a7c4d988b2b7126130d9dcbe4ec94e1ce8424b (patch) | |
| tree | 5e9559abd79b9e2f7d4f22f65a77daaaae3eed16 /tools/render-test | |
| parent | 7f567df6937b33c653c424af3abb20d32eb80561 (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/render-test')
| -rw-r--r-- | tools/render-test/cpu-compute-util.cpp | 17 | ||||
| -rw-r--r-- | tools/render-test/shader-input-layout.cpp | 4 |
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; } |
