xref: /aosp_15_r20/external/skia/src/gpu/ganesh/d3d/GrD3DPipeline.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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