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