diff options
| author | Yong He <yonghe@outlook.com> | 2021-04-08 21:10:30 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-08 21:10:30 -0700 |
| commit | 8a71039475212fb1e1a6dd2fd2911d02769637ef (patch) | |
| tree | 0faa6e773d6b40c3dcbf0eed08217c629f8ebccf /tools/gfx/renderer-shared.cpp | |
| parent | d27557d9b770810402a0bf99bcd891c145a1a69d (diff) | |
Improve robustness of gfx lifetime management. (#1788)
* Improve robustness of gfx lifetime management.
* fix clang error
* fix clang error
* Fix clang warning
Diffstat (limited to 'tools/gfx/renderer-shared.cpp')
| -rw-r--r-- | tools/gfx/renderer-shared.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/tools/gfx/renderer-shared.cpp b/tools/gfx/renderer-shared.cpp index 1571e9abf..333f1df54 100644 --- a/tools/gfx/renderer-shared.cpp +++ b/tools/gfx/renderer-shared.cpp @@ -300,7 +300,7 @@ ShaderComponentID ShaderCache::getComponentId(ComponentKey key) return resultId; } -void ShaderCache::addSpecializedPipeline(PipelineKey key, Slang::ComPtr<IPipelineState> specializedPipeline) +void ShaderCache::addSpecializedPipeline(PipelineKey key, Slang::RefPtr<PipelineStateBase> specializedPipeline) { specializedPipelines[key] = specializedPipeline; } @@ -363,7 +363,7 @@ Result RendererBase::maybeSpecializePipeline( pipelineKey.specializationArgs.addRange(specializationArgs.componentIDs); pipelineKey.updateHash(); - ComPtr<IPipelineState> specializedPipelineState = shaderCache.getSpecializedPipelineState(pipelineKey); + RefPtr<PipelineStateBase> specializedPipelineState = shaderCache.getSpecializedPipelineState(pipelineKey); // Try to find specialized pipeline from shader cache. if (!specializedPipelineState) { @@ -393,30 +393,34 @@ Result RendererBase::maybeSpecializePipeline( SLANG_RETURN_ON_FAIL(createProgram(specializedProgramDesc, specializedProgram.writeRef())); // Create specialized pipeline state. + ComPtr<IPipelineState> specializedPipelineComPtr; switch (pipelineType) { case PipelineType::Compute: { auto pipelineDesc = currentPipeline->desc.compute; pipelineDesc.program = specializedProgram; - SLANG_RETURN_ON_FAIL(createComputePipelineState(pipelineDesc, specializedPipelineState.writeRef())); + SLANG_RETURN_ON_FAIL( + createComputePipelineState(pipelineDesc, specializedPipelineComPtr.writeRef())); break; } case PipelineType::Graphics: { auto pipelineDesc = currentPipeline->desc.graphics; pipelineDesc.program = specializedProgram; - SLANG_RETURN_ON_FAIL(createGraphicsPipelineState(pipelineDesc, specializedPipelineState.writeRef())); + SLANG_RETURN_ON_FAIL(createGraphicsPipelineState( + pipelineDesc, specializedPipelineComPtr.writeRef())); break; } default: break; } - auto specializedPipelineStateBase = static_cast<PipelineStateBase*>(specializedPipelineState.get()); - specializedPipelineStateBase->unspecializedPipelineState = currentPipeline; + specializedPipelineState = + static_cast<PipelineStateBase*>(specializedPipelineComPtr.get()); + specializedPipelineState->unspecializedPipelineState = currentPipeline; shaderCache.addSpecializedPipeline(pipelineKey, specializedPipelineState); } - outNewPipeline = static_cast<PipelineStateBase*>(specializedPipelineState.get()); + outNewPipeline = static_cast<PipelineStateBase*>(specializedPipelineState.Ptr()); } return SLANG_OK; } |
