8#ifndef GrD3DGpu_DEFINED
9#define GrD3DGpu_DEFINED
24#if defined(GR_TEST_UTILS)
25struct IDXGraphicsAnalysis;
43 ID3D12Device*
device()
const {
return fDevice.
get(); }
44 ID3D12CommandQueue*
queue()
const {
return fQueue.
get(); }
63#if defined(GR_TEST_UTILS)
72 void testingOnly_startCapture()
override;
73 void testingOnly_stopCapture()
override;
75 void resetShaderCacheForTesting()
const override {
76 fResourceProvider.resetShaderCacheForTesting();
81 SkISize dimensions,
int numStencilSamples)
override;
84 return GrBackendFormat::MakeDxgi(this->
d3dCaps().preferredStencilFormat());
97 D3D12_RESOURCE_TRANSITION_BARRIER* barriers)
const;
101 D3D12_RESOURCE_TRANSITION_BARRIER* barriers)
const;
103 [[nodiscard]] std::unique_ptr<GrSemaphore>
makeSemaphore(
bool isOwned)
override;
121 enum class SyncQueue {
129 void destroyResources();
134 int renderTargetSampleCnt,
138 uint32_t levelClearMask,
139 std::string_view label)
override;
147 size_t dataSize)
override;
173 size_t rowBytes)
override;
181 bool prepForTexSampling)
override;
187 size_t size)
override;
195 size_t rowBytes)
override;
239 std::string_view label)
override;
243 std::array<float, 4>
color)
override;
253 size_t size)
override;
255 bool submitDirectCommandList(SyncQueue sync);
257 void checkForFinishedCommandLists();
258 void waitForQueueCompletion();
266 void resolveTexture(
GrSurface* dst, int32_t dstX, int32_t dstY,
272 int renderTargetSampleCnt,
277 std::string_view label);
288 const D3D12_PLACED_SUBRESOURCE_FOOTPRINT& placedFootprint);
290 bool createTextureResourceForBackendSurface(DXGI_FORMAT dxgiFormat,
309 uint64_t fCurrentFenceValue = 0;
311 std::unique_ptr<GrD3DDirectCommandList> fCurrentDirectCommandList;
316 struct OutstandingCommandList {
317 OutstandingCommandList(std::unique_ptr<GrD3DDirectCommandList> commandList,
319 : fCommandList(
std::move(commandList)), fFenceValue(fenceValue) {
321 std::unique_ptr<GrD3DDirectCommandList> fCommandList;
322 uint64_t fFenceValue;
325 SkDeque fOutstandingCommandLists;
327 std::unique_ptr<GrD3DOpsRenderPass> fCachedOpsRenderPass;
329#if defined(GR_TEST_UTILS)
330 IDXGraphicsAnalysis* fGraphicsAnalysis;
333 using INHERITED =
GrGpu;
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
void * GrGpuFinishedContext
void(* GrGpuFinishedProc)(GrGpuFinishedContext finishedContext)
static SkColorType colorType(AImageDecoder *decoder, const AImageDecoderHeaderInfo *headerInfo)
sk_sp< GrTexture > onWrapCompressedBackendTexture(const GrBackendTexture &, GrWrapOwnership, GrWrapCacheable) override
void deleteBackendTexture(const GrBackendTexture &) override
bool onRegenerateMipMapLevels(GrTexture *) override
void addBufferResourceBarriers(GrD3DBuffer *buffer, int numBarriers, D3D12_RESOURCE_TRANSITION_BARRIER *barriers) const
GrD3DDirectCommandList * currentCommandList() const
void submit(GrOpsRenderPass *renderPass) override
void insertSemaphore(GrSemaphore *semaphore) override
sk_sp< GrGpuBuffer > onCreateBuffer(size_t sizeInBytes, GrGpuBufferType, GrAccessPattern) override
const GrD3DCaps & d3dCaps() const
static std::unique_ptr< GrGpu > Make(const GrD3DBackendContext &backendContext, const GrContextOptions &, GrDirectContext *)
GrOpsRenderPass * onGetOpsRenderPass(GrRenderTarget *, bool useMSAASurface, GrAttachment *, GrSurfaceOrigin, const SkIRect &, const GrOpsRenderPass::LoadAndStoreInfo &, const GrOpsRenderPass::StencilLoadAndStoreInfo &, const skia_private::TArray< GrSurfaceProxy *, true > &sampledProxies, GrXferBarrierFlags renderPassXferBarriers) override
ID3D12CommandQueue * queue() const
GrBackendTexture onCreateCompressedBackendTexture(SkISize dimensions, const GrBackendFormat &, skgpu::Mipmapped, GrProtected) override
std::unique_ptr< GrSemaphore > wrapBackendSemaphore(const GrBackendSemaphore &, GrSemaphoreWrapType, GrWrapOwnership) override
sk_sp< GrAttachment > makeMSAAAttachment(SkISize dimensions, const GrBackendFormat &format, int numSamples, GrProtected isProtected, GrMemoryless isMemoryless) override
bool onTransferFromBufferToBuffer(sk_sp< GrGpuBuffer > src, size_t srcOffset, sk_sp< GrGpuBuffer > dst, size_t dstOffset, size_t size) override
void addFinishedProc(GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) override
void prepareSurfacesForBackendAccessAndStateUpdates(SkSpan< GrSurfaceProxy * > proxies, SkSurfaces::BackendSurfaceAccess access, const skgpu::MutableTextureState *newState) override
GrBackendFormat getPreferredStencilFormat(const GrBackendFormat &) override
bool onSubmitToGpu(GrSyncCpu sync) override
void checkFinishProcs() override
void waitSemaphore(GrSemaphore *semaphore) override
bool onTransferPixelsFrom(GrSurface *, SkIRect, GrColorType surfaceColorType, GrColorType bufferColorType, sk_sp< GrGpuBuffer >, size_t offset) override
GrD3DMemoryAllocator * memoryAllocator() const
bool onReadPixels(GrSurface *, SkIRect, GrColorType surfaceColorType, GrColorType dstColorType, void *, size_t rowBytes) override
void addResourceBarriers(sk_sp< GrManagedResource > resource, int numBarriers, D3D12_RESOURCE_TRANSITION_BARRIER *barriers) const
void takeOwnershipOfBuffer(sk_sp< GrGpuBuffer >) override
GrBackendTexture onCreateBackendTexture(SkISize dimensions, const GrBackendFormat &, GrRenderable, skgpu::Mipmapped, GrProtected, std::string_view label) override
void onResolveRenderTarget(GrRenderTarget *target, const SkIRect &) override
void xferBarrier(GrRenderTarget *, GrXferBarrierType) override
void endRenderPass(GrRenderTarget *target, GrSurfaceOrigin origin, const SkIRect &bounds)
GrD3DResourceProvider & resourceProvider()
sk_sp< GrThreadSafePipelineBuilder > refPipelineBuilder() override
GrRingBuffer * uniformsRingBuffer() override
std::unique_ptr< GrSemaphore > makeSemaphore(bool isOwned) override
GrThreadSafePipelineBuilder * pipelineBuilder() override
bool protectedContext() const
sk_sp< GrTexture > onCreateCompressedTexture(SkISize dimensions, const GrBackendFormat &, skgpu::Budgeted, skgpu::Mipmapped, GrProtected, const void *data, size_t dataSize) override
bool onUpdateCompressedBackendTexture(const GrBackendTexture &, sk_sp< skgpu::RefCntedCallback > finishedCallback, const void *data, size_t size) override
sk_sp< GrTexture > onWrapRenderableBackendTexture(const GrBackendTexture &, int sampleCnt, GrWrapOwnership, GrWrapCacheable) override
ID3D12Device * device() const
sk_sp< GrTexture > onCreateTexture(SkISize, const GrBackendFormat &, GrRenderable, int renderTargetSampleCnt, skgpu::Budgeted, GrProtected, int mipLevelCount, uint32_t levelClearMask, std::string_view label) override
void finishOutstandingGpuWork() override
std::unique_ptr< GrSemaphore > prepareTextureForCrossContextUsage(GrTexture *) override
bool onTransferPixelsTo(GrTexture *, SkIRect, GrColorType surfaceColorType, GrColorType bufferColorType, sk_sp< GrGpuBuffer >, size_t offset, size_t rowBytes) override
sk_sp< GrRenderTarget > onWrapBackendRenderTarget(const GrBackendRenderTarget &) override
bool onCopySurface(GrSurface *dst, const SkIRect &dstRect, GrSurface *src, const SkIRect &srcRect, GrSamplerState::Filter) override
sk_sp< GrAttachment > makeStencilAttachment(const GrBackendFormat &, SkISize dimensions, int numStencilSamples) override
GrStagingBufferManager * stagingBufferManager() override
sk_sp< GrTexture > onWrapBackendTexture(const GrBackendTexture &, GrWrapOwnership, GrWrapCacheable, GrIOType) override
bool onWritePixels(GrSurface *, SkIRect, GrColorType surfaceColorType, GrColorType srcColorType, const GrMipLevel[], int mipLevelCount, bool prepForTexSampling) override
bool onClearBackendTexture(const GrBackendTexture &, sk_sp< skgpu::RefCntedCallback > finishedCallback, std::array< float, 4 > color) override
const GrCaps * caps() const
static const uint8_t buffer[]
uint32_t uint32_t * format