summaryrefslogtreecommitdiffstats
path: root/tools/gfx-unit-test/gfx-test-util.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-02-15 00:05:51 -0800
committerGitHub <noreply@github.com>2024-02-15 00:05:51 -0800
commit5a623ec227726ad1d988a5d91f55f19b62a98e03 (patch)
tree94a3fd2f00ce1a95035f39cd3571c9e97a70d24e /tools/gfx-unit-test/gfx-test-util.cpp
parent2ced683f10fb82f63a2e2c3d7b5f099c53bb57b0 (diff)
Support loading serialized modules. (#3588)
* Support loading serialized modules. * Fix. * Fix vs solution files * Fix glsl module loading. * C++ fix. * Fix. * Try fix c++ error. * Try fix. * Fix. * Fix.
Diffstat (limited to 'tools/gfx-unit-test/gfx-test-util.cpp')
-rw-r--r--tools/gfx-unit-test/gfx-test-util.cpp62
1 files changed, 58 insertions, 4 deletions
diff --git a/tools/gfx-unit-test/gfx-test-util.cpp b/tools/gfx-unit-test/gfx-test-util.cpp
index 298283a4a..748ced5eb 100644
--- a/tools/gfx-unit-test/gfx-test-util.cpp
+++ b/tools/gfx-unit-test/gfx-test-util.cpp
@@ -71,6 +71,54 @@ namespace gfx_test
return SLANG_OK;
}
+ Slang::Result loadComputeProgram(
+ gfx::IDevice* device,
+ slang::ISession* slangSession,
+ Slang::ComPtr<gfx::IShaderProgram>& outShaderProgram,
+ const char* shaderModuleName,
+ const char* entryPointName,
+ slang::ProgramLayout*& slangReflection)
+ {
+ Slang::ComPtr<slang::IBlob> diagnosticsBlob;
+ slang::IModule* module = slangSession->loadModule(shaderModuleName, diagnosticsBlob.writeRef());
+ diagnoseIfNeeded(diagnosticsBlob);
+ if (!module)
+ return SLANG_FAIL;
+
+ ComPtr<slang::IEntryPoint> computeEntryPoint;
+ SLANG_RETURN_ON_FAIL(
+ module->findEntryPointByName(entryPointName, computeEntryPoint.writeRef()));
+
+ Slang::List<slang::IComponentType*> componentTypes;
+ componentTypes.add(module);
+ componentTypes.add(computeEntryPoint);
+
+ Slang::ComPtr<slang::IComponentType> composedProgram;
+ SlangResult result = slangSession->createCompositeComponentType(
+ componentTypes.getBuffer(),
+ componentTypes.getCount(),
+ composedProgram.writeRef(),
+ diagnosticsBlob.writeRef());
+ diagnoseIfNeeded(diagnosticsBlob);
+ SLANG_RETURN_ON_FAIL(result);
+
+ ComPtr<slang::IComponentType> linkedProgram;
+ result = composedProgram->link(linkedProgram.writeRef(), diagnosticsBlob.writeRef());
+ diagnoseIfNeeded(diagnosticsBlob);
+ SLANG_RETURN_ON_FAIL(result);
+
+ composedProgram = linkedProgram;
+ slangReflection = composedProgram->getLayout();
+
+ gfx::IShaderProgram::Desc programDesc = {};
+ programDesc.slangGlobalScope = composedProgram.get();
+
+ auto shaderProgram = device->createProgram(programDesc);
+
+ outShaderProgram = shaderProgram;
+ return SLANG_OK;
+ }
+
Slang::Result loadComputeProgramFromSource(
gfx::IDevice* device,
Slang::ComPtr<gfx::IShaderProgram>& outShaderProgram,
@@ -222,10 +270,7 @@ namespace gfx_test
SLANG_IGNORE_TEST
}
deviceDesc.slang.slangGlobalSession = context->slangGlobalSession;
- Slang::List<const char*> searchPaths;
- searchPaths.add("");
- searchPaths.add("../../tools/gfx-unit-test");
- searchPaths.add("tools/gfx-unit-test");
+ Slang::List<const char*> searchPaths = getSlangSearchPaths();
searchPaths.addRange(additionalSearchPaths);
deviceDesc.slang.searchPaths = searchPaths.getBuffer();
deviceDesc.slang.searchPathCount = (gfx::GfxCount)searchPaths.getCount();
@@ -253,6 +298,15 @@ namespace gfx_test
return device;
}
+ Slang::List<const char*> getSlangSearchPaths()
+ {
+ Slang::List<const char*> searchPaths;
+ searchPaths.add("");
+ searchPaths.add("../../tools/gfx-unit-test");
+ searchPaths.add("tools/gfx-unit-test");
+ return searchPaths;
+ }
+
#if GFX_ENABLE_RENDERDOC_INTEGRATION
RENDERDOC_API_1_1_2* rdoc_api = NULL;
void initializeRenderDoc()