summaryrefslogtreecommitdiffstats
path: root/tools/render-test
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
parent50676c741e10ffe6f710c5de86387eaacd274a9a (diff)
Integrate reflection more deeply into gfx layer (#1677)
Diffstat (limited to 'tools/render-test')
-rw-r--r--tools/render-test/render-test-main.cpp34
-rw-r--r--tools/render-test/slang-support.cpp45
-rw-r--r--tools/render-test/slang-support.h38
3 files changed, 77 insertions, 40 deletions
diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp
index 926887a77..6e35db639 100644
--- a/tools/render-test/render-test-main.cpp
+++ b/tools/render-test/render-test-main.cpp
@@ -111,6 +111,8 @@ protected:
Options::ShaderProgramType shaderType,
const ShaderCompilerUtil::Input& input);
+ virtual void finalizeImpl();
+
uint64_t m_startTicks;
// variables for state to be used for rendering...
@@ -165,6 +167,8 @@ public:
virtual Result writeBindingOutput(BindRoot* bindRoot, const char* fileName) override;
protected:
+ virtual void finalizeImpl() SLANG_OVERRIDE;
+
ComPtr<IShaderObject> m_programVars;
ShaderOutputPlan m_outputPlan;
};
@@ -586,12 +590,11 @@ SlangResult ShaderObjectRenderTestApp::initialize(
// Slang's reflection API to tell us what the parameters of the program are.
//
auto slangReflection = (slang::ProgramLayout*) spGetReflection(m_compilationOutput.output.getRequestForReflection());
- ComPtr<IShaderObjectLayout> programLayout = renderer->createRootShaderObjectLayout(slangReflection);
// Once we have determined the layout of all the parameters we need to bind,
// we will create a shader object to use for storing and binding those parameters.
//
- m_programVars = renderer->createRootShaderObject(programLayout);
+ m_programVars = renderer->createRootShaderObject(m_shaderProgram);
// Now we need to assign from the input parameter data that was parsed into
// the program vars we allocated.
@@ -601,9 +604,6 @@ SlangResult ShaderObjectRenderTestApp::initialize(
m_renderer = renderer;
- // TODO(tfoley): use each API's reflection interface to query the constant-buffer size needed
-// m_constantBufferSize = 16 * sizeof(float);
-
{
switch(m_options.shaderType)
{
@@ -614,7 +614,6 @@ SlangResult ShaderObjectRenderTestApp::initialize(
case Options::ShaderProgramType::Compute:
{
ComputePipelineStateDesc desc;
- desc.rootShaderObjectLayout = programLayout.get();
desc.program = m_shaderProgram;
m_pipelineState = renderer->createComputePipelineState(desc);
@@ -648,7 +647,6 @@ SlangResult ShaderObjectRenderTestApp::initialize(
SLANG_RETURN_ON_FAIL(renderer->createBufferResource(IResource::Usage::VertexBuffer, vertexBufferDesc, kVertexData, m_vertexBuffer.writeRef()));
GraphicsPipelineStateDesc desc;
- desc.rootShaderObjectLayout = programLayout.get();
desc.program = m_shaderProgram;
desc.inputLayout = inputLayout;
@@ -662,6 +660,12 @@ SlangResult ShaderObjectRenderTestApp::initialize(
return m_pipelineState ? SLANG_OK : SLANG_FAIL;
}
+void ShaderObjectRenderTestApp::finalizeImpl()
+{
+ m_programVars = nullptr;
+ RenderTestApp::finalizeImpl();
+}
+
Result RenderTestApp::_initializeShaders(
SlangSession* session,
IRenderer* renderer,
@@ -730,6 +734,18 @@ void RenderTestApp::runCompute()
void RenderTestApp::finalize()
{
+ finalizeImpl();
+
+ m_inputLayout = nullptr;
+ m_vertexBuffer = nullptr;
+ m_shaderProgram = nullptr;
+ m_pipelineState = nullptr;
+
+ m_renderer = nullptr;
+}
+
+void RenderTestApp::finalizeImpl()
+{
}
Result LegacyRenderTestApp::writeBindingOutput(BindRoot* bindRoot, const char* fileName)
@@ -1328,7 +1344,9 @@ static SlangResult _innerMain(Slang::StdWriters* stdWriters, SlangSession* sessi
app = new LegacyRenderTestApp();
SLANG_RETURN_ON_FAIL(app->initialize(session, renderer, options, input));
window->show();
- return window->runLoop(app);
+ SLANG_RETURN_ON_FAIL(window->runLoop(app));
+ app->finalize();
+ return SLANG_OK;
}
}
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;
diff --git a/tools/render-test/slang-support.h b/tools/render-test/slang-support.h
index 06651ec73..c08d18567 100644
--- a/tools/render-test/slang-support.h
+++ b/tools/render-test/slang-support.h
@@ -58,35 +58,12 @@ struct ShaderCompilerUtil
struct Output
{
- void set(PipelineType pipelineType, const IShaderProgram::KernelDesc* inKernelDescs, Slang::Index kernelDescCount)
- {
- kernelDescs.clear();
- kernelDescs.addRange(inKernelDescs, kernelDescCount);
- desc.pipelineType = pipelineType;
- desc.kernels = kernelDescs.getBuffer();
- desc.kernelCount = kernelDescCount;
- }
- void reset()
- {
- {
- desc.pipelineType = PipelineType::Unknown;
- 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;
- }
+ void set(
+ PipelineType pipelineType,
+ const IShaderProgram::KernelDesc* kernelDescs,
+ Slang::Index kernelDescCount,
+ slang::IComponentType* slangProgram);
+ void reset();
~Output()
{
reset();
@@ -105,7 +82,8 @@ struct ShaderCompilerUtil
}
Slang::List<IShaderProgram::KernelDesc> kernelDescs;
- IShaderProgram::Desc desc;
+ ComPtr<slang::IComponentType> slangProgram;
+ IShaderProgram::Desc desc = {};
/// Compile request that owns the lifetime of compiled kernel code.
SlangCompileRequest* m_requestForKernels = nullptr;