diff options
Diffstat (limited to 'tools/render-test')
| -rw-r--r-- | tools/render-test/render-test-main.cpp | 6 | ||||
| -rw-r--r-- | tools/render-test/shader-input-layout.cpp | 26 | ||||
| -rw-r--r-- | tools/render-test/shader-input-layout.h | 6 | ||||
| -rw-r--r-- | tools/render-test/slang-support.cpp | 25 |
4 files changed, 53 insertions, 10 deletions
diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp index 4d2791563..f21d1e5e4 100644 --- a/tools/render-test/render-test-main.cpp +++ b/tools/render-test/render-test-main.cpp @@ -387,8 +387,10 @@ Result RenderTestApp::initializeShaders(ShaderCompiler* shaderCompiler) compileRequest.computeShader.source = sourceInfo; compileRequest.computeShader.name = computeEntryPointName; } - compileRequest.globalTypeArguments = m_shaderInputLayout.globalTypeArguments; - compileRequest.entryPointTypeArguments = m_shaderInputLayout.entryPointTypeArguments; + compileRequest.globalGenericTypeArguments = m_shaderInputLayout.globalGenericTypeArguments; + compileRequest.entryPointGenericTypeArguments = m_shaderInputLayout.entryPointGenericTypeArguments; + compileRequest.globalExistentialTypeArguments = m_shaderInputLayout.globalExistentialTypeArguments; + compileRequest.entryPointExistentialTypeArguments = m_shaderInputLayout.entryPointExistentialTypeArguments; 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 8ab14bf76..5a2021b01 100644 --- a/tools/render-test/shader-input-layout.cpp +++ b/tools/render-test/shader-input-layout.cpp @@ -9,8 +9,10 @@ namespace renderer_test void ShaderInputLayout::Parse(const char * source) { entries.Clear(); - globalTypeArguments.Clear(); - entryPointTypeArguments.Clear(); + globalGenericTypeArguments.Clear(); + entryPointGenericTypeArguments.Clear(); + globalExistentialTypeArguments.Clear(); + entryPointExistentialTypeArguments.Clear(); auto lines = Split(source, '\n'); for (auto & line : lines) { @@ -26,7 +28,7 @@ namespace renderer_test StringBuilder typeExp; while (!parser.IsEnd()) typeExp << parser.ReadToken().Content; - entryPointTypeArguments.Add(typeExp); + entryPointGenericTypeArguments.Add(typeExp); } else if (parser.LookAhead("global_type")) { @@ -34,7 +36,23 @@ namespace renderer_test StringBuilder typeExp; while (!parser.IsEnd()) typeExp << parser.ReadToken().Content; - globalTypeArguments.Add(typeExp); + globalGenericTypeArguments.Add(typeExp); + } + else if (parser.LookAhead("globalExistentialType")) + { + parser.ReadToken(); + StringBuilder typeExp; + while (!parser.IsEnd()) + typeExp << parser.ReadToken().Content; + globalExistentialTypeArguments.Add(typeExp); + } + else if (parser.LookAhead("entryPointExistentialType")) + { + parser.ReadToken(); + StringBuilder typeExp; + while (!parser.IsEnd()) + typeExp << parser.ReadToken().Content; + entryPointExistentialTypeArguments.Add(typeExp); } else { diff --git a/tools/render-test/shader-input-layout.h b/tools/render-test/shader-input-layout.h index be86d971f..1044a6eea 100644 --- a/tools/render-test/shader-input-layout.h +++ b/tools/render-test/shader-input-layout.h @@ -72,8 +72,10 @@ class ShaderInputLayout { public: Slang::List<ShaderInputLayoutEntry> entries; - Slang::List<Slang::String> globalTypeArguments; - Slang::List<Slang::String> entryPointTypeArguments; + Slang::List<Slang::String> globalGenericTypeArguments; + Slang::List<Slang::String> entryPointGenericTypeArguments; + Slang::List<Slang::String> globalExistentialTypeArguments; + Slang::List<Slang::String> entryPointExistentialTypeArguments; 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 0bf086d43..f3042828f 100644 --- a/tools/render-test/slang-support.cpp +++ b/tools/render-test/slang-support.cpp @@ -94,7 +94,7 @@ RefPtr<ShaderProgram> ShaderCompiler::compileProgram( RefPtr<ShaderProgram> shaderProgram; Slang::List<const char*> rawGlobalTypeNames; - for (auto typeName : request.globalTypeArguments) + for (auto typeName : request.globalGenericTypeArguments) rawGlobalTypeNames.Add(typeName.Buffer()); spSetGlobalGenericArgs( slangRequest, @@ -102,8 +102,24 @@ RefPtr<ShaderProgram> ShaderCompiler::compileProgram( rawGlobalTypeNames.Buffer()); Slang::List<const char*> rawEntryPointTypeNames; - for (auto typeName : request.entryPointTypeArguments) + for (auto typeName : request.entryPointGenericTypeArguments) rawEntryPointTypeNames.Add(typeName.Buffer()); + + UInt globalExistentialTypeCount = request.globalExistentialTypeArguments.Count(); + for( UInt ii = 0; ii < globalExistentialTypeCount; ++ii ) + { + spSetTypeNameForGlobalExistentialSlot(slangRequest, ii, request.globalExistentialTypeArguments[ii].Buffer()); + } + + UInt entryPointExistentialTypeCount = request.entryPointExistentialTypeArguments.Count(); + auto setEntryPointExistentialTypeArgs = [&](int entryPoint) + { + for( UInt ii = 0; ii < entryPointExistentialTypeCount; ++ii ) + { + spSetTypeNameForEntryPointExistentialSlot(slangRequest, entryPoint, ii, request.entryPointExistentialTypeArguments[ii].Buffer()); + } + }; + if (request.computeShader.name) { int computeEntryPoint = spAddEntryPointEx(slangRequest, computeTranslationUnit, @@ -112,6 +128,8 @@ RefPtr<ShaderProgram> ShaderCompiler::compileProgram( (int)rawEntryPointTypeNames.Count(), rawEntryPointTypeNames.Buffer()); + setEntryPointExistentialTypeArgs(computeEntryPoint); + spSetLineDirectiveMode(slangRequest, SLANG_LINE_DIRECTIVE_MODE_NONE); const SlangResult res = spCompile(slangRequest); if (auto diagnostics = spGetDiagnosticOutput(slangRequest)) @@ -141,6 +159,9 @@ RefPtr<ShaderProgram> ShaderCompiler::compileProgram( 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()); + setEntryPointExistentialTypeArgs(vertexEntryPoint); + setEntryPointExistentialTypeArgs(fragmentEntryPoint); + const SlangResult res = spCompile(slangRequest); if (auto diagnostics = spGetDiagnosticOutput(slangRequest)) { |
