8#ifndef skgpu_graphite_MtlCommandBuffer_DEFINED
9#define skgpu_graphite_MtlCommandBuffer_DEFINED
20#import <Metal/Metal.h>
24class MtlBlitCommandEncoder;
25class MtlComputeCommandEncoder;
26class MtlRenderCommandEncoder;
27class MtlResourceProvider;
28class MtlSharedContext;
33 static std::unique_ptr<MtlCommandBuffer>
Make(id<MTLCommandQueue>,
46 return (*fCommandBuffer).status == MTLCommandBufferStatusCompleted ||
47 (*fCommandBuffer).status == MTLCommandBufferStatusError;
52 if ((*fCommandBuffer).status == MTLCommandBufferStatusScheduled ||
53 (*fCommandBuffer).status == MTLCommandBufferStatusCommitted) {
54 [(*fCommandBuffer) waitUntilCompleted];
58 (
int)(*fCommandBuffer).status);
69 bool createNewMTLCommandBuffer();
76 const Texture* depthStencilTexture,
85 const Texture* depthStencilTexture);
91 void setBlendConstants(
float* blendConstants);
98 void bindVertexBuffers(
const Buffer* vertexBuffer,
size_t vertexOffset,
99 const Buffer* instanceBuffer,
size_t instanceOffset);
100 void bindIndexBuffer(
const Buffer* indexBuffer,
size_t offset);
101 void bindIndirectBuffer(
const Buffer* indirectBuffer,
size_t offset);
103 void bindTextureAndSampler(
const Texture*,
const Sampler*,
unsigned int bindIndex);
105 void setScissor(
unsigned int left,
unsigned int top,
107 void setViewport(
float x,
float y,
float width,
float height,
108 float minDepth,
float maxDepth);
110 void draw(
PrimitiveType type,
unsigned int baseVertex,
unsigned int vertexCount);
111 void drawIndexed(
PrimitiveType type,
unsigned int baseIndex,
unsigned int indexCount,
112 unsigned int baseVertex);
114 unsigned int baseVertex,
unsigned int vertexCount,
115 unsigned int baseInstance,
unsigned int instanceCount);
117 unsigned int indexCount,
unsigned int baseVertex,
118 unsigned int baseInstance,
unsigned int instanceCount);
123 void beginComputePass();
127 void bindSampler(
const Sampler* sampler,
unsigned int index);
129 void dispatchThreadgroupsIndirect(
const WorkgroupSize& localSize,
130 const Buffer* indirectBuffer,
131 size_t indirectBufferOffset);
132 void endComputePass();
139 size_t size)
override;
144 size_t bufferRowBytes)
override;
153 int mipLevel)
override;
158 void endBlitCommandEncoder();
160 sk_cfp<id<MTLCommandBuffer>> fCommandBuffer;
165 id<MTLBuffer> fCurrentIndexBuffer;
166 id<MTLBuffer> fCurrentIndirectBuffer;
167 size_t fCurrentIndexBufferOffset = 0;
168 size_t fCurrentIndirectBufferOffset = 0;
171 id<MTLCommandQueue> fQueue;
178 bool fDrawIsOffscreen =
false;
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
#define SKGPU_LOG_E(fmt,...)
static bool left(const SkPoint &p0, const SkPoint &p1)
skia_private::TArray< std::unique_ptr< DrawPass > > DrawPassList
SkSpan< const std::unique_ptr< DispatchGroup > > DispatchGroupSpan
void addWaitSemaphores(size_t numWaitSemaphores, const BackendSemaphore *waitSemaphores) override
bool onSynchronizeBufferToCpu(const Buffer *, bool *outDidResultInWork) override
~MtlCommandBuffer() override
bool onCopyBufferToTexture(const Buffer *, const Texture *, const BufferTextureCopyData *copyData, int count) override
bool onCopyTextureToBuffer(const Texture *, SkIRect srcRect, const Buffer *, size_t bufferOffset, size_t bufferRowBytes) override
void addSignalSemaphores(size_t numSignalSemaphores, const BackendSemaphore *signalSemaphores) override
static std::unique_ptr< MtlCommandBuffer > Make(id< MTLCommandQueue >, const MtlSharedContext *, MtlResourceProvider *)
void onResetCommandBuffer() override
bool onCopyTextureToTexture(const Texture *src, SkIRect srcRect, const Texture *dst, SkIPoint dstPoint, int mipLevel) override
bool onCopyBufferToBuffer(const Buffer *srcBuffer, size_t srcOffset, const Buffer *dstBuffer, size_t dstOffset, size_t size) override
bool onAddComputePass(DispatchGroupSpan) override
bool onClearBuffer(const Buffer *, size_t offset, size_t size) override
bool setNewCommandBufferResources() override
bool onAddRenderPass(const RenderPassDesc &, const Texture *colorTexture, const Texture *resolveTexture, const Texture *depthStencilTexture, SkRect viewport, const DrawPassList &) override
static const uint8_t buffer[]