1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2020 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrD3DPipeline_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrD3DPipeline_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/d3d/GrD3DTypes.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrManagedResource.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker class GrD3DPipeline : public GrManagedResource { 15*c8dee2aaSAndroid Build Coastguard Worker public: Make(gr_cp<ID3D12PipelineState> pipelineState)16*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrD3DPipeline> Make(gr_cp<ID3D12PipelineState> pipelineState) { 17*c8dee2aaSAndroid Build Coastguard Worker if (!pipelineState) { 18*c8dee2aaSAndroid Build Coastguard Worker return nullptr; 19*c8dee2aaSAndroid Build Coastguard Worker } 20*c8dee2aaSAndroid Build Coastguard Worker return sk_sp<GrD3DPipeline>(new GrD3DPipeline(std::move(pipelineState))); 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_TRACE_MANAGED_RESOURCES 23*c8dee2aaSAndroid Build Coastguard Worker /** Output a human-readable dump of this resource's information 24*c8dee2aaSAndroid Build Coastguard Worker */ dumpInfo()25*c8dee2aaSAndroid Build Coastguard Worker void dumpInfo() const override { 26*c8dee2aaSAndroid Build Coastguard Worker SkDebugf("GrD3DPipeline: %p (%d refs)\n", fPipelineState.get(), this->getRefCnt()); 27*c8dee2aaSAndroid Build Coastguard Worker } 28*c8dee2aaSAndroid Build Coastguard Worker #endif 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker // This will be called right before this class is destroyed and there is no reason to explicitly 31*c8dee2aaSAndroid Build Coastguard Worker // release the fPipelineState cause the gr_cp will handle that in the dtor. freeGPUData()32*c8dee2aaSAndroid Build Coastguard Worker void freeGPUData() const override {} 33*c8dee2aaSAndroid Build Coastguard Worker d3dPipelineState()34*c8dee2aaSAndroid Build Coastguard Worker ID3D12PipelineState* d3dPipelineState() const { return fPipelineState.get(); } 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker private: GrD3DPipeline(gr_cp<ID3D12PipelineState> pipelineState)37*c8dee2aaSAndroid Build Coastguard Worker GrD3DPipeline(gr_cp<ID3D12PipelineState> pipelineState) 38*c8dee2aaSAndroid Build Coastguard Worker : fPipelineState(std::move(pipelineState)) { 39*c8dee2aaSAndroid Build Coastguard Worker } 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker gr_cp<ID3D12PipelineState> fPipelineState; 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrManagedResource; 44*c8dee2aaSAndroid Build Coastguard Worker }; 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker #endif 47