summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/gfx/render.h1
-rw-r--r--tools/render-test/render-test-main.cpp3
-rw-r--r--tools/render-test/shader-input-layout.cpp9
-rw-r--r--tools/render-test/shader-input-layout.h1
-rw-r--r--tools/render-test/slang-support.cpp21
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))