From 8a71039475212fb1e1a6dd2fd2911d02769637ef Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 8 Apr 2021 21:10:30 -0700 Subject: Improve robustness of gfx lifetime management. (#1788) * Improve robustness of gfx lifetime management. * fix clang error * fix clang error * Fix clang warning --- tools/gfx/renderer-shared.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'tools/gfx/renderer-shared.cpp') 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 specializedPipeline) +void ShaderCache::addSpecializedPipeline(PipelineKey key, Slang::RefPtr specializedPipeline) { specializedPipelines[key] = specializedPipeline; } @@ -363,7 +363,7 @@ Result RendererBase::maybeSpecializePipeline( pipelineKey.specializationArgs.addRange(specializationArgs.componentIDs); pipelineKey.updateHash(); - ComPtr specializedPipelineState = shaderCache.getSpecializedPipelineState(pipelineKey); + RefPtr 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 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(specializedPipelineState.get()); - specializedPipelineStateBase->unspecializedPipelineState = currentPipeline; + specializedPipelineState = + static_cast(specializedPipelineComPtr.get()); + specializedPipelineState->unspecializedPipelineState = currentPipeline; shaderCache.addSpecializedPipeline(pipelineKey, specializedPipelineState); } - outNewPipeline = static_cast(specializedPipelineState.get()); + outNewPipeline = static_cast(specializedPipelineState.Ptr()); } return SLANG_OK; } -- cgit v1.2.3