summaryrefslogtreecommitdiffstats
path: root/tools/render-test
diff options
context:
space:
mode:
Diffstat (limited to 'tools/render-test')
-rw-r--r--tools/render-test/render-test-main.cpp6
-rw-r--r--tools/render-test/shader-input-layout.cpp26
-rw-r--r--tools/render-test/shader-input-layout.h6
-rw-r--r--tools/render-test/slang-support.cpp25
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))
{