]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/commands_backend.h
Use secondary command buffers to record render pass contents
[libs/gl.git] / source / backends / vulkan / commands_backend.h
index 994acca2df342cea6724c4812cd923f3ed34bd3f..f96a441c434c5375cc8d0af4df25232ee39a128f 100644 (file)
@@ -21,12 +21,18 @@ class SwapChain;
 class VulkanCommands
 {
 protected:
+       struct CommandBuffers
+       {
+               std::vector<VkCommandBuffer> buffers;
+               unsigned next_buffer = 0;
+       };
+
        struct CommandPool
        {
                Device &device;
                VkCommandPool pool = 0;
-               std::vector<VkCommandBuffer> buffers;
-               unsigned next_buffer = 0;
+               CommandBuffers primary;
+               CommandBuffers secondary;
                Fence fence;
                bool in_use = false;
                
@@ -38,16 +44,18 @@ protected:
        Device &device;
        std::vector<CommandPool> command_pools;
        CommandPool *current_pool = 0;
-       VkCommandBuffer current_buffer = 0;
+       VkCommandBuffer primary_buffer = 0;
+       VkCommandBuffer pass_buffer = 0;
        const PipelineState *pipeline_state = 0;
        const Framebuffer *framebuffer = 0;
        const Rect *viewport = 0;
        bool fb_is_swapchain = false;
+       std::vector<char> pass_begin_info;
 
        VulkanCommands();
        ~VulkanCommands();
 
-       void begin_buffer();
+       void begin_buffer(VkRenderPass);
        void begin_render_pass(bool, const ClearValue *);
        void end_render_pass();