xref: /aosp_15_r20/external/skia/src/gpu/ganesh/d3d/GrD3DGpu.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 GrD3DGpu_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define GrD3DGpu_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAssert.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkDeque.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/RefCntedCallback.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrGpu.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrRenderTarget.h"
16*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrSemaphore.h"
17*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrStagingBufferManager.h"
18*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/d3d/GrD3DCaps.h"
19*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/d3d/GrD3DCommandList.h"
20*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/d3d/GrD3DResourceProvider.h"
21*c8dee2aaSAndroid Build Coastguard Worker 
22*c8dee2aaSAndroid Build Coastguard Worker #include <optional>
23*c8dee2aaSAndroid Build Coastguard Worker #include <utility>
24*c8dee2aaSAndroid Build Coastguard Worker 
25*c8dee2aaSAndroid Build Coastguard Worker struct GrD3DBackendContext;
26*c8dee2aaSAndroid Build Coastguard Worker class GrD3DOpsRenderPass;
27*c8dee2aaSAndroid Build Coastguard Worker struct GrD3DOptions;
28*c8dee2aaSAndroid Build Coastguard Worker class GrPipeline;
29*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS)
30*c8dee2aaSAndroid Build Coastguard Worker struct IDXGraphicsAnalysis;
31*c8dee2aaSAndroid Build Coastguard Worker #endif
32*c8dee2aaSAndroid Build Coastguard Worker 
33*c8dee2aaSAndroid Build Coastguard Worker class GrD3DGpu : public GrGpu {
34*c8dee2aaSAndroid Build Coastguard Worker public:
35*c8dee2aaSAndroid Build Coastguard Worker     static std::unique_ptr<GrGpu> Make(const GrD3DBackendContext& backendContext,
36*c8dee2aaSAndroid Build Coastguard Worker                                        const GrContextOptions&,
37*c8dee2aaSAndroid Build Coastguard Worker                                        GrDirectContext*);
38*c8dee2aaSAndroid Build Coastguard Worker 
39*c8dee2aaSAndroid Build Coastguard Worker     ~GrD3DGpu() override;
40*c8dee2aaSAndroid Build Coastguard Worker 
d3dCaps()41*c8dee2aaSAndroid Build Coastguard Worker     const GrD3DCaps& d3dCaps() const { return static_cast<const GrD3DCaps&>(*this->caps()); }
42*c8dee2aaSAndroid Build Coastguard Worker 
resourceProvider()43*c8dee2aaSAndroid Build Coastguard Worker     GrD3DResourceProvider& resourceProvider() { return fResourceProvider; }
44*c8dee2aaSAndroid Build Coastguard Worker 
45*c8dee2aaSAndroid Build Coastguard Worker     GrThreadSafePipelineBuilder* pipelineBuilder() override;
46*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrThreadSafePipelineBuilder> refPipelineBuilder() override;
47*c8dee2aaSAndroid Build Coastguard Worker 
device()48*c8dee2aaSAndroid Build Coastguard Worker     ID3D12Device* device() const { return fDevice.get(); }
queue()49*c8dee2aaSAndroid Build Coastguard Worker     ID3D12CommandQueue* queue() const { return fQueue.get(); }
50*c8dee2aaSAndroid Build Coastguard Worker 
memoryAllocator()51*c8dee2aaSAndroid Build Coastguard Worker     GrD3DMemoryAllocator* memoryAllocator() const { return fMemoryAllocator.get(); }
52*c8dee2aaSAndroid Build Coastguard Worker 
currentCommandList()53*c8dee2aaSAndroid Build Coastguard Worker     GrD3DDirectCommandList* currentCommandList() const { return fCurrentDirectCommandList.get(); }
54*c8dee2aaSAndroid Build Coastguard Worker 
stagingBufferManager()55*c8dee2aaSAndroid Build Coastguard Worker     GrStagingBufferManager* stagingBufferManager() override { return &fStagingBufferManager; }
56*c8dee2aaSAndroid Build Coastguard Worker     void takeOwnershipOfBuffer(sk_sp<GrGpuBuffer>) override;
57*c8dee2aaSAndroid Build Coastguard Worker 
uniformsRingBuffer()58*c8dee2aaSAndroid Build Coastguard Worker     GrRingBuffer* uniformsRingBuffer() override { return &fConstantsRingBuffer; }
59*c8dee2aaSAndroid Build Coastguard Worker 
protectedContext()60*c8dee2aaSAndroid Build Coastguard Worker     bool protectedContext() const { return false; }
61*c8dee2aaSAndroid Build Coastguard Worker 
xferBarrier(GrRenderTarget *,GrXferBarrierType)62*c8dee2aaSAndroid Build Coastguard Worker     void xferBarrier(GrRenderTarget*, GrXferBarrierType) override {}
63*c8dee2aaSAndroid Build Coastguard Worker 
64*c8dee2aaSAndroid Build Coastguard Worker     void deleteBackendTexture(const GrBackendTexture&) override;
65*c8dee2aaSAndroid Build Coastguard Worker 
66*c8dee2aaSAndroid Build Coastguard Worker     bool compile(const GrProgramDesc&, const GrProgramInfo&) override;
67*c8dee2aaSAndroid Build Coastguard Worker 
68*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS)
69*c8dee2aaSAndroid Build Coastguard Worker     bool isTestingOnlyBackendTexture(const GrBackendTexture&) const override;
70*c8dee2aaSAndroid Build Coastguard Worker 
71*c8dee2aaSAndroid Build Coastguard Worker     GrBackendRenderTarget createTestingOnlyBackendRenderTarget(SkISize dimensions,
72*c8dee2aaSAndroid Build Coastguard Worker                                                                GrColorType,
73*c8dee2aaSAndroid Build Coastguard Worker                                                                int sampleCnt,
74*c8dee2aaSAndroid Build Coastguard Worker                                                                GrProtected) override;
75*c8dee2aaSAndroid Build Coastguard Worker     void deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget&) override;
76*c8dee2aaSAndroid Build Coastguard Worker 
77*c8dee2aaSAndroid Build Coastguard Worker     void testingOnly_startCapture() override;
78*c8dee2aaSAndroid Build Coastguard Worker     void testingOnly_stopCapture() override;
79*c8dee2aaSAndroid Build Coastguard Worker 
resetShaderCacheForTesting()80*c8dee2aaSAndroid Build Coastguard Worker     void resetShaderCacheForTesting() const override {
81*c8dee2aaSAndroid Build Coastguard Worker         fResourceProvider.resetShaderCacheForTesting();
82*c8dee2aaSAndroid Build Coastguard Worker     }
83*c8dee2aaSAndroid Build Coastguard Worker #endif
84*c8dee2aaSAndroid Build Coastguard Worker 
85*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrAttachment> makeStencilAttachment(const GrBackendFormat& /*colorFormat*/,
86*c8dee2aaSAndroid Build Coastguard Worker                                               SkISize dimensions, int numStencilSamples) override;
87*c8dee2aaSAndroid Build Coastguard Worker 
getPreferredStencilFormat(const GrBackendFormat &)88*c8dee2aaSAndroid Build Coastguard Worker     GrBackendFormat getPreferredStencilFormat(const GrBackendFormat&) override {
89*c8dee2aaSAndroid Build Coastguard Worker         return GrBackendFormat::MakeDxgi(this->d3dCaps().preferredStencilFormat());
90*c8dee2aaSAndroid Build Coastguard Worker     }
91*c8dee2aaSAndroid Build Coastguard Worker 
makeMSAAAttachment(SkISize dimensions,const GrBackendFormat & format,int numSamples,GrProtected isProtected,GrMemoryless isMemoryless)92*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrAttachment> makeMSAAAttachment(SkISize dimensions,
93*c8dee2aaSAndroid Build Coastguard Worker                                            const GrBackendFormat& format,
94*c8dee2aaSAndroid Build Coastguard Worker                                            int numSamples,
95*c8dee2aaSAndroid Build Coastguard Worker                                            GrProtected isProtected,
96*c8dee2aaSAndroid Build Coastguard Worker                                            GrMemoryless isMemoryless) override {
97*c8dee2aaSAndroid Build Coastguard Worker         return nullptr;
98*c8dee2aaSAndroid Build Coastguard Worker     }
99*c8dee2aaSAndroid Build Coastguard Worker 
100*c8dee2aaSAndroid Build Coastguard Worker     void addResourceBarriers(sk_sp<GrManagedResource> resource,
101*c8dee2aaSAndroid Build Coastguard Worker                              int numBarriers,
102*c8dee2aaSAndroid Build Coastguard Worker                              D3D12_RESOURCE_TRANSITION_BARRIER* barriers) const;
103*c8dee2aaSAndroid Build Coastguard Worker 
104*c8dee2aaSAndroid Build Coastguard Worker     void addBufferResourceBarriers(GrD3DBuffer* buffer,
105*c8dee2aaSAndroid Build Coastguard Worker                                    int numBarriers,
106*c8dee2aaSAndroid Build Coastguard Worker                                    D3D12_RESOURCE_TRANSITION_BARRIER* barriers) const;
107*c8dee2aaSAndroid Build Coastguard Worker 
108*c8dee2aaSAndroid Build Coastguard Worker     [[nodiscard]] std::unique_ptr<GrSemaphore> makeSemaphore(bool isOwned) override;
109*c8dee2aaSAndroid Build Coastguard Worker     std::unique_ptr<GrSemaphore> wrapBackendSemaphore(const GrBackendSemaphore&,
110*c8dee2aaSAndroid Build Coastguard Worker                                                       GrSemaphoreWrapType,
111*c8dee2aaSAndroid Build Coastguard Worker                                                       GrWrapOwnership) override;
112*c8dee2aaSAndroid Build Coastguard Worker     void insertSemaphore(GrSemaphore* semaphore) override;
113*c8dee2aaSAndroid Build Coastguard Worker     void waitSemaphore(GrSemaphore* semaphore) override;
prepareTextureForCrossContextUsage(GrTexture *)114*c8dee2aaSAndroid Build Coastguard Worker     std::unique_ptr<GrSemaphore> prepareTextureForCrossContextUsage(GrTexture*) override {
115*c8dee2aaSAndroid Build Coastguard Worker         return nullptr;
116*c8dee2aaSAndroid Build Coastguard Worker     }
117*c8dee2aaSAndroid Build Coastguard Worker 
118*c8dee2aaSAndroid Build Coastguard Worker     void submit(GrOpsRenderPass* renderPass) override;
119*c8dee2aaSAndroid Build Coastguard Worker     void endRenderPass(GrRenderTarget* target, GrSurfaceOrigin origin,
120*c8dee2aaSAndroid Build Coastguard Worker                        const SkIRect& bounds);
121*c8dee2aaSAndroid Build Coastguard Worker 
checkFinishedCallbacks()122*c8dee2aaSAndroid Build Coastguard Worker     void checkFinishedCallbacks() override { this->checkForFinishedCommandLists(); }
123*c8dee2aaSAndroid Build Coastguard Worker     void finishOutstandingGpuWork() override;
124*c8dee2aaSAndroid Build Coastguard Worker 
125*c8dee2aaSAndroid Build Coastguard Worker private:
126*c8dee2aaSAndroid Build Coastguard Worker     enum class SyncQueue {
127*c8dee2aaSAndroid Build Coastguard Worker         kForce,
128*c8dee2aaSAndroid Build Coastguard Worker         kSkip
129*c8dee2aaSAndroid Build Coastguard Worker     };
130*c8dee2aaSAndroid Build Coastguard Worker 
131*c8dee2aaSAndroid Build Coastguard Worker     GrD3DGpu(GrDirectContext*, const GrContextOptions&, const GrD3DBackendContext&,
132*c8dee2aaSAndroid Build Coastguard Worker              sk_sp<GrD3DMemoryAllocator>);
133*c8dee2aaSAndroid Build Coastguard Worker 
134*c8dee2aaSAndroid Build Coastguard Worker     void destroyResources();
135*c8dee2aaSAndroid Build Coastguard Worker 
136*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrTexture> onCreateTexture(SkISize,
137*c8dee2aaSAndroid Build Coastguard Worker                                      const GrBackendFormat&,
138*c8dee2aaSAndroid Build Coastguard Worker                                      GrRenderable,
139*c8dee2aaSAndroid Build Coastguard Worker                                      int renderTargetSampleCnt,
140*c8dee2aaSAndroid Build Coastguard Worker                                      skgpu::Budgeted,
141*c8dee2aaSAndroid Build Coastguard Worker                                      GrProtected,
142*c8dee2aaSAndroid Build Coastguard Worker                                      int mipLevelCount,
143*c8dee2aaSAndroid Build Coastguard Worker                                      uint32_t levelClearMask,
144*c8dee2aaSAndroid Build Coastguard Worker                                      std::string_view label) override;
145*c8dee2aaSAndroid Build Coastguard Worker 
146*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrTexture> onCreateCompressedTexture(SkISize dimensions,
147*c8dee2aaSAndroid Build Coastguard Worker                                                const GrBackendFormat&,
148*c8dee2aaSAndroid Build Coastguard Worker                                                skgpu::Budgeted,
149*c8dee2aaSAndroid Build Coastguard Worker                                                skgpu::Mipmapped,
150*c8dee2aaSAndroid Build Coastguard Worker                                                GrProtected,
151*c8dee2aaSAndroid Build Coastguard Worker                                                const void* data,
152*c8dee2aaSAndroid Build Coastguard Worker                                                size_t dataSize) override;
153*c8dee2aaSAndroid Build Coastguard Worker 
154*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&,
155*c8dee2aaSAndroid Build Coastguard Worker                                           GrWrapOwnership,
156*c8dee2aaSAndroid Build Coastguard Worker                                           GrWrapCacheable,
157*c8dee2aaSAndroid Build Coastguard Worker                                           GrIOType) override;
158*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrTexture> onWrapCompressedBackendTexture(const GrBackendTexture&,
159*c8dee2aaSAndroid Build Coastguard Worker                                                     GrWrapOwnership,
160*c8dee2aaSAndroid Build Coastguard Worker                                                     GrWrapCacheable) override;
161*c8dee2aaSAndroid Build Coastguard Worker 
162*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
163*c8dee2aaSAndroid Build Coastguard Worker                                                     int sampleCnt,
164*c8dee2aaSAndroid Build Coastguard Worker                                                     GrWrapOwnership,
165*c8dee2aaSAndroid Build Coastguard Worker                                                     GrWrapCacheable) override;
166*c8dee2aaSAndroid Build Coastguard Worker 
167*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrRenderTarget> onWrapBackendRenderTarget(const GrBackendRenderTarget&) override;
168*c8dee2aaSAndroid Build Coastguard Worker 
169*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrGpuBuffer> onCreateBuffer(size_t sizeInBytes,
170*c8dee2aaSAndroid Build Coastguard Worker                                       GrGpuBufferType,
171*c8dee2aaSAndroid Build Coastguard Worker                                       GrAccessPattern) override;
172*c8dee2aaSAndroid Build Coastguard Worker 
173*c8dee2aaSAndroid Build Coastguard Worker     bool onReadPixels(GrSurface*,
174*c8dee2aaSAndroid Build Coastguard Worker                       SkIRect,
175*c8dee2aaSAndroid Build Coastguard Worker                       GrColorType surfaceColorType,
176*c8dee2aaSAndroid Build Coastguard Worker                       GrColorType dstColorType,
177*c8dee2aaSAndroid Build Coastguard Worker                       void*,
178*c8dee2aaSAndroid Build Coastguard Worker                       size_t rowBytes) override;
179*c8dee2aaSAndroid Build Coastguard Worker 
180*c8dee2aaSAndroid Build Coastguard Worker     bool onWritePixels(GrSurface*,
181*c8dee2aaSAndroid Build Coastguard Worker                        SkIRect,
182*c8dee2aaSAndroid Build Coastguard Worker                        GrColorType surfaceColorType,
183*c8dee2aaSAndroid Build Coastguard Worker                        GrColorType srcColorType,
184*c8dee2aaSAndroid Build Coastguard Worker                        const GrMipLevel[],
185*c8dee2aaSAndroid Build Coastguard Worker                        int mipLevelCount,
186*c8dee2aaSAndroid Build Coastguard Worker                        bool prepForTexSampling) override;
187*c8dee2aaSAndroid Build Coastguard Worker 
188*c8dee2aaSAndroid Build Coastguard Worker     bool onTransferFromBufferToBuffer(sk_sp<GrGpuBuffer> src,
189*c8dee2aaSAndroid Build Coastguard Worker                                       size_t srcOffset,
190*c8dee2aaSAndroid Build Coastguard Worker                                       sk_sp<GrGpuBuffer> dst,
191*c8dee2aaSAndroid Build Coastguard Worker                                       size_t dstOffset,
192*c8dee2aaSAndroid Build Coastguard Worker                                       size_t size) override;
193*c8dee2aaSAndroid Build Coastguard Worker 
194*c8dee2aaSAndroid Build Coastguard Worker     bool onTransferPixelsTo(GrTexture*,
195*c8dee2aaSAndroid Build Coastguard Worker                             SkIRect,
196*c8dee2aaSAndroid Build Coastguard Worker                             GrColorType surfaceColorType,
197*c8dee2aaSAndroid Build Coastguard Worker                             GrColorType bufferColorType,
198*c8dee2aaSAndroid Build Coastguard Worker                             sk_sp<GrGpuBuffer>,
199*c8dee2aaSAndroid Build Coastguard Worker                             size_t offset,
200*c8dee2aaSAndroid Build Coastguard Worker                             size_t rowBytes) override;
201*c8dee2aaSAndroid Build Coastguard Worker 
202*c8dee2aaSAndroid Build Coastguard Worker     bool onTransferPixelsFrom(GrSurface*,
203*c8dee2aaSAndroid Build Coastguard Worker                               SkIRect,
204*c8dee2aaSAndroid Build Coastguard Worker                               GrColorType surfaceColorType,
205*c8dee2aaSAndroid Build Coastguard Worker                               GrColorType bufferColorType,
206*c8dee2aaSAndroid Build Coastguard Worker                               sk_sp<GrGpuBuffer>,
207*c8dee2aaSAndroid Build Coastguard Worker                               size_t offset) override;
208*c8dee2aaSAndroid Build Coastguard Worker 
209*c8dee2aaSAndroid Build Coastguard Worker     bool onCopySurface(GrSurface* dst, const SkIRect& dstRect,
210*c8dee2aaSAndroid Build Coastguard Worker                        GrSurface* src, const SkIRect& srcRect,
211*c8dee2aaSAndroid Build Coastguard Worker                        GrSamplerState::Filter) override;
212*c8dee2aaSAndroid Build Coastguard Worker 
213*c8dee2aaSAndroid Build Coastguard Worker     bool onRegenerateMipMapLevels(GrTexture*) override;
214*c8dee2aaSAndroid Build Coastguard Worker 
215*c8dee2aaSAndroid Build Coastguard Worker     void onResolveRenderTarget(GrRenderTarget* target, const SkIRect&) override;
216*c8dee2aaSAndroid Build Coastguard Worker 
addFinishedCallback(skgpu::AutoCallback callback,std::optional<GrTimerQuery> timerQuery)217*c8dee2aaSAndroid Build Coastguard Worker     void addFinishedCallback(skgpu::AutoCallback callback,
218*c8dee2aaSAndroid Build Coastguard Worker                              std::optional<GrTimerQuery> timerQuery) override {
219*c8dee2aaSAndroid Build Coastguard Worker         SkASSERT(!timerQuery);
220*c8dee2aaSAndroid Build Coastguard Worker         this->addFinishedCallback(skgpu::RefCntedCallback::Make(std::move(callback)));
221*c8dee2aaSAndroid Build Coastguard Worker     }
222*c8dee2aaSAndroid Build Coastguard Worker 
223*c8dee2aaSAndroid Build Coastguard Worker     void addFinishedCallback(sk_sp<skgpu::RefCntedCallback> finishedCallback);
224*c8dee2aaSAndroid Build Coastguard Worker 
225*c8dee2aaSAndroid Build Coastguard Worker     GrOpsRenderPass* onGetOpsRenderPass(
226*c8dee2aaSAndroid Build Coastguard Worker             GrRenderTarget*,
227*c8dee2aaSAndroid Build Coastguard Worker             bool useMSAASurface,
228*c8dee2aaSAndroid Build Coastguard Worker             GrAttachment*,
229*c8dee2aaSAndroid Build Coastguard Worker             GrSurfaceOrigin,
230*c8dee2aaSAndroid Build Coastguard Worker             const SkIRect&,
231*c8dee2aaSAndroid Build Coastguard Worker             const GrOpsRenderPass::LoadAndStoreInfo&,
232*c8dee2aaSAndroid Build Coastguard Worker             const GrOpsRenderPass::StencilLoadAndStoreInfo&,
233*c8dee2aaSAndroid Build Coastguard Worker             const skia_private::TArray<GrSurfaceProxy*, true>& sampledProxies,
234*c8dee2aaSAndroid Build Coastguard Worker             GrXferBarrierFlags renderPassXferBarriers) override;
235*c8dee2aaSAndroid Build Coastguard Worker 
236*c8dee2aaSAndroid Build Coastguard Worker     void prepareSurfacesForBackendAccessAndStateUpdates(
237*c8dee2aaSAndroid Build Coastguard Worker             SkSpan<GrSurfaceProxy*> proxies,
238*c8dee2aaSAndroid Build Coastguard Worker             SkSurfaces::BackendSurfaceAccess access,
239*c8dee2aaSAndroid Build Coastguard Worker             const skgpu::MutableTextureState* newState) override;
240*c8dee2aaSAndroid Build Coastguard Worker 
241*c8dee2aaSAndroid Build Coastguard Worker     bool onSubmitToGpu(const GrSubmitInfo& info) override;
242*c8dee2aaSAndroid Build Coastguard Worker 
243*c8dee2aaSAndroid Build Coastguard Worker     GrBackendTexture onCreateBackendTexture(SkISize dimensions,
244*c8dee2aaSAndroid Build Coastguard Worker                                             const GrBackendFormat&,
245*c8dee2aaSAndroid Build Coastguard Worker                                             GrRenderable,
246*c8dee2aaSAndroid Build Coastguard Worker                                             skgpu::Mipmapped,
247*c8dee2aaSAndroid Build Coastguard Worker                                             GrProtected,
248*c8dee2aaSAndroid Build Coastguard Worker                                             std::string_view label) override;
249*c8dee2aaSAndroid Build Coastguard Worker 
250*c8dee2aaSAndroid Build Coastguard Worker     bool onClearBackendTexture(const GrBackendTexture&,
251*c8dee2aaSAndroid Build Coastguard Worker                                sk_sp<skgpu::RefCntedCallback> finishedCallback,
252*c8dee2aaSAndroid Build Coastguard Worker                                std::array<float, 4> color) override;
253*c8dee2aaSAndroid Build Coastguard Worker 
254*c8dee2aaSAndroid Build Coastguard Worker     GrBackendTexture onCreateCompressedBackendTexture(SkISize dimensions,
255*c8dee2aaSAndroid Build Coastguard Worker                                                       const GrBackendFormat&,
256*c8dee2aaSAndroid Build Coastguard Worker                                                       skgpu::Mipmapped,
257*c8dee2aaSAndroid Build Coastguard Worker                                                       GrProtected) override;
258*c8dee2aaSAndroid Build Coastguard Worker 
259*c8dee2aaSAndroid Build Coastguard Worker     bool onUpdateCompressedBackendTexture(const GrBackendTexture&,
260*c8dee2aaSAndroid Build Coastguard Worker                                           sk_sp<skgpu::RefCntedCallback> finishedCallback,
261*c8dee2aaSAndroid Build Coastguard Worker                                           const void* data,
262*c8dee2aaSAndroid Build Coastguard Worker                                           size_t size) override;
263*c8dee2aaSAndroid Build Coastguard Worker 
264*c8dee2aaSAndroid Build Coastguard Worker     bool submitDirectCommandList(SyncQueue sync);
265*c8dee2aaSAndroid Build Coastguard Worker 
266*c8dee2aaSAndroid Build Coastguard Worker     void checkForFinishedCommandLists();
267*c8dee2aaSAndroid Build Coastguard Worker     void waitForQueueCompletion();
268*c8dee2aaSAndroid Build Coastguard Worker 
269*c8dee2aaSAndroid Build Coastguard Worker     void copySurfaceAsCopyTexture(GrSurface* dst, GrSurface* src, GrD3DTextureResource* dstResource,
270*c8dee2aaSAndroid Build Coastguard Worker                                   GrD3DTextureResource* srcResource, const SkIRect& srcRect,
271*c8dee2aaSAndroid Build Coastguard Worker                                   const SkIPoint& dstPoint);
272*c8dee2aaSAndroid Build Coastguard Worker 
273*c8dee2aaSAndroid Build Coastguard Worker     void copySurfaceAsResolve(GrSurface* dst, GrSurface* src, const SkIRect& srcRect,
274*c8dee2aaSAndroid Build Coastguard Worker                               const SkIPoint& dstPoint);
275*c8dee2aaSAndroid Build Coastguard Worker     void resolveTexture(GrSurface* dst, int32_t dstX, int32_t dstY,
276*c8dee2aaSAndroid Build Coastguard Worker                         GrD3DRenderTarget* src, const SkIRect& srcRect);
277*c8dee2aaSAndroid Build Coastguard Worker 
278*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrD3DTexture> createD3DTexture(SkISize,
279*c8dee2aaSAndroid Build Coastguard Worker                                          DXGI_FORMAT,
280*c8dee2aaSAndroid Build Coastguard Worker                                          GrRenderable,
281*c8dee2aaSAndroid Build Coastguard Worker                                          int renderTargetSampleCnt,
282*c8dee2aaSAndroid Build Coastguard Worker                                          skgpu::Budgeted,
283*c8dee2aaSAndroid Build Coastguard Worker                                          GrProtected,
284*c8dee2aaSAndroid Build Coastguard Worker                                          int mipLevelCount,
285*c8dee2aaSAndroid Build Coastguard Worker                                          GrMipmapStatus,
286*c8dee2aaSAndroid Build Coastguard Worker                                          std::string_view label);
287*c8dee2aaSAndroid Build Coastguard Worker 
288*c8dee2aaSAndroid Build Coastguard Worker     bool uploadToTexture(GrD3DTexture* tex,
289*c8dee2aaSAndroid Build Coastguard Worker                          SkIRect rect,
290*c8dee2aaSAndroid Build Coastguard Worker                          GrColorType colorType,
291*c8dee2aaSAndroid Build Coastguard Worker                          const GrMipLevel texels[],
292*c8dee2aaSAndroid Build Coastguard Worker                          int mipLevelCount);
293*c8dee2aaSAndroid Build Coastguard Worker 
294*c8dee2aaSAndroid Build Coastguard Worker     void readOrTransferPixels(GrD3DTextureResource* texResource,
295*c8dee2aaSAndroid Build Coastguard Worker                               SkIRect rect,
296*c8dee2aaSAndroid Build Coastguard Worker                               sk_sp<GrGpuBuffer> transferBuffer,
297*c8dee2aaSAndroid Build Coastguard Worker                               const D3D12_PLACED_SUBRESOURCE_FOOTPRINT& placedFootprint);
298*c8dee2aaSAndroid Build Coastguard Worker 
299*c8dee2aaSAndroid Build Coastguard Worker     bool createTextureResourceForBackendSurface(DXGI_FORMAT dxgiFormat,
300*c8dee2aaSAndroid Build Coastguard Worker                                                 SkISize dimensions,
301*c8dee2aaSAndroid Build Coastguard Worker                                                 GrTexturable texturable,
302*c8dee2aaSAndroid Build Coastguard Worker                                                 GrRenderable renderable,
303*c8dee2aaSAndroid Build Coastguard Worker                                                 skgpu::Mipmapped mipmapped,
304*c8dee2aaSAndroid Build Coastguard Worker                                                 int sampleCnt,
305*c8dee2aaSAndroid Build Coastguard Worker                                                 GrD3DTextureResourceInfo* info,
306*c8dee2aaSAndroid Build Coastguard Worker                                                 GrProtected isProtected);
307*c8dee2aaSAndroid Build Coastguard Worker 
308*c8dee2aaSAndroid Build Coastguard Worker     gr_cp<ID3D12Device> fDevice;
309*c8dee2aaSAndroid Build Coastguard Worker     gr_cp<ID3D12CommandQueue> fQueue;
310*c8dee2aaSAndroid Build Coastguard Worker 
311*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<GrD3DMemoryAllocator> fMemoryAllocator;
312*c8dee2aaSAndroid Build Coastguard Worker 
313*c8dee2aaSAndroid Build Coastguard Worker     GrD3DResourceProvider fResourceProvider;
314*c8dee2aaSAndroid Build Coastguard Worker     GrStagingBufferManager fStagingBufferManager;
315*c8dee2aaSAndroid Build Coastguard Worker     GrRingBuffer fConstantsRingBuffer;
316*c8dee2aaSAndroid Build Coastguard Worker 
317*c8dee2aaSAndroid Build Coastguard Worker     gr_cp<ID3D12Fence> fFence;
318*c8dee2aaSAndroid Build Coastguard Worker     uint64_t fCurrentFenceValue = 0;
319*c8dee2aaSAndroid Build Coastguard Worker 
320*c8dee2aaSAndroid Build Coastguard Worker     std::unique_ptr<GrD3DDirectCommandList> fCurrentDirectCommandList;
321*c8dee2aaSAndroid Build Coastguard Worker     // One-off special-case descriptors created directly for the mipmap compute shader
322*c8dee2aaSAndroid Build Coastguard Worker     // and hence aren't tracked by the normal path.
323*c8dee2aaSAndroid Build Coastguard Worker     skia_private::STArray<32, GrD3DDescriptorHeap::CPUHandle> fMipmapCPUDescriptors;
324*c8dee2aaSAndroid Build Coastguard Worker 
325*c8dee2aaSAndroid Build Coastguard Worker     struct OutstandingCommandList {
OutstandingCommandListOutstandingCommandList326*c8dee2aaSAndroid Build Coastguard Worker         OutstandingCommandList(std::unique_ptr<GrD3DDirectCommandList> commandList,
327*c8dee2aaSAndroid Build Coastguard Worker                                uint64_t fenceValue)
328*c8dee2aaSAndroid Build Coastguard Worker             : fCommandList(std::move(commandList)), fFenceValue(fenceValue) {
329*c8dee2aaSAndroid Build Coastguard Worker         }
330*c8dee2aaSAndroid Build Coastguard Worker         std::unique_ptr<GrD3DDirectCommandList> fCommandList;
331*c8dee2aaSAndroid Build Coastguard Worker         uint64_t fFenceValue;
332*c8dee2aaSAndroid Build Coastguard Worker     };
333*c8dee2aaSAndroid Build Coastguard Worker 
334*c8dee2aaSAndroid Build Coastguard Worker     SkDeque fOutstandingCommandLists;
335*c8dee2aaSAndroid Build Coastguard Worker 
336*c8dee2aaSAndroid Build Coastguard Worker     std::unique_ptr<GrD3DOpsRenderPass> fCachedOpsRenderPass;
337*c8dee2aaSAndroid Build Coastguard Worker 
338*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS)
339*c8dee2aaSAndroid Build Coastguard Worker     IDXGraphicsAnalysis* fGraphicsAnalysis;
340*c8dee2aaSAndroid Build Coastguard Worker #endif
341*c8dee2aaSAndroid Build Coastguard Worker 
342*c8dee2aaSAndroid Build Coastguard Worker     using INHERITED = GrGpu;
343*c8dee2aaSAndroid Build Coastguard Worker };
344*c8dee2aaSAndroid Build Coastguard Worker 
345*c8dee2aaSAndroid Build Coastguard Worker #endif
346