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