8#ifndef skgpu_graphite_VulkanCommandBuffer_DEFINED
9#define skgpu_graphite_VulkanCommandBuffer_DEFINED
20class VulkanResourceProvider;
21class VulkanSharedContext;
54 VkCommandBuffer primaryCommandBuffer,
73 const Texture* depthStencilTexture,
80 const Texture* depthStencilTexture);
87 void recordTextureAndSamplerDescSet(
88 const DrawPass&,
const DrawPassCommands::BindTexturesAndSamplers&);
90 void bindTextureSamplers();
91 void bindUniformBuffers();
92 void syncDescriptorSets();
95 void setBlendConstants(
float* blendConstants);
100 void bindVertexBuffers(
const Buffer* vertexBuffer,
size_t vertexOffset,
101 const Buffer* instanceBuffer,
size_t instanceOffset);
103 void bindIndexBuffer(
const Buffer* indexBuffer,
size_t offset);
104 void bindIndirectBuffer(
const Buffer* indirectBuffer,
size_t offset);
105 void setScissor(
unsigned int left,
unsigned int top,
108 void draw(
PrimitiveType type,
unsigned int baseVertex,
unsigned int vertexCount);
109 void drawIndexed(
PrimitiveType type,
unsigned int baseIndex,
unsigned int indexCount,
110 unsigned int baseVertex);
112 unsigned int baseVertex,
unsigned int vertexCount,
113 unsigned int baseInstance,
unsigned int instanceCount);
115 unsigned int indexCount,
unsigned int baseVertex,
116 unsigned int baseInstance,
unsigned int instanceCount);
128 size_t size)
override;
133 size_t bufferRowBytes)
override;
142 int mipLevel)
override;
148 kBufferMemory_BarrierType,
149 kImageMemory_BarrierType
151 void pipelineBarrier(
const Resource* resource,
155 BarrierType barrierType,
157 void submitPipelineBarriers(
bool forSelfDependency =
false);
162 void updateRtAdjustUniform(
const SkRect& viewport);
164 bool updateLoadMSAAVertexBuffer();
168 bool updateAndBindLoadMSAAInputAttachment(
const VulkanTexture& resolveTexture);
172 size_t dstOffset = 0);
174 void setViewport(
const SkRect& viewport);
177 VkCommandBuffer fPrimaryCommandBuffer;
182 bool fActive =
false;
185 bool fActiveRenderPass =
false;
198 bool fBarriersByRegion =
false;
203 bool fBindUniformBuffers =
false;
204 bool fBindTextureSamplers =
false;
206 std::array<BindBufferInfo, VulkanGraphicsPipeline::kNumUniformBuffers> fUniformBuffersToBind
210 int fNumTextureSamplers = 0;
217 size_t fBoundIndexBufferOffset = 0;
218 size_t fBoundIndirectBufferOffset = 0;
220 float fCachedBlendConstant[4];
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
static bool left(const SkPoint &p0, const SkPoint &p1)
bool setNewCommandBufferResources() override
void prepareSurfaceForStateUpdate(SkSurface *targetSurface, const MutableTextureState *newState) override
bool onCopyTextureToBuffer(const Texture *, SkIRect srcRect, const Buffer *, size_t bufferOffset, size_t bufferRowBytes) override
bool onSynchronizeBufferToCpu(const Buffer *, bool *outDidResultInWork) override
void addBufferMemoryBarrier(const Resource *resource, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkBufferMemoryBarrier *barrier)
bool onClearBuffer(const Buffer *, size_t offset, size_t size) override
~VulkanCommandBuffer() override
bool onAddComputePass(DispatchGroupSpan) override
bool onAddRenderPass(const RenderPassDesc &, const Texture *colorTexture, const Texture *resolveTexture, const Texture *depthStencilTexture, SkRect viewport, const DrawPassList &) override
void addSignalSemaphores(size_t numWaitSemaphores, const BackendSemaphore *signalSemaphores) override
bool onCopyBufferToTexture(const Buffer *, const Texture *, const BufferTextureCopyData *copyData, int count) override
bool onCopyBufferToBuffer(const Buffer *srcBuffer, size_t srcOffset, const Buffer *dstBuffer, size_t dstOffset, size_t size) override
bool onCopyTextureToTexture(const Texture *src, SkIRect srcRect, const Texture *dst, SkIPoint dstPoint, int mipLevel) override
void addImageMemoryBarrier(const Resource *, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, bool byRegion, VkImageMemoryBarrier *barrier)
void addWaitSemaphores(size_t numWaitSemaphores, const BackendSemaphore *waitSemaphores) override
void onResetCommandBuffer() override
static std::unique_ptr< VulkanCommandBuffer > Make(const VulkanSharedContext *, VulkanResourceProvider *)
static constexpr unsigned int kNumInputBuffers
static const uint8_t buffer[]
VkFlags VkPipelineStageFlags