summaryrefslogtreecommitdiff
path: root/tools/gfx/renderer-shared.h
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-07-28 12:24:12 -0700
committerGitHub <noreply@github.com>2021-07-28 12:24:12 -0700
commitc6f6ce12ec522b193b42bcd12d3a2540c7a6ff92 (patch)
treed5f77aa02df88c71ef4f898db40434bf4c1f3010 /tools/gfx/renderer-shared.h
parent23d406f8a3b325f91fecd9ad52bd510ded5f49a7 (diff)
Experimental DXR1.0 support in gfx. (#1915)
* Experimental DXR1.0 support in gfx. - Add `dispatchRays` command. - Add `createRayTracingPipelineState` method to construct a D3D ray tracing state object from a linked slang program and user specified shader table. Limitations/simplifications: no local root signature support, shader table entries contains only shader identifiers and is specified at pipeline creation time, owned by the pipeline state object. * Root object binding for raytracing pipelines. * `maybeSpecializePipeline` implementation for raytracing pipelines. * Add ray-tracing-pipeline example. * Fixes. * Update README.md * Update comments on the lifespan of specialized pipelines Co-authored-by: Yong He <yhe@nvidia.com> Co-authored-by: jsmall-nvidia <jsmall@nvidia.com>
Diffstat (limited to 'tools/gfx/renderer-shared.h')
-rw-r--r--tools/gfx/renderer-shared.h18
1 files changed, 15 insertions, 3 deletions
diff --git a/tools/gfx/renderer-shared.h b/tools/gfx/renderer-shared.h
index 1f0a3eaab..31a7566a2 100644
--- a/tools/gfx/renderer-shared.h
+++ b/tools/gfx/renderer-shared.h
@@ -766,7 +766,7 @@ public:
auto bindingRangeIndex = offset.bindingRangeIndex;
auto bindingRange = layout->getBindingRange(bindingRangeIndex);
- auto objectIndex = bindingRange.subObjectIndex + offset.bindingArrayIndex;
+ Slang::Index objectIndex = bindingRange.subObjectIndex + offset.bindingArrayIndex;
if (objectIndex >= m_userProvidedSpecializationArgs.getCount())
m_userProvidedSpecializationArgs.setCount(objectIndex + 1);
if (!m_userProvidedSpecializationArgs[objectIndex])
@@ -816,7 +816,7 @@ public:
subObjectIndexInRange++)
{
ExtendedShaderObjectTypeList typeArgs;
- auto objectIndex = bindingRange.subObjectIndex + subObjectIndexInRange;
+ Slang::Index objectIndex = bindingRange.subObjectIndex + subObjectIndexInRange;
auto subObject = m_objects[objectIndex];
if (!subObject)
@@ -932,9 +932,19 @@ public:
PipelineType type;
GraphicsPipelineStateDesc graphics;
ComputePipelineStateDesc compute;
+ RayTracingPipelineStateDesc rayTracing;
ShaderProgramBase* getProgram()
{
- return static_cast<ShaderProgramBase*>(type == PipelineType::Compute ? compute.program : graphics.program);
+ switch (type)
+ {
+ case PipelineType::Compute:
+ return static_cast<ShaderProgramBase*>(compute.program);
+ case PipelineType::Graphics:
+ return static_cast<ShaderProgramBase*>(graphics.program);
+ case PipelineType::RayTracing:
+ return static_cast<ShaderProgramBase*>(rayTracing.program);
+ }
+ return nullptr;
}
} desc;
@@ -1105,6 +1115,8 @@ public:
public:
ExtendedShaderObjectTypeList specializationArgs;
// Given current pipeline and root shader object binding, generate and bind a specialized pipeline if necessary.
+ // The newly specialized pipeline is held alive by the pipeline cache so users of `outNewPipeline` do not
+ // need to maintain its lifespan.
Result maybeSpecializePipeline(
PipelineStateBase* currentPipeline,
ShaderObjectBase* rootObject,