diff options
| author | Yong He <yonghe@outlook.com> | 2021-07-28 12:24:12 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-28 12:24:12 -0700 |
| commit | c6f6ce12ec522b193b42bcd12d3a2540c7a6ff92 (patch) | |
| tree | d5f77aa02df88c71ef4f898db40434bf4c1f3010 /tools/gfx/renderer-shared.h | |
| parent | 23d406f8a3b325f91fecd9ad52bd510ded5f49a7 (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.h | 18 |
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, |
