Vulkan: Implement command re-ordering.
This introduces a new CommandBufferNode class. Nodes are linked
together to form a graph based on their dependencies. When the app
triggers a readback or swap, the graph is flushed entirely. This
sends the queued ANGLE Vulkan work to the Vulkan queue which is
then processed on the GPU with the right dependencies.
This design allows us to save on some unnecessary RenderPass creation
and also allows us to know what load/store ops to use. It also allows
us to take advantage of the Vulkan automatic RenderPass transitions
for performance. Load/Store ops and automatic transitions will be
implemented in later patches.
Bug: angleproject:2264
Change-Id: I0e729c719e38254202c6fedcede4e63125eb4810
Reviewed-on: https://chromium-review.googlesource.com/780849
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/FramebufferVk.h b/src/libANGLE/renderer/vulkan/FramebufferVk.h
index b3ccefe..3ebbf0b 100644
--- a/src/libANGLE/renderer/vulkan/FramebufferVk.h
+++ b/src/libANGLE/renderer/vulkan/FramebufferVk.h
@@ -84,12 +84,8 @@
gl::Error getSamplePosition(size_t index, GLfloat *xy) const override;
- gl::Error beginRenderPass(const gl::Context *context,
- RendererVk *rendererVk,
- vk::CommandBuffer *commandBuffer,
- Serial queueSerial);
-
const vk::RenderPassDesc &getRenderPassDesc(const gl::Context *context);
+ gl::Error getRenderNode(const gl::Context *context, vk::CommandBufferNode **nodeOut);
private:
FramebufferVk(const gl::FramebufferState &state);
@@ -102,6 +98,7 @@
Optional<vk::RenderPassDesc> mRenderPassDesc;
vk::Framebuffer mFramebuffer;
+ bool mRenderNodeDirty;
};
} // namespace rx