diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/gfx/render.h | 1 | ||||
| -rw-r--r-- | tools/render-test/render-test-main.cpp | 3 | ||||
| -rw-r--r-- | tools/render-test/shader-input-layout.cpp | 9 | ||||
| -rw-r--r-- | tools/render-test/shader-input-layout.h | 1 | ||||
| -rw-r--r-- | tools/render-test/slang-support.cpp | 21 |
5 files changed, 28 insertions, 7 deletions
diff --git a/tools/gfx/render.h b/tools/gfx/render.h index bfbe0f82a..bc880d0be 100644 --- a/tools/gfx/render.h +++ b/tools/gfx/render.h @@ -141,6 +141,7 @@ struct ShaderCompileRequest EntryPoint vertexShader; EntryPoint fragmentShader; EntryPoint computeShader; + Slang::List<Slang::String> globalTypeArguments; Slang::List<Slang::String> entryPointTypeArguments; }; diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp index d3a7acf37..4d2791563 100644 --- a/tools/render-test/render-test-main.cpp +++ b/tools/render-test/render-test-main.cpp @@ -387,7 +387,8 @@ Result RenderTestApp::initializeShaders(ShaderCompiler* shaderCompiler) compileRequest.computeShader.source = sourceInfo; compileRequest.computeShader.name = computeEntryPointName; } - compileRequest.entryPointTypeArguments = m_shaderInputLayout.globalTypeArguments; + compileRequest.globalTypeArguments = m_shaderInputLayout.globalTypeArguments; + compileRequest.entryPointTypeArguments = m_shaderInputLayout.entryPointTypeArguments; m_shaderProgram = shaderCompiler->compileProgram(compileRequest); return m_shaderProgram ? SLANG_OK : SLANG_FAIL; diff --git a/tools/render-test/shader-input-layout.cpp b/tools/render-test/shader-input-layout.cpp index 0257c9b53..8ab14bf76 100644 --- a/tools/render-test/shader-input-layout.cpp +++ b/tools/render-test/shader-input-layout.cpp @@ -10,6 +10,7 @@ namespace renderer_test { entries.Clear(); globalTypeArguments.Clear(); + entryPointTypeArguments.Clear(); auto lines = Split(source, '\n'); for (auto & line : lines) { @@ -25,6 +26,14 @@ namespace renderer_test StringBuilder typeExp; while (!parser.IsEnd()) typeExp << parser.ReadToken().Content; + entryPointTypeArguments.Add(typeExp); + } + else if (parser.LookAhead("global_type")) + { + parser.ReadToken(); + StringBuilder typeExp; + while (!parser.IsEnd()) + typeExp << parser.ReadToken().Content; globalTypeArguments.Add(typeExp); } else diff --git a/tools/render-test/shader-input-layout.h b/tools/render-test/shader-input-layout.h index 92dd516a7..be86d971f 100644 --- a/tools/render-test/shader-input-layout.h +++ b/tools/render-test/shader-input-layout.h @@ -73,6 +73,7 @@ class ShaderInputLayout public: Slang::List<ShaderInputLayoutEntry> entries; Slang::List<Slang::String> globalTypeArguments; + Slang::List<Slang::String> entryPointTypeArguments; int numRenderTargets = 1; void Parse(const char * source); }; diff --git a/tools/render-test/slang-support.cpp b/tools/render-test/slang-support.cpp index 1dc7323a5..0bf086d43 100644 --- a/tools/render-test/slang-support.cpp +++ b/tools/render-test/slang-support.cpp @@ -92,16 +92,25 @@ RefPtr<ShaderProgram> ShaderCompiler::compileProgram( RefPtr<ShaderProgram> shaderProgram; - Slang::List<const char*> rawTypeNames; + + Slang::List<const char*> rawGlobalTypeNames; + for (auto typeName : request.globalTypeArguments) + rawGlobalTypeNames.Add(typeName.Buffer()); + spSetGlobalGenericArgs( + slangRequest, + (int)rawGlobalTypeNames.Count(), + rawGlobalTypeNames.Buffer()); + + Slang::List<const char*> rawEntryPointTypeNames; for (auto typeName : request.entryPointTypeArguments) - rawTypeNames.Add(typeName.Buffer()); + rawEntryPointTypeNames.Add(typeName.Buffer()); if (request.computeShader.name) { int computeEntryPoint = spAddEntryPointEx(slangRequest, computeTranslationUnit, computeEntryPointName, SLANG_STAGE_COMPUTE, - (int)rawTypeNames.Count(), - rawTypeNames.Buffer()); + (int)rawEntryPointTypeNames.Count(), + rawEntryPointTypeNames.Buffer()); spSetLineDirectiveMode(slangRequest, SLANG_LINE_DIRECTIVE_MODE_NONE); const SlangResult res = spCompile(slangRequest); @@ -129,8 +138,8 @@ RefPtr<ShaderProgram> ShaderCompiler::compileProgram( } else { - int vertexEntryPoint = spAddEntryPointEx(slangRequest, vertexTranslationUnit, vertexEntryPointName, SLANG_STAGE_VERTEX, (int)rawTypeNames.Count(), rawTypeNames.Buffer()); - int fragmentEntryPoint = spAddEntryPointEx(slangRequest, fragmentTranslationUnit, fragmentEntryPointName, SLANG_STAGE_FRAGMENT, (int)rawTypeNames.Count(), rawTypeNames.Buffer()); + int vertexEntryPoint = spAddEntryPointEx(slangRequest, vertexTranslationUnit, vertexEntryPointName, SLANG_STAGE_VERTEX, (int)rawEntryPointTypeNames.Count(), rawEntryPointTypeNames.Buffer()); + int fragmentEntryPoint = spAddEntryPointEx(slangRequest, fragmentTranslationUnit, fragmentEntryPointName, SLANG_STAGE_FRAGMENT, (int)rawEntryPointTypeNames.Count(), rawEntryPointTypeNames.Buffer()); const SlangResult res = spCompile(slangRequest); if (auto diagnostics = spGetDiagnosticOutput(slangRequest)) |
