diff options
| author | Yong He <yonghe@outlook.com> | 2023-08-04 15:55:06 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-04 15:55:06 -0700 |
| commit | 856086cf2ac6fb1544b5b08ffa64b2f01931d35c (patch) | |
| tree | 67f521b4750c01263ce8038cfe6d771b7c3b9cfb /source/compiler-core/slang-glslang-compiler.cpp | |
| parent | a2d90fb275962da84611160f8ddd74d934a68dbd (diff) | |
Add option to use original entrypoint in spirv output. (#3047)
* Add option to use original entrypoint in spirv output.
* Fix.
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/compiler-core/slang-glslang-compiler.cpp')
| -rw-r--r-- | source/compiler-core/slang-glslang-compiler.cpp | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/source/compiler-core/slang-glslang-compiler.cpp b/source/compiler-core/slang-glslang-compiler.cpp index 3c5f7a2b8..4c0bc74d7 100644 --- a/source/compiler-core/slang-glslang-compiler.cpp +++ b/source/compiler-core/slang-glslang-compiler.cpp @@ -56,11 +56,12 @@ public: protected: - SlangResult _invoke(glslang_CompileRequest_1_1& request); + SlangResult _invoke(glslang_CompileRequest_1_2& request); glslang_CompileFunc_1_0 m_compile_1_0 = nullptr; glslang_CompileFunc_1_1 m_compile_1_1 = nullptr; - + glslang_CompileFunc_1_2 m_compile_1_2 = nullptr; + ComPtr<ISlangSharedLibrary> m_sharedLibrary; }; @@ -68,8 +69,10 @@ SlangResult GlslangDownstreamCompiler::init(ISlangSharedLibrary* library) { m_compile_1_0 = (glslang_CompileFunc_1_0)library->findFuncByName("glslang_compile"); m_compile_1_1 = (glslang_CompileFunc_1_1)library->findFuncByName("glslang_compile_1_1"); + m_compile_1_2 = (glslang_CompileFunc_1_2)library->findFuncByName("glslang_compile_1_2"); + - if (m_compile_1_0 == nullptr && m_compile_1_1 == nullptr) + if (m_compile_1_0 == nullptr && m_compile_1_1 == nullptr && m_compile_1_2 == nullptr) { return SLANG_FAIL; } @@ -80,7 +83,11 @@ SlangResult GlslangDownstreamCompiler::init(ISlangSharedLibrary* library) m_desc = Desc(SLANG_PASS_THROUGH_GLSLANG); Slang::String filename; - if (m_compile_1_1) + if (m_compile_1_2) + { + filename = Slang::SharedLibraryUtils::getSharedLibraryFileName((void*)m_compile_1_2); + } + else if (m_compile_1_1) { filename = Slang::SharedLibraryUtils::getSharedLibraryFileName((void*)m_compile_1_1); } @@ -96,17 +103,27 @@ SlangResult GlslangDownstreamCompiler::init(ISlangSharedLibrary* library) return SLANG_OK; } -SlangResult GlslangDownstreamCompiler::_invoke(glslang_CompileRequest_1_1& request) +SlangResult GlslangDownstreamCompiler::_invoke(glslang_CompileRequest_1_2& request) { int err = 1; - if (m_compile_1_1) + if (m_compile_1_2) { - err = m_compile_1_1(&request); + err = m_compile_1_2(&request); + } + else if (m_compile_1_1) + { + glslang_CompileRequest_1_1 request_1_1; + memcpy(&request_1_1, &request, sizeof(request_1_1)); + request_1_1.sizeInBytes = sizeof(request_1_1); + err = m_compile_1_1(&request_1_1); } else if (m_compile_1_0) { + glslang_CompileRequest_1_1 request_1_1; + memcpy(&request_1_1, &request, sizeof(request_1_1)); + request_1_1.sizeInBytes = sizeof(request_1_1); glslang_CompileRequest_1_0 request_1_0; - request_1_0.set(request); + request_1_0.set(request_1_1); err = m_compile_1_0(&request_1_0); } @@ -178,7 +195,7 @@ SlangResult GlslangDownstreamCompiler::compile(const CompileOptions& inOptions, String sourcePath = ArtifactUtil::findPath(sourceArtifact); - glslang_CompileRequest_1_1 request; + glslang_CompileRequest_1_2 request; memset(&request, 0, sizeof(request)); request.sizeInBytes = sizeof(request); @@ -217,6 +234,8 @@ SlangResult GlslangDownstreamCompiler::compile(const CompileOptions& inOptions, request.optimizationLevel = (unsigned)options.optimizationLevel; request.debugInfoType = (unsigned)options.debugInfoType; + request.entryPointName = options.entryPointName.begin(); + const SlangResult invokeResult = _invoke(request); auto artifact = ArtifactUtil::createArtifactForCompileTarget(options.targetType); @@ -271,7 +290,7 @@ SlangResult GlslangDownstreamCompiler::convert(IArtifact* from, const ArtifactDe (*(StringBuilder*)userData).append((char const*)data, (char const*)data + size); }; - glslang_CompileRequest_1_1 request; + glslang_CompileRequest_1_2 request; memset(&request, 0, sizeof(request)); request.sizeInBytes = sizeof(request); |
