| Index: src/gpu/vk/GrVkCommandBuffer.h
|
| diff --git a/src/gpu/vk/GrVkCommandBuffer.h b/src/gpu/vk/GrVkCommandBuffer.h
|
| index b513a47f29b6aef935a002ad28fd9d69aacd5778..709e4c6044e7b99dc6479ca402810636257fb97d 100644
|
| --- a/src/gpu/vk/GrVkCommandBuffer.h
|
| +++ b/src/gpu/vk/GrVkCommandBuffer.h
|
| @@ -13,6 +13,7 @@
|
| #include "GrVkUtil.h"
|
| #include "vk/GrVkDefines.h"
|
|
|
| +class GrVkFramebuffer;
|
| class GrVkPipeline;
|
| class GrVkRenderPass;
|
| class GrVkRenderTarget;
|
| @@ -20,24 +21,10 @@ class GrVkTransferBuffer;
|
|
|
| class GrVkCommandBuffer : public GrVkResource {
|
| public:
|
| - static GrVkCommandBuffer* Create(const GrVkGpu* gpu, VkCommandPool cmdPool);
|
| ~GrVkCommandBuffer() override;
|
|
|
| - void begin(const GrVkGpu* gpu);
|
| - void end(const GrVkGpu* gpu);
|
| -
|
| void invalidateState();
|
|
|
| - // Begins render pass on this command buffer. The framebuffer from GrVkRenderTarget will be used
|
| - // in the render pass.
|
| - void beginRenderPass(const GrVkGpu* gpu,
|
| - const GrVkRenderPass* renderPass,
|
| - const GrVkRenderTarget& target);
|
| - void endRenderPass(const GrVkGpu* gpu);
|
| -
|
| - void submitToQueue(const GrVkGpu* gpu, VkQueue queue, GrVkGpu::SyncQueue sync);
|
| - bool finished(const GrVkGpu* gpu) const;
|
| -
|
| ////////////////////////////////////////////////////////////////////////////
|
| // CommandBuffer commands
|
| ////////////////////////////////////////////////////////////////////////////
|
| @@ -105,6 +92,98 @@ public:
|
|
|
| void setBlendConstants(const GrVkGpu* gpu, const float blendConstants[4]);
|
|
|
| + // Commands that only work inside of a render pass
|
| + void clearAttachments(const GrVkGpu* gpu,
|
| + int numAttachments,
|
| + const VkClearAttachment* attachments,
|
| + int numRects,
|
| + const VkClearRect* clearRects) const;
|
| +
|
| + void drawIndexed(const GrVkGpu* gpu,
|
| + uint32_t indexCount,
|
| + uint32_t instanceCount,
|
| + uint32_t firstIndex,
|
| + int32_t vertexOffset,
|
| + uint32_t firstInstance) const;
|
| +
|
| + void draw(const GrVkGpu* gpu,
|
| + uint32_t vertexCount,
|
| + uint32_t instanceCount,
|
| + uint32_t firstVertex,
|
| + uint32_t firstInstance) const;
|
| +
|
| + // Add ref-counted resource that will be tracked and released when this
|
| + // command buffer finishes execution
|
| + void addResource(const GrVkResource* resource) {
|
| + resource->ref();
|
| + fTrackedResources.push_back(resource);
|
| + }
|
| +
|
| +protected:
|
| + GrVkCommandBuffer(VkCommandBuffer cmdBuffer, const GrVkRenderPass* rp = VK_NULL_HANDLE)
|
| + : fTrackedResources(kInitialTrackedResourcesCount)
|
| + , fIsActive(false)
|
| + , fActiveRenderPass(rp)
|
| + , fCmdBuffer(cmdBuffer)
|
| + , fSubmitFence(VK_NULL_HANDLE)
|
| + , fBoundVertexBufferIsValid(false)
|
| + , fBoundIndexBufferIsValid(false) {
|
| + this->invalidateState();
|
| + }
|
| + SkTArray<const GrVkResource*, true> fTrackedResources;
|
| +
|
| + // Tracks whether we are in the middle of a command buffer begin/end calls and thus can add
|
| + // new commands to the buffer;
|
| + bool fIsActive;
|
| +
|
| + // Stores a pointer to the current active render pass (i.e. begin has been called but not
|
| + // end). A nullptr means there is no active render pass. The GrVKCommandBuffer does not own
|
| + // the render pass.
|
| + const GrVkRenderPass* fActiveRenderPass;
|
| +
|
| + VkCommandBuffer fCmdBuffer;
|
| + VkFence fSubmitFence;
|
| +
|
| +private:
|
| + static const int kInitialTrackedResourcesCount = 32;
|
| +
|
| + void freeGPUData(const GrVkGpu* gpu) const override;
|
| + void abandonSubResources() const override;
|
| +
|
| + VkBuffer fBoundVertexBuffer;
|
| + bool fBoundVertexBufferIsValid;
|
| +
|
| + VkBuffer fBoundIndexBuffer;
|
| + bool fBoundIndexBufferIsValid;
|
| +
|
| + // Cached values used for dynamic state updates
|
| + VkViewport fCachedViewport;
|
| + VkRect2D fCachedScissor;
|
| + float fCachedBlendConstant[4];
|
| +};
|
| +
|
| +class GrVkSecondaryCommandBuffer;
|
| +
|
| +class GrVkPrimaryCommandBuffer : public GrVkCommandBuffer {
|
| +public:
|
| + static GrVkPrimaryCommandBuffer* Create(const GrVkGpu* gpu, VkCommandPool cmdPool);
|
| +
|
| + void begin(const GrVkGpu* gpu);
|
| + void end(const GrVkGpu* gpu);
|
| +
|
| + // Begins render pass on this command buffer. The framebuffer from GrVkRenderTarget will be used
|
| + // in the render pass.
|
| + void beginRenderPass(const GrVkGpu* gpu,
|
| + const GrVkRenderPass* renderPass,
|
| + const GrVkRenderTarget& target);
|
| + void endRenderPass(const GrVkGpu* gpu);
|
| +
|
| + // Submits the SecondaryCommandBuffer into this command buffer. It is required that we are
|
| + // currently inside a render pass that is compatible with the one used to create the
|
| + // SecondaryCommandBuffer.
|
| + void executeCommands(const GrVkGpu* gpu,
|
| + const GrVkSecondaryCommandBuffer* secondaryBuffer);
|
| +
|
| // Commands that only work outside of a render pass
|
| void clearColorImage(const GrVkGpu* gpu,
|
| GrVkImage* image,
|
| @@ -169,75 +248,32 @@ public:
|
| uint32_t copyRegionCount,
|
| const VkBufferImageCopy* copyRegions);
|
|
|
| - // Commands that only work inside of a render pass
|
| - void clearAttachments(const GrVkGpu* gpu,
|
| - int numAttachments,
|
| - const VkClearAttachment* attachments,
|
| - int numRects,
|
| - const VkClearRect* clearRects) const;
|
| -
|
| - void drawIndexed(const GrVkGpu* gpu,
|
| - uint32_t indexCount,
|
| - uint32_t instanceCount,
|
| - uint32_t firstIndex,
|
| - int32_t vertexOffset,
|
| - uint32_t firstInstance) const;
|
| -
|
| - void draw(const GrVkGpu* gpu,
|
| - uint32_t vertexCount,
|
| - uint32_t instanceCount,
|
| - uint32_t firstVertex,
|
| - uint32_t firstInstance) const;
|
| -
|
| - // Add ref-counted resource that will be tracked and released when this
|
| - // command buffer finishes execution
|
| - void addResource(const GrVkResource* resource) {
|
| - resource->ref();
|
| - fTrackedResources.push_back(resource);
|
| - }
|
| + void submitToQueue(const GrVkGpu* gpu, VkQueue queue, GrVkGpu::SyncQueue sync);
|
| + bool finished(const GrVkGpu* gpu) const;
|
|
|
| private:
|
| - static const int kInitialTrackedResourcesCount = 32;
|
| -
|
| - explicit GrVkCommandBuffer(VkCommandBuffer cmdBuffer)
|
| - : fTrackedResources(kInitialTrackedResourcesCount)
|
| - , fCmdBuffer(cmdBuffer)
|
| - , fSubmitFence(VK_NULL_HANDLE)
|
| - , fBoundVertexBufferIsValid(false)
|
| - , fBoundIndexBufferIsValid(false)
|
| - , fIsActive(false)
|
| - , fActiveRenderPass(nullptr) {
|
| - this->invalidateState();
|
| - }
|
| -
|
| - void freeGPUData(const GrVkGpu* gpu) const override;
|
| - void abandonSubResources() const override;
|
| + explicit GrVkPrimaryCommandBuffer(VkCommandBuffer cmdBuffer) : INHERITED(cmdBuffer) {}
|
|
|
| - SkTArray<const GrVkResource*, true> fTrackedResources;
|
| -
|
| - VkCommandBuffer fCmdBuffer;
|
| - VkFence fSubmitFence;
|
| + typedef GrVkCommandBuffer INHERITED;
|
| +};
|
|
|
| - VkBuffer fBoundVertexBuffer;
|
| - bool fBoundVertexBufferIsValid;
|
| +class GrVkSecondaryCommandBuffer : public GrVkCommandBuffer {
|
| +public:
|
| + static GrVkSecondaryCommandBuffer* Create(const GrVkGpu* gpu, VkCommandPool cmdPool,
|
| + const GrVkRenderPass* compatibleRenderPass);
|
|
|
| - VkBuffer fBoundIndexBuffer;
|
| - bool fBoundIndexBufferIsValid;
|
| + void begin(const GrVkGpu* gpu, const GrVkFramebuffer* framebuffer);
|
| + void end(const GrVkGpu* gpu);
|
|
|
| - // Tracks whether we are in the middle of a command buffer begin/end calls and thus can add new
|
| - // commands to the buffer;
|
| - bool fIsActive;
|
| +private:
|
| + explicit GrVkSecondaryCommandBuffer(VkCommandBuffer cmdBuffer,
|
| + const GrVkRenderPass* compatibleRenderPass)
|
| + : INHERITED(cmdBuffer, compatibleRenderPass) {
|
| + }
|
|
|
| - // Stores a pointer to the current active render pass (i.e. begin has been called but not end).
|
| - // A nullptr means there is no active render pass. The GrVKCommandBuffer does not own the render
|
| - // pass.
|
| - const GrVkRenderPass* fActiveRenderPass;
|
| + friend class GrVkPrimaryCommandBuffer;
|
|
|
| - // Cached values used for dynamic state updates
|
| - VkViewport fCachedViewport;
|
| - VkRect2D fCachedScissor;
|
| - float fCachedBlendConstant[4];
|
| + typedef GrVkCommandBuffer INHERITED;
|
| };
|
|
|
| -
|
| #endif
|
|
|