vulkan: Remove all the semaphores
They aren't necessary with just one queue.
This commit is contained in:
@@ -107,7 +107,6 @@ gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass,
|
||||
GskVulkanRender *render,
|
||||
const graphene_vec2_t *scale,
|
||||
const graphene_rect_t *viewport,
|
||||
VkSemaphore signal_semaphore,
|
||||
GskRenderNode *node)
|
||||
{
|
||||
GskVulkanOffscreenOp *self;
|
||||
@@ -142,7 +141,7 @@ gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass,
|
||||
&view,
|
||||
clip,
|
||||
node,
|
||||
signal_semaphore);
|
||||
FALSE);
|
||||
|
||||
cairo_region_destroy (clip);
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ GskVulkanImage * gsk_vulkan_offscreen_op (GskVulk
|
||||
GskVulkanRender *render,
|
||||
const graphene_vec2_t *scale,
|
||||
const graphene_rect_t *viewport,
|
||||
VkSemaphore signal_semaphore,
|
||||
GskRenderNode *node);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
@@ -338,7 +338,7 @@ gsk_vulkan_render_add_node (GskVulkanRender *self,
|
||||
&self->viewport,
|
||||
self->clip,
|
||||
node,
|
||||
VK_NULL_HANDLE);
|
||||
TRUE);
|
||||
|
||||
gsk_vulkan_render_verbose_print (self, "start of frame");
|
||||
}
|
||||
@@ -649,13 +649,6 @@ gsk_vulkan_render_draw_pass (GskVulkanRender *self,
|
||||
VkFence fence)
|
||||
{
|
||||
VkCommandBuffer command_buffer;
|
||||
gsize wait_semaphore_count;
|
||||
gsize signal_semaphore_count;
|
||||
VkSemaphore *wait_semaphores;
|
||||
VkSemaphore *signal_semaphores;
|
||||
|
||||
wait_semaphore_count = gsk_vulkan_render_pass_get_wait_semaphores (pass, &wait_semaphores);
|
||||
signal_semaphore_count = gsk_vulkan_render_pass_get_signal_semaphores (pass, &signal_semaphores);
|
||||
|
||||
command_buffer = gsk_vulkan_command_pool_get_buffer (self->command_pool);
|
||||
|
||||
@@ -663,10 +656,10 @@ gsk_vulkan_render_draw_pass (GskVulkanRender *self,
|
||||
|
||||
gsk_vulkan_command_pool_submit_buffer (self->command_pool,
|
||||
command_buffer,
|
||||
wait_semaphore_count,
|
||||
wait_semaphores,
|
||||
signal_semaphore_count,
|
||||
signal_semaphores,
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
fence);
|
||||
}
|
||||
|
||||
|
||||
@@ -60,8 +60,6 @@ struct _GskVulkanRenderPass
|
||||
|
||||
VkRenderPass render_pass;
|
||||
VkFramebuffer framebuffer;
|
||||
VkSemaphore signal_semaphore;
|
||||
GArray *wait_semaphores;
|
||||
GskVulkanBuffer *vertex_data;
|
||||
};
|
||||
|
||||
@@ -93,7 +91,7 @@ gsk_vulkan_render_pass_new (GdkVulkanContext *context,
|
||||
const graphene_rect_t *viewport,
|
||||
cairo_region_t *clip,
|
||||
GskRenderNode *node,
|
||||
VkSemaphore signal_semaphore)
|
||||
gboolean is_root)
|
||||
{
|
||||
GskVulkanRenderPass *self;
|
||||
VkImageLayout final_layout;
|
||||
@@ -107,7 +105,7 @@ gsk_vulkan_render_pass_new (GdkVulkanContext *context,
|
||||
self->viewport = *viewport;
|
||||
graphene_vec2_init_from_vec2 (&self->scale, scale);
|
||||
|
||||
if (signal_semaphore != VK_NULL_HANDLE) // this is a dependent pass
|
||||
if (!is_root) // this is a dependent pass
|
||||
final_layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||
else
|
||||
final_layout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
|
||||
@@ -166,8 +164,6 @@ gsk_vulkan_render_pass_new (GdkVulkanContext *context,
|
||||
NULL,
|
||||
&self->framebuffer);
|
||||
|
||||
self->signal_semaphore = signal_semaphore;
|
||||
self->wait_semaphores = g_array_new (FALSE, FALSE, sizeof (VkSemaphore));
|
||||
self->vertex_data = NULL;
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
@@ -206,9 +202,6 @@ gsk_vulkan_render_pass_free (GskVulkanRenderPass *self)
|
||||
|
||||
if (self->vertex_data)
|
||||
gsk_vulkan_buffer_free (self->vertex_data);
|
||||
if (self->signal_semaphore != VK_NULL_HANDLE)
|
||||
vkDestroySemaphore (device, self->signal_semaphore, NULL);
|
||||
g_array_unref (self->wait_semaphores);
|
||||
|
||||
g_free (self);
|
||||
}
|
||||
@@ -290,7 +283,6 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self,
|
||||
GskRenderNode *node,
|
||||
graphene_rect_t *tex_bounds)
|
||||
{
|
||||
VkSemaphore semaphore;
|
||||
GskVulkanImage *result;
|
||||
|
||||
switch ((guint) gsk_render_node_get_node_type (node))
|
||||
@@ -345,22 +337,11 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self,
|
||||
*/
|
||||
*tex_bounds = clipped;
|
||||
|
||||
vkCreateSemaphore (gdk_vulkan_context_get_device (self->vulkan),
|
||||
&(VkSemaphoreCreateInfo) {
|
||||
VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
|
||||
NULL,
|
||||
0
|
||||
},
|
||||
NULL,
|
||||
&semaphore);
|
||||
g_array_append_val (self->wait_semaphores, semaphore);
|
||||
|
||||
result = gsk_vulkan_offscreen_op (self,
|
||||
self->vulkan,
|
||||
render,
|
||||
&state->scale,
|
||||
&clipped,
|
||||
semaphore,
|
||||
node);
|
||||
|
||||
return result;
|
||||
@@ -968,7 +949,6 @@ gsk_vulkan_render_pass_add_repeat_node (GskVulkanRenderPass *self,
|
||||
GskRenderNode *node)
|
||||
{
|
||||
const graphene_rect_t *child_bounds;
|
||||
VkSemaphore semaphore;
|
||||
GskVulkanImage *image;
|
||||
|
||||
child_bounds = gsk_repeat_node_get_child_bounds (node);
|
||||
@@ -976,26 +956,11 @@ gsk_vulkan_render_pass_add_repeat_node (GskVulkanRenderPass *self,
|
||||
if (graphene_rect_get_area (child_bounds) == 0)
|
||||
return TRUE;
|
||||
|
||||
/* We need to create a texture in the right size so that we can repeat it
|
||||
* properly, so even for texture nodes this step is necessary.
|
||||
* We also can't use the clip because of that. */
|
||||
vkCreateSemaphore (gdk_vulkan_context_get_device (self->vulkan),
|
||||
&(VkSemaphoreCreateInfo) {
|
||||
VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
|
||||
NULL,
|
||||
0
|
||||
},
|
||||
NULL,
|
||||
&semaphore);
|
||||
|
||||
g_array_append_val (self->wait_semaphores, semaphore);
|
||||
|
||||
image = gsk_vulkan_offscreen_op (self,
|
||||
self->vulkan,
|
||||
render,
|
||||
&state->scale,
|
||||
child_bounds,
|
||||
semaphore,
|
||||
gsk_repeat_node_get_child (node));
|
||||
|
||||
gsk_vulkan_texture_op (self,
|
||||
@@ -1488,22 +1453,6 @@ gsk_vulkan_render_pass_get_vertex_data (GskVulkanRenderPass *self,
|
||||
return self->vertex_data;
|
||||
}
|
||||
|
||||
gsize
|
||||
gsk_vulkan_render_pass_get_wait_semaphores (GskVulkanRenderPass *self,
|
||||
VkSemaphore **semaphores)
|
||||
{
|
||||
*semaphores = (VkSemaphore *)self->wait_semaphores->data;
|
||||
return self->wait_semaphores->len;
|
||||
}
|
||||
|
||||
gsize
|
||||
gsk_vulkan_render_pass_get_signal_semaphores (GskVulkanRenderPass *self,
|
||||
VkSemaphore **semaphores)
|
||||
{
|
||||
*semaphores = (VkSemaphore *)&self->signal_semaphore;
|
||||
return self->signal_semaphore != VK_NULL_HANDLE ? 1 : 0;
|
||||
}
|
||||
|
||||
void
|
||||
gsk_vulkan_render_pass_reserve_descriptor_sets (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render)
|
||||
|
||||
@@ -17,7 +17,7 @@ GskVulkanRenderPass * gsk_vulkan_render_pass_new (GdkVulk
|
||||
const graphene_rect_t *viewport,
|
||||
cairo_region_t *clip,
|
||||
GskRenderNode *node,
|
||||
VkSemaphore signal_semaphore);
|
||||
gboolean is_root);
|
||||
|
||||
void gsk_vulkan_render_pass_free (GskVulkanRenderPass *self);
|
||||
|
||||
@@ -37,10 +37,6 @@ void gsk_vulkan_render_pass_draw (GskVulk
|
||||
GskVulkanRender *render,
|
||||
VkPipelineLayout pipeline_layout,
|
||||
VkCommandBuffer command_buffer);
|
||||
gsize gsk_vulkan_render_pass_get_wait_semaphores (GskVulkanRenderPass *self,
|
||||
VkSemaphore **semaphores);
|
||||
gsize gsk_vulkan_render_pass_get_signal_semaphores (GskVulkanRenderPass *self,
|
||||
VkSemaphore **semaphores);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
||||
Reference in New Issue
Block a user