From 85559d1fd9bb47484467b92d1d97411567841bfc Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Fri, 16 Dec 2016 06:10:24 +0100 Subject: [PATCH] vulkan: Split out command pool This way we can pass the command pool around. And that allows us to allocate and submitcustom buffers. And that is necessary to make staging images work. --- gsk/Makefile.am | 2 + gsk/gskvulkancommandpool.c | 104 ++++++++++++++++++++++++++++++ gsk/gskvulkancommandpoolprivate.h | 22 +++++++ gsk/gskvulkanimage.c | 69 ++++++++++++-------- gsk/gskvulkanimageprivate.h | 4 +- gsk/gskvulkanrender.c | 89 ++++++------------------- gsk/gskvulkanrenderer.c | 10 ++- gsk/gskvulkanrendererprivate.h | 2 +- gsk/gskvulkanrenderpass.c | 22 +++---- gsk/gskvulkanrenderpassprivate.h | 3 +- 10 files changed, 210 insertions(+), 117 deletions(-) create mode 100644 gsk/gskvulkancommandpool.c create mode 100644 gsk/gskvulkancommandpoolprivate.h diff --git a/gsk/Makefile.am b/gsk/Makefile.am index 395997035d..beadbf3996 100644 --- a/gsk/Makefile.am +++ b/gsk/Makefile.am @@ -25,6 +25,7 @@ noinst_LTLIBRARIES = if HAVE_VULKAN gsk_private_vulan_source_h = \ gskvulkanbufferprivate.h \ + gskvulkancommandpoolprivate.h \ gskvulkanimageprivate.h \ gskvulkanmemoryprivate.h \ gskvulkanpipelineprivate.h \ @@ -35,6 +36,7 @@ gsk_private_vulan_source_h = \ gskvulkanshaderprivate.h gsk_private_vulkan_source_c = \ gskvulkanbuffer.c \ + gskvulkancommandpool.c \ gskvulkanimage.c \ gskvulkanmemory.c \ gskvulkanpipeline.c \ diff --git a/gsk/gskvulkancommandpool.c b/gsk/gskvulkancommandpool.c new file mode 100644 index 0000000000..218a8c92fc --- /dev/null +++ b/gsk/gskvulkancommandpool.c @@ -0,0 +1,104 @@ +#include "config.h" + +#include "gskvulkancommandpoolprivate.h" +#include "gskvulkanpipelineprivate.h" + +struct _GskVulkanCommandPool +{ + GdkVulkanContext *vulkan; + + VkCommandPool vk_command_pool; +}; + +GskVulkanCommandPool * +gsk_vulkan_command_pool_new (GdkVulkanContext *context) +{ + GskVulkanCommandPool *self; + + self = g_slice_new0 (GskVulkanCommandPool); + + self->vulkan = g_object_ref (context); + + GSK_VK_CHECK (vkCreateCommandPool, gdk_vulkan_context_get_device (context), + &(const VkCommandPoolCreateInfo) { + .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, + .queueFamilyIndex = gdk_vulkan_context_get_queue_family_index (self->vulkan), + .flags = 0 + }, + NULL, + &self->vk_command_pool); + + return self; +} + +void +gsk_vulkan_command_pool_free (GskVulkanCommandPool *self) +{ + vkDestroyCommandPool (gdk_vulkan_context_get_device (self->vulkan), + self->vk_command_pool, + NULL); + + g_slice_free (GskVulkanCommandPool, self); +} + +void +gsk_vulkan_command_pool_reset (GskVulkanCommandPool *self) +{ + GSK_VK_CHECK (vkResetCommandPool, gdk_vulkan_context_get_device (self->vulkan), + self->vk_command_pool, + 0); +} + +VkCommandBuffer +gsk_vulkan_command_pool_get_buffer (GskVulkanCommandPool *self) +{ + VkCommandBuffer command_buffer; + + GSK_VK_CHECK (vkAllocateCommandBuffers, gdk_vulkan_context_get_device (self->vulkan), + &(VkCommandBufferAllocateInfo) { + .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, + .commandPool = self->vk_command_pool, + .level = VK_COMMAND_BUFFER_LEVEL_PRIMARY, + .commandBufferCount = 1, + }, + &command_buffer); + + GSK_VK_CHECK (vkBeginCommandBuffer, command_buffer, + &(VkCommandBufferBeginInfo) { + .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, + .flags = 0 + }); + + return command_buffer; +} + +void +gsk_vulkan_command_pool_submit_buffer (GskVulkanCommandPool *self, + VkCommandBuffer command_buffer, + VkFence fence) +{ + GSK_VK_CHECK (vkEndCommandBuffer, command_buffer); + + GSK_VK_CHECK (vkQueueSubmit, gdk_vulkan_context_get_queue (self->vulkan), + 1, + &(VkSubmitInfo) { + .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO, + .waitSemaphoreCount = 1, + .pWaitSemaphores = (VkSemaphore[1]) { + gdk_vulkan_context_get_draw_semaphore (self->vulkan) + }, + .pWaitDstStageMask = (VkPipelineStageFlags []) { + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, + }, + .commandBufferCount = 1, + .pCommandBuffers = (VkCommandBuffer[1]) { + command_buffer + }, + .signalSemaphoreCount = 1, + .pSignalSemaphores = (VkSemaphore[1]) { + gdk_vulkan_context_get_draw_semaphore (self->vulkan) + } + }, + fence); +} + diff --git a/gsk/gskvulkancommandpoolprivate.h b/gsk/gskvulkancommandpoolprivate.h new file mode 100644 index 0000000000..037390812b --- /dev/null +++ b/gsk/gskvulkancommandpoolprivate.h @@ -0,0 +1,22 @@ +#ifndef __GSK_VULKAN_COMMAND_POOL_PRIVATE_H__ +#define __GSK_VULKAN_COMMAND_POOL_PRIVATE_H__ + +#include + +G_BEGIN_DECLS + +typedef struct _GskVulkanCommandPool GskVulkanCommandPool; + +GskVulkanCommandPool * gsk_vulkan_command_pool_new (GdkVulkanContext *context); +void gsk_vulkan_command_pool_free (GskVulkanCommandPool *self); + +void gsk_vulkan_command_pool_reset (GskVulkanCommandPool *self); + +VkCommandBuffer gsk_vulkan_command_pool_get_buffer (GskVulkanCommandPool *self); +void gsk_vulkan_command_pool_submit_buffer (GskVulkanCommandPool *self, + VkCommandBuffer buffer, + VkFence fence); + +G_END_DECLS + +#endif /* __GSK_VULKAN_COMMAND_POOL_PRIVATE_H__ */ diff --git a/gsk/gskvulkanimage.c b/gsk/gskvulkanimage.c index 4b4b381010..f65b021fe4 100644 --- a/gsk/gskvulkanimage.c +++ b/gsk/gskvulkanimage.c @@ -139,15 +139,16 @@ gsk_vulkan_image_ensure_view (GskVulkanImage *self, } GskVulkanImage * -gsk_vulkan_image_new_from_data_via_staging_buffer (GdkVulkanContext *context, - VkCommandBuffer command_buffer, - guchar *data, - gsize width, - gsize height, - gsize stride) +gsk_vulkan_image_new_from_data_via_staging_buffer (GdkVulkanContext *context, + GskVulkanCommandPool *command_pool, + guchar *data, + gsize width, + gsize height, + gsize stride) { GskVulkanImage *self; GskVulkanBuffer *staging; + VkCommandBuffer command_buffer; guchar *mem; staging = gsk_vulkan_buffer_new_staging (context, width * height * 4); @@ -174,6 +175,8 @@ gsk_vulkan_image_new_from_data_via_staging_buffer (GdkVulkanContext *context, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + command_buffer = gsk_vulkan_command_pool_get_buffer (command_pool); + vkCmdPipelineBarrier (command_buffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, @@ -249,6 +252,8 @@ gsk_vulkan_image_new_from_data_via_staging_buffer (GdkVulkanContext *context, } }); + gsk_vulkan_command_pool_submit_buffer (command_pool, command_buffer, VK_NULL_HANDLE); + /* XXX: Is this okay or do we need to keep the staging image around until the commands execute */ gsk_vulkan_buffer_free (staging); @@ -258,14 +263,15 @@ gsk_vulkan_image_new_from_data_via_staging_buffer (GdkVulkanContext *context, } GskVulkanImage * -gsk_vulkan_image_new_from_data_via_staging_image (GdkVulkanContext *context, - VkCommandBuffer command_buffer, - guchar *data, - gsize width, - gsize height, - gsize stride) +gsk_vulkan_image_new_from_data_via_staging_image (GdkVulkanContext *context, + GskVulkanCommandPool *command_pool, + guchar *data, + gsize width, + gsize height, + gsize stride) { GskVulkanImage *self, *staging; + VkCommandBuffer command_buffer; staging = gsk_vulkan_image_new (context, width, @@ -283,6 +289,8 @@ gsk_vulkan_image_new_from_data_via_staging_image (GdkVulkanContext *context, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + command_buffer = gsk_vulkan_command_pool_get_buffer (command_pool); + vkCmdPipelineBarrier (command_buffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, @@ -380,6 +388,8 @@ gsk_vulkan_image_new_from_data_via_staging_image (GdkVulkanContext *context, } }); + gsk_vulkan_command_pool_submit_buffer (command_pool, command_buffer, VK_NULL_HANDLE); + /* XXX: Is this okay or do we need to keep the staging image around until the commands execute */ g_object_unref (staging); @@ -389,15 +399,18 @@ gsk_vulkan_image_new_from_data_via_staging_image (GdkVulkanContext *context, } GskVulkanImage * -gsk_vulkan_image_new_from_data_directly (GdkVulkanContext *context, - VkCommandBuffer command_buffer, - guchar *data, - gsize width, - gsize height, - gsize stride) +gsk_vulkan_image_new_from_data_directly (GdkVulkanContext *context, + GskVulkanCommandPool *command_pool, + guchar *data, + gsize width, + gsize height, + gsize stride) { + VkCommandBuffer command_buffer; GskVulkanImage *self; + command_buffer = gsk_vulkan_command_pool_get_buffer (command_pool); + self = gsk_vulkan_image_new (context, width, height, @@ -433,25 +446,27 @@ gsk_vulkan_image_new_from_data_directly (GdkVulkanContext *context, } }); + gsk_vulkan_command_pool_submit_buffer (command_pool, command_buffer, VK_NULL_HANDLE); + gsk_vulkan_image_ensure_view (self, VK_FORMAT_B8G8R8A8_SRGB); return self; } GskVulkanImage * -gsk_vulkan_image_new_from_data (GdkVulkanContext *context, - VkCommandBuffer command_buffer, - guchar *data, - gsize width, - gsize height, - gsize stride) +gsk_vulkan_image_new_from_data (GdkVulkanContext *context, + GskVulkanCommandPool *command_pool, + guchar *data, + gsize width, + gsize height, + gsize stride) { if (GSK_RENDER_MODE_CHECK (STAGING_BUFFER)) - return gsk_vulkan_image_new_from_data_via_staging_buffer (context, command_buffer, data, width, height, stride); + return gsk_vulkan_image_new_from_data_via_staging_buffer (context, command_pool, data, width, height, stride); if (GSK_RENDER_MODE_CHECK (STAGING_IMAGE)) - return gsk_vulkan_image_new_from_data_via_staging_image (context, command_buffer, data, width, height, stride); + return gsk_vulkan_image_new_from_data_via_staging_image (context, command_pool, data, width, height, stride); else - return gsk_vulkan_image_new_from_data_directly (context, command_buffer, data, width, height, stride); + return gsk_vulkan_image_new_from_data_directly (context, command_pool, data, width, height, stride); } GskVulkanImage * diff --git a/gsk/gskvulkanimageprivate.h b/gsk/gskvulkanimageprivate.h index 1c43d9aa9b..3d6668e347 100644 --- a/gsk/gskvulkanimageprivate.h +++ b/gsk/gskvulkanimageprivate.h @@ -3,6 +3,8 @@ #include +#include "gsk/gskvulkancommandpoolprivate.h" + G_BEGIN_DECLS #define GSK_TYPE_VULKAN_IMAGE (gsk_vulkan_image_get_type ()) @@ -15,7 +17,7 @@ GskVulkanImage * gsk_vulkan_image_new_for_swapchain (GdkVulk gsize width, gsize height); GskVulkanImage * gsk_vulkan_image_new_from_data (GdkVulkanContext *context, - VkCommandBuffer command_buffer, + GskVulkanCommandPool *pool, guchar *data, gsize width, gsize height, diff --git a/gsk/gskvulkanrender.c b/gsk/gskvulkanrender.c index 9eec621484..dffd20d256 100644 --- a/gsk/gskvulkanrender.c +++ b/gsk/gskvulkanrender.c @@ -4,6 +4,7 @@ #include "gskrendererprivate.h" #include "gskvulkanbufferprivate.h" +#include "gskvulkancommandpoolprivate.h" #include "gskvulkanpipelineprivate.h" #include "gskvulkanrenderpassprivate.h" @@ -24,7 +25,7 @@ struct _GskVulkanRender VkRect2D scissor; GHashTable *framebuffers; - VkCommandPool command_pool; + GskVulkanCommandPool *command_pool; VkFence fence; VkRenderPass render_pass; GskVulkanPipelineLayout *layout; @@ -36,8 +37,6 @@ struct _GskVulkanRender gsize n_descriptor_sets; GskVulkanPipeline *pipelines[GSK_VULKAN_N_PIPELINES]; - VkCommandBuffer command_buffer; - GskVulkanImage *target; GSList *render_passes; @@ -87,15 +86,7 @@ gsk_vulkan_render_new (GskRenderer *renderer, device = gdk_vulkan_context_get_device (self->vulkan); - GSK_VK_CHECK (vkCreateCommandPool, device, - &(const VkCommandPoolCreateInfo) { - .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, - .queueFamilyIndex = gdk_vulkan_context_get_queue_family_index (self->vulkan), - .flags = 0 - }, - NULL, - &self->command_pool); - + self->command_pool = gsk_vulkan_command_pool_new (self->vulkan); GSK_VK_CHECK (vkCreateFence, device, &(VkFenceCreateInfo) { .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, @@ -244,7 +235,7 @@ gsk_vulkan_render_upload (GskVulkanRender *self) for (l = self->render_passes; l; l = l->next) { - gsk_vulkan_render_pass_upload (l->data, self, self->command_buffer); + gsk_vulkan_render_pass_upload (l->data, self, self->command_pool); } } @@ -437,13 +428,16 @@ gsk_vulkan_render_draw (GskVulkanRender *self, VkSampler sampler) { GskVulkanBuffer *buffer; + VkCommandBuffer command_buffer; GSList *l; gsk_vulkan_render_prepare_descriptor_sets (self, sampler); + command_buffer = gsk_vulkan_command_pool_get_buffer (self->command_pool); + buffer = gsk_vulkan_render_collect_vertices (self); - vkCmdSetViewport (self->command_buffer, + vkCmdSetViewport (command_buffer, 0, 1, &(VkViewport) { @@ -455,12 +449,12 @@ gsk_vulkan_render_draw (GskVulkanRender *self, .maxDepth = 1 }); - vkCmdSetScissor (self->command_buffer, + vkCmdSetScissor (command_buffer, 0, 1, &self->scissor); - vkCmdBeginRenderPass (self->command_buffer, + vkCmdBeginRenderPass (command_buffer, &(VkRenderPassBeginInfo) { .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, .renderPass = self->render_pass, @@ -476,7 +470,7 @@ gsk_vulkan_render_draw (GskVulkanRender *self, }, VK_SUBPASS_CONTENTS_INLINE); - vkCmdBindVertexBuffers (self->command_buffer, + vkCmdBindVertexBuffers (command_buffer, 0, 1, (VkBuffer[1]) { @@ -486,38 +480,14 @@ gsk_vulkan_render_draw (GskVulkanRender *self, for (l = self->render_passes; l; l = l->next) { - gsk_vulkan_render_pass_draw (l->data, self, self->layout, self->command_buffer); + gsk_vulkan_render_pass_draw (l->data, self, self->layout, command_buffer); } - vkCmdEndRenderPass (self->command_buffer); + vkCmdEndRenderPass (command_buffer); + + gsk_vulkan_command_pool_submit_buffer (self->command_pool, command_buffer, self->fence); gsk_vulkan_buffer_free (buffer); -} - -void -gsk_vulkan_render_submit (GskVulkanRender *self) -{ - GSK_VK_CHECK (vkEndCommandBuffer, self->command_buffer); - - GSK_VK_CHECK (vkQueueSubmit, gdk_vulkan_context_get_queue (self->vulkan), - 1, - &(VkSubmitInfo) { - .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO, - .waitSemaphoreCount = 1, - .pWaitSemaphores = (VkSemaphore[1]) { - gdk_vulkan_context_get_draw_semaphore (self->vulkan) - }, - .pWaitDstStageMask = (VkPipelineStageFlags []) { - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, - }, - .commandBufferCount = 1, - .pCommandBuffers = &self->command_buffer, - .signalSemaphoreCount = 1, - .pSignalSemaphores = (VkSemaphore[1]) { - gdk_vulkan_context_get_draw_semaphore (self->vulkan) - } - }, - self->fence); if (GSK_RENDER_MODE_CHECK (SYNC)) { @@ -544,9 +514,8 @@ gsk_vulkan_render_cleanup (GskVulkanRender *self) GSK_VK_CHECK (vkResetFences, device, 1, &self->fence); - GSK_VK_CHECK (vkResetCommandPool, device, - self->command_pool, - 0); + + gsk_vulkan_command_pool_reset (self->command_pool); g_hash_table_remove_all (self->descriptor_set_indexes); @@ -602,9 +571,8 @@ gsk_vulkan_render_free (GskVulkanRender *self) vkDestroyFence (device, self->fence, NULL); - vkDestroyCommandPool (device, - self->command_pool, - NULL); + + gsk_vulkan_command_pool_free (self->command_pool); g_slice_free (GskVulkanRender, self); } @@ -619,30 +587,11 @@ void gsk_vulkan_render_reset (GskVulkanRender *self, GskVulkanImage *target) { - VkDevice device; - gsk_vulkan_render_cleanup (self); self->target = g_object_ref (target); gsk_vulkan_render_compute_mvp (self); - - device = gdk_vulkan_context_get_device (self->vulkan); - - GSK_VK_CHECK (vkAllocateCommandBuffers, device, - &(VkCommandBufferAllocateInfo) { - .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, - .commandPool = self->command_pool, - .level = VK_COMMAND_BUFFER_LEVEL_PRIMARY, - .commandBufferCount = 1, - }, - &self->command_buffer); - - GSK_VK_CHECK (vkBeginCommandBuffer, self->command_buffer, - &(VkCommandBufferBeginInfo) { - .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, - .flags = 0 - }); } GskRenderer * diff --git a/gsk/gskvulkanrenderer.c b/gsk/gskvulkanrenderer.c index 08e94fc1c7..cf550b3fea 100644 --- a/gsk/gskvulkanrenderer.c +++ b/gsk/gskvulkanrenderer.c @@ -196,8 +196,6 @@ gsk_vulkan_renderer_render (GskRenderer *renderer, gsk_vulkan_render_draw (render, self->sampler); - gsk_vulkan_render_submit (render); - #ifdef G_ENABLE_DEBUG cpu_time = gsk_profiler_timer_end (profiler, self->profile_timers.cpu_time); gsk_profiler_timer_set (profiler, self->profile_timers.cpu_time, cpu_time); @@ -271,9 +269,9 @@ gsk_vulkan_renderer_clear_texture (gpointer p) } GskVulkanImage * -gsk_vulkan_renderer_ref_texture_image (GskVulkanRenderer *self, - GskTexture *texture, - VkCommandBuffer command_buffer) +gsk_vulkan_renderer_ref_texture_image (GskVulkanRenderer *self, + GskTexture *texture, + GskVulkanCommandPool *command_pool) { GskVulkanTextureData *data; cairo_surface_t *surface; @@ -285,7 +283,7 @@ gsk_vulkan_renderer_ref_texture_image (GskVulkanRenderer *self, surface = gsk_texture_download (texture); image = gsk_vulkan_image_new_from_data (self->vulkan, - command_buffer, + command_pool, cairo_image_surface_get_data (surface), cairo_image_surface_get_width (surface), cairo_image_surface_get_height (surface), diff --git a/gsk/gskvulkanrendererprivate.h b/gsk/gskvulkanrendererprivate.h index c3485f76b3..982983a777 100644 --- a/gsk/gskvulkanrendererprivate.h +++ b/gsk/gskvulkanrendererprivate.h @@ -23,7 +23,7 @@ GType gsk_vulkan_renderer_get_type (void) G_GNUC_CONST; GskVulkanImage * gsk_vulkan_renderer_ref_texture_image (GskVulkanRenderer *self, GskTexture *texture, - VkCommandBuffer command_buffer); + GskVulkanCommandPool *command_pool); G_END_DECLS diff --git a/gsk/gskvulkanrenderpass.c b/gsk/gskvulkanrenderpass.c index 81912dd8be..6e1461c5df 100644 --- a/gsk/gskvulkanrenderpass.c +++ b/gsk/gskvulkanrenderpass.c @@ -173,10 +173,10 @@ gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, } static void -gsk_vulkan_render_pass_upload_fallback (GskVulkanRenderPass *self, - GskVulkanOpRender *op, - GskVulkanRender *render, - VkCommandBuffer command_buffer) +gsk_vulkan_render_pass_upload_fallback (GskVulkanRenderPass *self, + GskVulkanOpRender *op, + GskVulkanRender *render, + GskVulkanCommandPool *command_pool) { graphene_rect_t bounds; cairo_surface_t *surface; @@ -195,7 +195,7 @@ gsk_vulkan_render_pass_upload_fallback (GskVulkanRenderPass *self, cairo_destroy (cr); op->source = gsk_vulkan_image_new_from_data (self->vulkan, - command_buffer, + command_pool, cairo_image_surface_get_data (surface), cairo_image_surface_get_width (surface), cairo_image_surface_get_height (surface), @@ -207,9 +207,9 @@ gsk_vulkan_render_pass_upload_fallback (GskVulkanRenderPass *self, } void -gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, - GskVulkanRender *render, - VkCommandBuffer command_buffer) +gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, + GskVulkanRender *render, + GskVulkanCommandPool *command_pool) { GskVulkanOp *op; guint i; @@ -221,14 +221,14 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, switch (op->type) { case GSK_VULKAN_OP_FALLBACK: - gsk_vulkan_render_pass_upload_fallback (self, &op->render, render, command_buffer); + gsk_vulkan_render_pass_upload_fallback (self, &op->render, render, command_pool); break; case GSK_VULKAN_OP_SURFACE: { cairo_surface_t *surface = gsk_cairo_node_get_surface (op->render.node); op->render.source = gsk_vulkan_image_new_from_data (self->vulkan, - command_buffer, + command_pool, cairo_image_surface_get_data (surface), cairo_image_surface_get_width (surface), cairo_image_surface_get_height (surface), @@ -241,7 +241,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, { op->render.source = gsk_vulkan_renderer_ref_texture_image (GSK_VULKAN_RENDERER (gsk_vulkan_render_get_renderer (render)), gsk_texture_node_get_texture (op->render.node), - command_buffer); + command_pool); gsk_vulkan_render_add_cleanup_image (render, op->render.source); } break; diff --git a/gsk/gskvulkanrenderpassprivate.h b/gsk/gskvulkanrenderpassprivate.h index 0ce7b8d385..7d5478dabc 100644 --- a/gsk/gskvulkanrenderpassprivate.h +++ b/gsk/gskvulkanrenderpassprivate.h @@ -4,6 +4,7 @@ #include #include +#include "gsk/gskvulkancommandpoolprivate.h" #include "gsk/gskvulkanrenderprivate.h" G_BEGIN_DECLS @@ -20,7 +21,7 @@ void gsk_vulkan_render_pass_add (GskVulk void gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, GskVulkanRender *render, - VkCommandBuffer command_buffer); + GskVulkanCommandPool *command_pool); gsize gsk_vulkan_render_pass_count_vertices (GskVulkanRenderPass *self); gsize gsk_vulkan_render_pass_collect_vertices (GskVulkanRenderPass *self,