[gtk+/wip/otte/rendernode: 81/100] vulkan: Split out command pool
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/otte/rendernode: 81/100] vulkan: Split out command pool
- Date: Sun, 18 Dec 2016 06:35:30 +0000 (UTC)
commit d8f909bf6eed521785b1f63e1dd7daea134c0d04
Author: Benjamin Otte <otte redhat com>
Date: Fri Dec 16 06:10:24 2016 +0100
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(-)
---
diff --git a/gsk/Makefile.am b/gsk/Makefile.am
index 3959970..beadbf3 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 0000000..218a8c9
--- /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 0000000..0373908
--- /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 <gdk/gdk.h>
+
+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 4b4b381..f65b021 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 1c43d9a..3d6668e 100644
--- a/gsk/gskvulkanimageprivate.h
+++ b/gsk/gskvulkanimageprivate.h
@@ -3,6 +3,8 @@
#include <gdk/gdk.h>
+#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 9eec621..dffd20d 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);
-
- gsk_vulkan_buffer_free (buffer);
-}
+ vkCmdEndRenderPass (command_buffer);
-void
-gsk_vulkan_render_submit (GskVulkanRender *self)
-{
- GSK_VK_CHECK (vkEndCommandBuffer, self->command_buffer);
+ gsk_vulkan_command_pool_submit_buffer (self->command_pool, command_buffer, self->fence);
- 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);
+ gsk_vulkan_buffer_free (buffer);
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 08e94fc..cf550b3 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 c3485f7..982983a 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 81912dd..6e1461c 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 0ce7b8d..7d5478d 100644
--- a/gsk/gskvulkanrenderpassprivate.h
+++ b/gsk/gskvulkanrenderpassprivate.h
@@ -4,6 +4,7 @@
#include <gdk/gdk.h>
#include <gsk/gskrendernode.h>
+#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,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]