summaryrefslogtreecommitdiffstats
path: root/tools/render-test/slang-support.cpp
diff options
context:
space:
mode:
authorTim Foley <tfoleyNV@users.noreply.github.com>2021-01-26 13:32:03 -0800
committerGitHub <noreply@github.com>2021-01-26 13:32:03 -0800
commita90c850735664e2928e4cc961442a126c6859b97 (patch)
tree8b5e12113319ae87c57f5e616408eb955fe85a2c /tools/render-test/slang-support.cpp
parent50676c741e10ffe6f710c5de86387eaacd274a9a (diff)
Integrate reflection more deeply into gfx layer (#1677)
Diffstat (limited to 'tools/render-test/slang-support.cpp')
-rw-r--r--tools/render-test/slang-support.cpp45
1 files changed, 43 insertions, 2 deletions
diff --git a/tools/render-test/slang-support.cpp b/tools/render-test/slang-support.cpp
index 300cab4d7..c6d2b971e 100644
--- a/tools/render-test/slang-support.cpp
+++ b/tools/render-test/slang-support.cpp
@@ -50,6 +50,44 @@ gfx::StageType translateStage(SlangStage slangStage)
}
}
+void ShaderCompilerUtil::Output::set(
+ PipelineType pipelineType,
+ const IShaderProgram::KernelDesc* inKernelDescs,
+ Slang::Index kernelDescCount,
+ slang::IComponentType* inSlangProgram)
+{
+ kernelDescs.clear();
+ kernelDescs.addRange(inKernelDescs, kernelDescCount);
+ slangProgram = inSlangProgram;
+ desc.pipelineType = pipelineType;
+ desc.kernels = kernelDescs.getBuffer();
+ desc.kernelCount = kernelDescCount;
+ desc.slangProgram = inSlangProgram;
+}
+
+void ShaderCompilerUtil::Output::reset()
+{
+ {
+ desc.pipelineType = PipelineType::Unknown;
+ desc.slangProgram = nullptr;
+ desc.kernels = nullptr;
+ desc.kernelCount = 0;
+ }
+
+ kernelDescs.clear();
+ if (m_requestForKernels && session)
+ {
+ spDestroyCompileRequest(m_requestForKernels);
+ }
+ if (m_extraRequestForReflection && session)
+ {
+ spDestroyCompileRequest(m_extraRequestForReflection);
+ }
+ session = nullptr;
+ m_requestForKernels = nullptr;
+ m_extraRequestForReflection = nullptr;
+}
+
/* static */ SlangResult ShaderCompilerUtil::_compileProgramImpl(SlangSession* session, const Options& options, const Input& input, const ShaderCompileRequest& request, Output& out)
{
out.reset();
@@ -168,7 +206,8 @@ gfx::StageType translateStage(SlangStage slangStage)
SLANG_RETURN_ON_FAIL(res);
-
+ ComPtr<slang::IComponentType> linkedSlangProgram;
+
List<ShaderCompileRequest::EntryPoint> actualEntryPoints;
if(input.passThrough == SLANG_PASS_THROUGH_NONE)
{
@@ -178,6 +217,7 @@ gfx::StageType translateStage(SlangStage slangStage)
// loading of code.
//
auto reflection = slang::ProgramLayout::get(slangRequest);
+ SLANG_RETURN_ON_FAIL(spCompileRequest_getProgramWithEntryPoints(slangRequest, linkedSlangProgram.writeRef()));
// Get the amount of entry points in reflection
Index entryPointCount = Index(reflection->getEntryPointCount());
@@ -226,7 +266,7 @@ gfx::StageType translateStage(SlangStage slangStage)
kernelDescs.add(kernelDesc);
}
- out.set(input.pipelineType, kernelDescs.getBuffer(), kernelDescs.getCount());
+ out.set(input.pipelineType, kernelDescs.getBuffer(), kernelDescs.getCount(), linkedSlangProgram);
return SLANG_OK;
}
@@ -277,6 +317,7 @@ gfx::StageType translateStage(SlangStage slangStage)
SLANG_RETURN_ON_FAIL(_compileProgramImpl(session, options, input, request, out));
out.m_extraRequestForReflection = slangOutput.getRequestForReflection();
+ out.desc.slangProgram = slangOutput.desc.slangProgram;
slangOutput.m_requestForKernels = nullptr;
return SLANG_OK;