diff options
Diffstat (limited to 'tools/gfx/renderer-shared.cpp')
| -rw-r--r-- | tools/gfx/renderer-shared.cpp | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/tools/gfx/renderer-shared.cpp b/tools/gfx/renderer-shared.cpp index 2e5454851..69046d216 100644 --- a/tools/gfx/renderer-shared.cpp +++ b/tools/gfx/renderer-shared.cpp @@ -472,14 +472,31 @@ Result RendererBase::createProgram2( ISlangBlob** outDiagnostic) { auto slangSession = slangContext.session.get(); - - SLANG_RELEASE_ASSERT(desc.sourceType == ShaderModuleSourceType::SlangSourceFile); - - auto fileName = (char*)desc.sourceData; + slang::IModule* module = nullptr; ComPtr<slang::IBlob> diagnosticsBlob; - slang::IModule* module = slangSession->loadModule(fileName, diagnosticsBlob.writeRef()); - if (!module) - return SLANG_FAIL; + switch (desc.sourceType) + { + case ShaderModuleSourceType::SlangSourceFile: + { + auto fileName = (char*)desc.sourceData; + module = slangSession->loadModule(fileName, diagnosticsBlob.writeRef()); + if (!module) + return SLANG_FAIL; + break; + } + case ShaderModuleSourceType::SlangSource: + { + auto hash = getStableHashCode32((char*)desc.sourceData, desc.sourceDataSize); + auto hashStr = String(hash); + auto srcBlob = UnownedRawBlob::create(desc.sourceData, desc.sourceDataSize); + module = slangSession->loadModuleFromSource(hashStr.getBuffer(), hashStr.getBuffer(), srcBlob, diagnosticsBlob.writeRef()); + if (!module) + return SLANG_FAIL; + break; + } + default: + SLANG_RELEASE_ASSERT(false); + } Slang::List<ComPtr<slang::IComponentType>> componentTypes; componentTypes.add(ComPtr<slang::IComponentType>(module)); |
