diff --git a/gsk/vulkan/gskvulkanblendmodeop.c b/gsk/vulkan/gskvulkanblendmodeop.c index f839e64571..2bebd37f88 100644 --- a/gsk/vulkan/gskvulkanblendmodeop.c +++ b/gsk/vulkan/gskvulkanblendmodeop.c @@ -107,7 +107,7 @@ static const GskVulkanShaderOpClass GSK_VULKAN_BLEND_MODE_OP_CLASS = { }; void -gsk_vulkan_blend_mode_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_blend_mode_op (GskVulkanRender *render, const char *clip_type, const graphene_rect_t *bounds, const graphene_point_t *offset, @@ -121,7 +121,7 @@ gsk_vulkan_blend_mode_op (GskVulkanRenderPass *render_pass, { GskVulkanBlendModeOp *self; - self = (GskVulkanBlendModeOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_BLEND_MODE_OP_CLASS); + self = (GskVulkanBlendModeOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_BLEND_MODE_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); graphene_rect_offset_r (bounds, offset->x, offset->y, &self->bounds); diff --git a/gsk/vulkan/gskvulkanblendmodeopprivate.h b/gsk/vulkan/gskvulkanblendmodeopprivate.h index 2a2b7c76c5..418c5f2649 100644 --- a/gsk/vulkan/gskvulkanblendmodeopprivate.h +++ b/gsk/vulkan/gskvulkanblendmodeopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_blend_mode_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_blend_mode_op (GskVulkanRender *render, const char *clip_type, const graphene_rect_t *bounds, const graphene_point_t *offset, diff --git a/gsk/vulkan/gskvulkanblurop.c b/gsk/vulkan/gskvulkanblurop.c index 048092b047..caa3710a2a 100644 --- a/gsk/vulkan/gskvulkanblurop.c +++ b/gsk/vulkan/gskvulkanblurop.c @@ -81,7 +81,7 @@ static const GskVulkanOpClass GSK_VULKAN_BLUR_OP_CLASS = { }; void -gsk_vulkan_blur_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_blur_op (GskVulkanRender *render, const char *clip_type, GskVulkanImage *image, const graphene_rect_t *rect, @@ -93,7 +93,7 @@ gsk_vulkan_blur_op (GskVulkanRenderPass *render_pass, g_assert (radius > 0); - self = (GskVulkanBlurOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_BLUR_OP_CLASS); + self = (GskVulkanBlurOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_BLUR_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); self->image = g_object_ref (image); diff --git a/gsk/vulkan/gskvulkanbluropprivate.h b/gsk/vulkan/gskvulkanbluropprivate.h index 6419811d47..24a90a7195 100644 --- a/gsk/vulkan/gskvulkanbluropprivate.h +++ b/gsk/vulkan/gskvulkanbluropprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_blur_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_blur_op (GskVulkanRender *render, const char *clip_type, GskVulkanImage *image, const graphene_rect_t *rect, diff --git a/gsk/vulkan/gskvulkanborderop.c b/gsk/vulkan/gskvulkanborderop.c index 5a5adf21fe..c65c2f312c 100644 --- a/gsk/vulkan/gskvulkanborderop.c +++ b/gsk/vulkan/gskvulkanborderop.c @@ -97,7 +97,7 @@ static const GskVulkanOpClass GSK_VULKAN_BORDER_OP_CLASS = { }; void -gsk_vulkan_border_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_border_op (GskVulkanRender *render, const char *clip_type, const GskRoundedRect *outline, const graphene_point_t *offset, @@ -107,7 +107,7 @@ gsk_vulkan_border_op (GskVulkanRenderPass *render_pass, GskVulkanBorderOp *self; guint i; - self = (GskVulkanBorderOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_BORDER_OP_CLASS); + self = (GskVulkanBorderOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_BORDER_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); self->outline = *outline; diff --git a/gsk/vulkan/gskvulkanborderopprivate.h b/gsk/vulkan/gskvulkanborderopprivate.h index e8843a6476..85985e4a7a 100644 --- a/gsk/vulkan/gskvulkanborderopprivate.h +++ b/gsk/vulkan/gskvulkanborderopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_border_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_border_op (GskVulkanRender *render, const char *clip_type, const GskRoundedRect *outline, const graphene_point_t *offset, diff --git a/gsk/vulkan/gskvulkancolormatrixop.c b/gsk/vulkan/gskvulkancolormatrixop.c index 27e6c4fbb8..8129af097e 100644 --- a/gsk/vulkan/gskvulkancolormatrixop.c +++ b/gsk/vulkan/gskvulkancolormatrixop.c @@ -88,7 +88,7 @@ static const GskVulkanOpClass GSK_VULKAN_COLOR_MATRIX_OP_CLASS = { }; void -gsk_vulkan_color_matrix_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_color_matrix_op (GskVulkanRender *render, const char *clip_type, GskVulkanImage *image, const graphene_rect_t *rect, @@ -99,7 +99,7 @@ gsk_vulkan_color_matrix_op (GskVulkanRenderPass *render_pass, { GskVulkanColorMatrixOp *self; - self = (GskVulkanColorMatrixOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_COLOR_MATRIX_OP_CLASS); + self = (GskVulkanColorMatrixOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_COLOR_MATRIX_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); self->image = g_object_ref (image); @@ -110,7 +110,7 @@ gsk_vulkan_color_matrix_op (GskVulkanRenderPass *render_pass, } void -gsk_vulkan_color_matrix_op_opacity (GskVulkanRenderPass *render_pass, +gsk_vulkan_color_matrix_op_opacity (GskVulkanRender *render, const char *clip_type, GskVulkanImage *image, const graphene_rect_t *rect, @@ -130,7 +130,7 @@ gsk_vulkan_color_matrix_op_opacity (GskVulkanRenderPass *render_pass, }); graphene_vec4_init (&color_offset, 0.0, 0.0, 0.0, 0.0); - gsk_vulkan_color_matrix_op (render_pass, + gsk_vulkan_color_matrix_op (render, clip_type, image, rect, diff --git a/gsk/vulkan/gskvulkancolormatrixopprivate.h b/gsk/vulkan/gskvulkancolormatrixopprivate.h index e5d4cf4c62..e50cdbf10b 100644 --- a/gsk/vulkan/gskvulkancolormatrixopprivate.h +++ b/gsk/vulkan/gskvulkancolormatrixopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_color_matrix_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_color_matrix_op (GskVulkanRender *render, const char *clip_type, GskVulkanImage *image, const graphene_rect_t *rect, @@ -13,7 +13,7 @@ void gsk_vulkan_color_matrix_op (GskVulk const graphene_matrix_t *color_matrix, const graphene_vec4_t *color_offset); -void gsk_vulkan_color_matrix_op_opacity (GskVulkanRenderPass *render_pass, +void gsk_vulkan_color_matrix_op_opacity (GskVulkanRender *render, const char *clip_type, GskVulkanImage *image, const graphene_rect_t *rect, diff --git a/gsk/vulkan/gskvulkancolorop.c b/gsk/vulkan/gskvulkancolorop.c index 7a2ca016ad..8458c91d55 100644 --- a/gsk/vulkan/gskvulkancolorop.c +++ b/gsk/vulkan/gskvulkancolorop.c @@ -79,7 +79,7 @@ static const GskVulkanOpClass GSK_VULKAN_COLOR_OP_CLASS = { }; void -gsk_vulkan_color_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_color_op (GskVulkanRender *render, const char *clip_type, const graphene_rect_t *rect, const graphene_point_t *offset, @@ -87,7 +87,7 @@ gsk_vulkan_color_op (GskVulkanRenderPass *render_pass, { GskVulkanColorOp *self; - self = (GskVulkanColorOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_COLOR_OP_CLASS); + self = (GskVulkanColorOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_COLOR_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); graphene_rect_offset_r (rect, offset->x, offset->y, &self->rect); diff --git a/gsk/vulkan/gskvulkancoloropprivate.h b/gsk/vulkan/gskvulkancoloropprivate.h index 0256c831c7..904141b612 100644 --- a/gsk/vulkan/gskvulkancoloropprivate.h +++ b/gsk/vulkan/gskvulkancoloropprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_color_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_color_op (GskVulkanRender *render, const char *clip_type, const graphene_rect_t *rect, const graphene_point_t *offset, diff --git a/gsk/vulkan/gskvulkancrossfadeop.c b/gsk/vulkan/gskvulkancrossfadeop.c index bd295cc476..c6216a7e16 100644 --- a/gsk/vulkan/gskvulkancrossfadeop.c +++ b/gsk/vulkan/gskvulkancrossfadeop.c @@ -92,7 +92,7 @@ static const GskVulkanOpClass GSK_VULKAN_CROSS_FADE_OP_CLASS = { }; void -gsk_vulkan_cross_fade_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_cross_fade_op (GskVulkanRender *render, const char *clip_type, const graphene_rect_t *bounds, const graphene_point_t *offset, @@ -106,7 +106,7 @@ gsk_vulkan_cross_fade_op (GskVulkanRenderPass *render_pass, { GskVulkanCrossFadeOp *self; - self = (GskVulkanCrossFadeOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_CROSS_FADE_OP_CLASS); + self = (GskVulkanCrossFadeOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_CROSS_FADE_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); graphene_rect_offset_r (bounds, offset->x, offset->y, &self->bounds); diff --git a/gsk/vulkan/gskvulkancrossfadeopprivate.h b/gsk/vulkan/gskvulkancrossfadeopprivate.h index 00f9913182..ec7e1d9260 100644 --- a/gsk/vulkan/gskvulkancrossfadeopprivate.h +++ b/gsk/vulkan/gskvulkancrossfadeopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_cross_fade_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_cross_fade_op (GskVulkanRender *render, const char *clip_type, const graphene_rect_t *bounds, const graphene_point_t *offset, diff --git a/gsk/vulkan/gskvulkanglyphop.c b/gsk/vulkan/gskvulkanglyphop.c index a51afba633..9c3bea7603 100644 --- a/gsk/vulkan/gskvulkanglyphop.c +++ b/gsk/vulkan/gskvulkanglyphop.c @@ -79,7 +79,7 @@ static const GskVulkanOpClass GSK_VULKAN_GLYPH_OP_CLASS = { }; void -gsk_vulkan_glyph_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_glyph_op (GskVulkanRender *render, const char *clip_type, GskVulkanImage *image, const graphene_rect_t *rect, @@ -89,7 +89,7 @@ gsk_vulkan_glyph_op (GskVulkanRenderPass *render_pass, { GskVulkanGlyphOp *self; - self = (GskVulkanGlyphOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_GLYPH_OP_CLASS); + self = (GskVulkanGlyphOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_GLYPH_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); self->image = g_object_ref (image); diff --git a/gsk/vulkan/gskvulkanglyphopprivate.h b/gsk/vulkan/gskvulkanglyphopprivate.h index deb64b902f..74f38832e6 100644 --- a/gsk/vulkan/gskvulkanglyphopprivate.h +++ b/gsk/vulkan/gskvulkanglyphopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_glyph_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_glyph_op (GskVulkanRender *render, const char *clip_type, GskVulkanImage *image, const graphene_rect_t *rect, diff --git a/gsk/vulkan/gskvulkaninsetshadowop.c b/gsk/vulkan/gskvulkaninsetshadowop.c index 7d3078b5c7..8afa86cdb5 100644 --- a/gsk/vulkan/gskvulkaninsetshadowop.c +++ b/gsk/vulkan/gskvulkaninsetshadowop.c @@ -75,7 +75,7 @@ static const GskVulkanOpClass GSK_VULKAN_INSET_SHADOW_OP_CLASS = { }; void -gsk_vulkan_inset_shadow_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_inset_shadow_op (GskVulkanRender *render, const char *clip_type, const GskRoundedRect *outline, const graphene_point_t *offset, @@ -86,7 +86,7 @@ gsk_vulkan_inset_shadow_op (GskVulkanRenderPass *render_pass, { GskVulkanInsetShadowOp *self; - self = (GskVulkanInsetShadowOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_INSET_SHADOW_OP_CLASS); + self = (GskVulkanInsetShadowOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_INSET_SHADOW_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); self->outline = *outline; diff --git a/gsk/vulkan/gskvulkaninsetshadowopprivate.h b/gsk/vulkan/gskvulkaninsetshadowopprivate.h index 1cf5137991..eef7a16cca 100644 --- a/gsk/vulkan/gskvulkaninsetshadowopprivate.h +++ b/gsk/vulkan/gskvulkaninsetshadowopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_inset_shadow_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_inset_shadow_op (GskVulkanRender *render, const char *clip_type, const GskRoundedRect *outline, const graphene_point_t *offset, diff --git a/gsk/vulkan/gskvulkanlineargradientop.c b/gsk/vulkan/gskvulkanlineargradientop.c index 63aec985c5..ff90d01f11 100644 --- a/gsk/vulkan/gskvulkanlineargradientop.c +++ b/gsk/vulkan/gskvulkanlineargradientop.c @@ -87,7 +87,7 @@ static const GskVulkanOpClass GSK_VULKAN_LINEAR_GRADIENT_OP_CLASS = { }; void -gsk_vulkan_linear_gradient_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_linear_gradient_op (GskVulkanRender *render, const char *clip_type, const graphene_rect_t *rect, const graphene_point_t *offset, @@ -99,7 +99,7 @@ gsk_vulkan_linear_gradient_op (GskVulkanRenderPass *render_pass, { GskVulkanLinearGradientOp *self; - self = (GskVulkanLinearGradientOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_LINEAR_GRADIENT_OP_CLASS); + self = (GskVulkanLinearGradientOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_LINEAR_GRADIENT_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); graphene_rect_offset_r (rect, offset->x, offset->y, &self->rect); diff --git a/gsk/vulkan/gskvulkanlineargradientopprivate.h b/gsk/vulkan/gskvulkanlineargradientopprivate.h index 4e8de815a6..ce26f4cf85 100644 --- a/gsk/vulkan/gskvulkanlineargradientopprivate.h +++ b/gsk/vulkan/gskvulkanlineargradientopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_linear_gradient_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_linear_gradient_op (GskVulkanRender *render, const char *clip_type, const graphene_rect_t *rect, const graphene_point_t *offset, diff --git a/gsk/vulkan/gskvulkanmaskop.c b/gsk/vulkan/gskvulkanmaskop.c index 8393809b9a..61227d6271 100644 --- a/gsk/vulkan/gskvulkanmaskop.c +++ b/gsk/vulkan/gskvulkanmaskop.c @@ -103,7 +103,7 @@ static const GskVulkanOpClass GSK_VULKAN_COLOR_MASK_OP_CLASS = { }; void -gsk_vulkan_mask_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_mask_op (GskVulkanRender *render, const char *clip_type, const graphene_point_t *offset, GskVulkanImage *source, @@ -116,7 +116,7 @@ gsk_vulkan_mask_op (GskVulkanRenderPass *render_pass, { GskVulkanMaskOp *self; - self = (GskVulkanMaskOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_COLOR_MASK_OP_CLASS); + self = (GskVulkanMaskOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_COLOR_MASK_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); self->source.image = g_object_ref (source); diff --git a/gsk/vulkan/gskvulkanmaskopprivate.h b/gsk/vulkan/gskvulkanmaskopprivate.h index cc98fc4093..520b3c2daa 100644 --- a/gsk/vulkan/gskvulkanmaskopprivate.h +++ b/gsk/vulkan/gskvulkanmaskopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_mask_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_mask_op (GskVulkanRender *render, const char *clip_type, const graphene_point_t *offset, GskVulkanImage *source, diff --git a/gsk/vulkan/gskvulkanoffscreenop.c b/gsk/vulkan/gskvulkanoffscreenop.c index 8a48ebea6c..a46436733b 100644 --- a/gsk/vulkan/gskvulkanoffscreenop.c +++ b/gsk/vulkan/gskvulkanoffscreenop.c @@ -38,44 +38,31 @@ gsk_vulkan_offscreen_op_print (GskVulkanOp *op, gsk_vulkan_image_get_width (self->image), gsk_vulkan_image_get_height (self->image)); print_newline (string); - - gsk_vulkan_render_pass_print (self->render_pass, string, indent + 1); } static void gsk_vulkan_offscreen_op_upload (GskVulkanOp *op, GskVulkanUploader *uploader) { - GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op; - - gsk_vulkan_render_pass_upload (self->render_pass, uploader); } static gsize gsk_vulkan_offscreen_op_count_vertex_data (GskVulkanOp *op, gsize n_bytes) { - GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op; - - return gsk_vulkan_render_pass_count_vertex_data (self->render_pass, n_bytes); + return n_bytes; } static void gsk_vulkan_offscreen_op_collect_vertex_data (GskVulkanOp *op, guchar *data) { - GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op; - - gsk_vulkan_render_pass_collect_vertex_data (self->render_pass, data); } static void gsk_vulkan_offscreen_op_reserve_descriptor_sets (GskVulkanOp *op, GskVulkanRender *render) { - GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op; - - gsk_vulkan_render_pass_reserve_descriptor_sets (self->render_pass, render); } static GskVulkanOp * @@ -86,9 +73,7 @@ gsk_vulkan_offscreen_op_command (GskVulkanOp *op, { GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op; - gsk_vulkan_render_draw_pass (render, self->render_pass, VK_NULL_HANDLE); - - return op->next; + return gsk_vulkan_render_draw_pass (render, self->render_pass, op->next); } static const GskVulkanOpClass GSK_VULKAN_OFFSCREEN_OP_CLASS = { @@ -166,6 +151,8 @@ gsk_vulkan_offscreen_end_op_command (GskVulkanOp *op, VkPipelineLayout pipeline_layout, VkCommandBuffer command_buffer) { + vkCmdEndRenderPass (command_buffer); + return op->next; } @@ -184,15 +171,15 @@ static const GskVulkanOpClass GSK_VULKAN_OFFSCREEN_END_OP_CLASS = { }; GskVulkanImage * -gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_offscreen_op (GskVulkanRender *render, GdkVulkanContext *context, - GskVulkanRender *render, const graphene_vec2_t *scale, const graphene_rect_t *viewport, GskRenderNode *node) { GskVulkanOffscreenOp *self; GskVulkanOffscreenEndOp *end; + GskVulkanImage *image; graphene_rect_t view; cairo_region_t *clip; float scale_x, scale_y; @@ -204,12 +191,14 @@ gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass, ceil (scale_x * viewport->size.width), ceil (scale_y * viewport->size.height)); - self = (GskVulkanOffscreenOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_OFFSCREEN_OP_CLASS); + image = gsk_vulkan_image_new_for_offscreen (context, + gdk_vulkan_context_get_offscreen_format (context, + gsk_render_node_get_preferred_depth (node)), + view.size.width, view.size.height); - self->image = gsk_vulkan_image_new_for_offscreen (context, - gdk_vulkan_context_get_offscreen_format (context, - gsk_render_node_get_preferred_depth (node)), - view.size.width, view.size.height); + self = (GskVulkanOffscreenOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_OFFSCREEN_OP_CLASS); + + self->image = image; clip = cairo_region_create_rectangle (&(cairo_rectangle_int_t) { 0, 0, @@ -228,9 +217,12 @@ gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass, cairo_region_destroy (clip); - end = (GskVulkanOffscreenEndOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_OFFSCREEN_END_OP_CLASS); + /* This invalidates the self pointer */ + gsk_vulkan_render_pass_add (self->render_pass, render, node); - end->image = g_object_ref (self->image); + end = (GskVulkanOffscreenEndOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_OFFSCREEN_END_OP_CLASS); + + end->image = g_object_ref (image); return self->image; } diff --git a/gsk/vulkan/gskvulkanoffscreenopprivate.h b/gsk/vulkan/gskvulkanoffscreenopprivate.h index 9b2cda1431..52371b565a 100644 --- a/gsk/vulkan/gskvulkanoffscreenopprivate.h +++ b/gsk/vulkan/gskvulkanoffscreenopprivate.h @@ -4,9 +4,8 @@ G_BEGIN_DECLS -GskVulkanImage * gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass, +GskVulkanImage * gsk_vulkan_offscreen_op (GskVulkanRender *render, GdkVulkanContext *context, - GskVulkanRender *render, const graphene_vec2_t *scale, const graphene_rect_t *viewport, GskRenderNode *node); diff --git a/gsk/vulkan/gskvulkanop.c b/gsk/vulkan/gskvulkanop.c index 6ce89a2591..130a61bfe6 100644 --- a/gsk/vulkan/gskvulkanop.c +++ b/gsk/vulkan/gskvulkanop.c @@ -3,13 +3,12 @@ #include "gskvulkanopprivate.h" GskVulkanOp * -gsk_vulkan_op_alloc (GskVulkanRenderPass *render_pass, +gsk_vulkan_op_alloc (GskVulkanRender *render, const GskVulkanOpClass *op_class) { GskVulkanOp *op; - op = gsk_vulkan_render_pass_alloc_op (render_pass, - op_class->size); + op = gsk_vulkan_render_alloc_op (render, op_class->size); op->op_class = op_class; return op; diff --git a/gsk/vulkan/gskvulkanopprivate.h b/gsk/vulkan/gskvulkanopprivate.h index c7aecfa861..dd358cdc59 100644 --- a/gsk/vulkan/gskvulkanopprivate.h +++ b/gsk/vulkan/gskvulkanopprivate.h @@ -6,8 +6,6 @@ G_BEGIN_DECLS -typedef struct _GskVulkanOp GskVulkanOp; - typedef enum { GSK_VULKAN_STAGE_UPLOAD, @@ -57,7 +55,7 @@ struct _GskVulkanOpClass /* ensures alignment of ops to multipes of 16 bytes - and that makes graphene happy */ #define GSK_VULKAN_OP_SIZE(struct_name) ((sizeof(struct_name) + 15) & ~15) -GskVulkanOp * gsk_vulkan_op_alloc (GskVulkanRenderPass *render_pass, +GskVulkanOp * gsk_vulkan_op_alloc (GskVulkanRender *render, const GskVulkanOpClass *op_class); void gsk_vulkan_op_finish (GskVulkanOp *op); diff --git a/gsk/vulkan/gskvulkanoutsetshadowop.c b/gsk/vulkan/gskvulkanoutsetshadowop.c index d307d81f51..1725308397 100644 --- a/gsk/vulkan/gskvulkanoutsetshadowop.c +++ b/gsk/vulkan/gskvulkanoutsetshadowop.c @@ -75,7 +75,7 @@ static const GskVulkanOpClass GSK_VULKAN_OUTSET_SHADOW_OP_CLASS = { }; void -gsk_vulkan_outset_shadow_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_outset_shadow_op (GskVulkanRender *render, const char *clip_type, const GskRoundedRect *outline, const graphene_point_t *offset, @@ -86,7 +86,7 @@ gsk_vulkan_outset_shadow_op (GskVulkanRenderPass *render_pass, { GskVulkanOutsetShadowOp *self; - self = (GskVulkanOutsetShadowOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_OUTSET_SHADOW_OP_CLASS); + self = (GskVulkanOutsetShadowOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_OUTSET_SHADOW_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); self->outline = *outline; diff --git a/gsk/vulkan/gskvulkanoutsetshadowopprivate.h b/gsk/vulkan/gskvulkanoutsetshadowopprivate.h index 5061602ac8..4ff2b6c51b 100644 --- a/gsk/vulkan/gskvulkanoutsetshadowopprivate.h +++ b/gsk/vulkan/gskvulkanoutsetshadowopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_outset_shadow_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_outset_shadow_op (GskVulkanRender *render, const char *clip_type, const GskRoundedRect *outline, const graphene_point_t *offset, diff --git a/gsk/vulkan/gskvulkanprivate.h b/gsk/vulkan/gskvulkanprivate.h index 4a24822863..3d426c0a98 100644 --- a/gsk/vulkan/gskvulkanprivate.h +++ b/gsk/vulkan/gskvulkanprivate.h @@ -7,6 +7,7 @@ #include #include +typedef struct _GskVulkanOp GskVulkanOp; typedef struct _GskVulkanOpClass GskVulkanOpClass; typedef struct _GskVulkanRender GskVulkanRender; typedef struct _GskVulkanRenderPass GskVulkanRenderPass; diff --git a/gsk/vulkan/gskvulkanpushconstantsop.c b/gsk/vulkan/gskvulkanpushconstantsop.c index 2dc1d7dc19..59aa54f233 100644 --- a/gsk/vulkan/gskvulkanpushconstantsop.c +++ b/gsk/vulkan/gskvulkanpushconstantsop.c @@ -115,14 +115,14 @@ static const GskVulkanOpClass GSK_VULKAN_PUSH_CONSTANTS_OP_CLASS = { }; void -gsk_vulkan_push_constants_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_push_constants_op (GskVulkanRender *render, const graphene_vec2_t *scale, const graphene_matrix_t *mvp, const GskRoundedRect *clip) { GskVulkanPushConstantsOp *self; - self = (GskVulkanPushConstantsOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_PUSH_CONSTANTS_OP_CLASS); + self = (GskVulkanPushConstantsOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_PUSH_CONSTANTS_OP_CLASS); graphene_matrix_to_float (mvp, self->instance.mvp); gsk_rounded_rect_to_float (clip, graphene_point_zero (), self->instance.clip); diff --git a/gsk/vulkan/gskvulkanpushconstantsopprivate.h b/gsk/vulkan/gskvulkanpushconstantsopprivate.h index ab4422a2aa..f8c0e1fc1d 100644 --- a/gsk/vulkan/gskvulkanpushconstantsopprivate.h +++ b/gsk/vulkan/gskvulkanpushconstantsopprivate.h @@ -8,7 +8,7 @@ const VkPushConstantRange * gsk_vulkan_push_constants_get_ranges (void) G_GNUC_PURE; uint32_t gsk_vulkan_push_constants_get_range_count (void) G_GNUC_PURE; -void gsk_vulkan_push_constants_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_push_constants_op (GskVulkanRender *render, const graphene_vec2_t *scale, const graphene_matrix_t *mvp, const GskRoundedRect *clip); diff --git a/gsk/vulkan/gskvulkanrender.c b/gsk/vulkan/gskvulkanrender.c index f4e41fe407..925aef5808 100644 --- a/gsk/vulkan/gskvulkanrender.c +++ b/gsk/vulkan/gskvulkanrender.c @@ -15,6 +15,12 @@ #include "gdk/gdkvulkancontextprivate.h" +#define GDK_ARRAY_NAME gsk_vulkan_render_ops +#define GDK_ARRAY_TYPE_NAME GskVulkanRenderOps +#define GDK_ARRAY_ELEMENT_TYPE guchar +#define GDK_ARRAY_BY_VALUE 1 +#include "gdk/gdkarrayimpl.c" + #define DESCRIPTOR_POOL_MAXITEMS 50000 #define VERTEX_BUFFER_SIZE_STEP 128 * 1024 /* 128kB */ @@ -50,6 +56,7 @@ struct _GskVulkanRender VkDescriptorSetLayout descriptor_set_layouts[N_DESCRIPTOR_SETS]; VkPipelineLayout pipeline_layout; + GskVulkanRenderOps render_ops; GskVulkanUploader *uploader; GskVulkanRenderPass *render_pass; @@ -133,6 +140,15 @@ render_pass_cache_key_equal (gconstpointer a, keya->format == keyb->format; } +static GskVulkanOp * +gsk_vulkan_render_get_first_op (GskVulkanRender *self) +{ + if (gsk_vulkan_render_ops_get_size (&self->render_ops) == 0) + return NULL; + + return (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, 0); +} + static void gsk_vulkan_render_verbose_print (GskVulkanRender *self, const char *heading) @@ -140,9 +156,15 @@ gsk_vulkan_render_verbose_print (GskVulkanRender *self, #ifdef G_ENABLE_DEBUG if (GSK_RENDERER_DEBUG_CHECK (self->renderer, VERBOSE)) { + GskVulkanOp *op; GString *string = g_string_new (heading); g_string_append (string, ":\n"); - gsk_vulkan_render_pass_print (self->render_pass, string, 1); + + for (op = gsk_vulkan_render_get_first_op (self); op; op = op->next) + { + gsk_vulkan_op_print (op, string, 0); + } + g_print ("%s\n", string->str); g_string_free (string, TRUE); } @@ -339,6 +361,7 @@ gsk_vulkan_render_new (GskRenderer *renderer, &self->samplers[GSK_VULKAN_SAMPLER_NEAREST]); + gsk_vulkan_render_ops_init (&self->render_ops); self->uploader = gsk_vulkan_uploader_new (self->vulkan, self->command_pool); self->pipeline_cache = g_hash_table_new (pipeline_cache_key_hash, pipeline_cache_key_equal); self->render_pass_cache = g_hash_table_new (render_pass_cache_key_hash, render_pass_cache_key_equal); @@ -357,6 +380,23 @@ gsk_vulkan_render_get_fence (GskVulkanRender *self) return self->fence; } +static void +gsk_vulkan_render_seal_ops (GskVulkanRender *self) +{ + GskVulkanOp *last, *op; + guint i; + + last = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, 0); + + for (i = last->op_class->size; i < gsk_vulkan_render_ops_get_size (&self->render_ops); i += op->op_class->size) + { + op = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, i); + + last->next = op; + last = op; + } +} + static void gsk_vulkan_render_add_node (GskVulkanRender *self, GskRenderNode *node) @@ -374,16 +414,25 @@ gsk_vulkan_render_add_node (GskVulkanRender *self, node, TRUE); + gsk_vulkan_render_pass_add (self->render_pass, self, node); + + gsk_vulkan_render_seal_ops (self); + gsk_vulkan_render_verbose_print (self, "start of frame"); } void gsk_vulkan_render_upload (GskVulkanRender *self) { + GskVulkanOp *op; + gsk_vulkan_glyph_cache_upload (gsk_vulkan_renderer_get_glyph_cache (GSK_VULKAN_RENDERER (self->renderer)), self->uploader); - gsk_vulkan_render_pass_upload (self->render_pass, self->uploader); + for (op = gsk_vulkan_render_get_first_op (self); op; op = op->next) + { + gsk_vulkan_op_upload (op, self->uploader); + } gsk_vulkan_uploader_upload (self->uploader); } @@ -664,10 +713,14 @@ gsk_vulkan_render_prepare_descriptor_sets (GskVulkanRender *self) VkDevice device; VkWriteDescriptorSet descriptor_sets[N_DESCRIPTOR_SETS]; gsize n_descriptor_sets; + GskVulkanOp *op; device = gdk_vulkan_context_get_device (self->vulkan); - gsk_vulkan_render_pass_reserve_descriptor_sets (self->render_pass, self); + for (op = gsk_vulkan_render_get_first_op (self); op; op = op->next) + { + gsk_vulkan_op_reserve_descriptor_sets (op, self); + } if (self->storage_buffer_memory) { @@ -728,10 +781,15 @@ gsk_vulkan_render_prepare_descriptor_sets (GskVulkanRender *self) static void gsk_vulkan_render_collect_vertex_buffer (GskVulkanRender *self) { + GskVulkanOp *op; gsize n_bytes; guchar *data; - n_bytes = gsk_vulkan_render_pass_count_vertex_data (self->render_pass, 0); + n_bytes = 0; + for (op = gsk_vulkan_render_get_first_op (self); op; op = op->next) + { + n_bytes = gsk_vulkan_op_count_vertex_data (op, n_bytes); + } if (n_bytes == 0) return; @@ -742,16 +800,23 @@ gsk_vulkan_render_collect_vertex_buffer (GskVulkanRender *self) self->vertex_buffer = gsk_vulkan_buffer_new (self->vulkan, round_up (n_bytes, VERTEX_BUFFER_SIZE_STEP)); data = gsk_vulkan_buffer_map (self->vertex_buffer); - gsk_vulkan_render_pass_collect_vertex_data (self->render_pass, data); + for (op = gsk_vulkan_render_get_first_op (self); op; op = op->next) + { + gsk_vulkan_op_collect_vertex_data (op, data); + } gsk_vulkan_buffer_unmap (self->vertex_buffer); } -void +GskVulkanOp * gsk_vulkan_render_draw_pass (GskVulkanRender *self, - GskVulkanRenderPass *pass, - VkFence fence) + GskVulkanRenderPass *render_pass, + GskVulkanOp *op) { + VkPipeline current_pipeline = VK_NULL_HANDLE; + const GskVulkanOpClass *current_pipeline_class = NULL; + const char *current_pipeline_clip_type = NULL; VkCommandBuffer command_buffer; + VkRenderPass vk_render_pass; command_buffer = gsk_vulkan_command_pool_get_buffer (self->command_pool); @@ -773,7 +838,33 @@ gsk_vulkan_render_draw_pass (GskVulkanRender *self, 0, NULL); - gsk_vulkan_render_pass_draw (pass, self, self->pipeline_layout, command_buffer); + vk_render_pass = gsk_vulkan_render_pass_begin_draw (render_pass, self, self->pipeline_layout, command_buffer); + + while (op && op->op_class->stage != GSK_VULKAN_STAGE_END_PASS) + { + if (op->op_class->shader_name && + (op->op_class != current_pipeline_class || + current_pipeline_clip_type != op->clip_type)) + { + current_pipeline = gsk_vulkan_render_get_pipeline (self, + op->op_class, + op->clip_type, + gsk_vulkan_image_get_vk_format (self->target), + vk_render_pass); + vkCmdBindPipeline (command_buffer, + VK_PIPELINE_BIND_POINT_GRAPHICS, + current_pipeline); + current_pipeline_class = op->op_class; + current_pipeline_clip_type = op->clip_type; + } + + op = gsk_vulkan_op_command (op, self, self->pipeline_layout, command_buffer); + } + + if (op && op->op_class->stage == GSK_VULKAN_STAGE_END_PASS) + op = gsk_vulkan_op_command (op, self, self->pipeline_layout, command_buffer); + else + gsk_vulkan_render_pass_end_draw (render_pass, self, self->pipeline_layout, command_buffer); gsk_vulkan_command_pool_submit_buffer (self->command_pool, command_buffer, @@ -781,7 +872,9 @@ gsk_vulkan_render_draw_pass (GskVulkanRender *self, NULL, 0, NULL, - fence); + self->fence); + + return op; } void @@ -796,9 +889,7 @@ gsk_vulkan_render_draw (GskVulkanRender *self) gsk_vulkan_render_collect_vertex_buffer (self); - gsk_vulkan_render_draw_pass (self, - self->render_pass, - self->fence); + gsk_vulkan_render_draw_pass (self, self->render_pass, gsk_vulkan_render_get_first_op (self)); #ifdef G_ENABLE_DEBUG if (GSK_RENDERER_DEBUG_CHECK (self->renderer, SYNC)) @@ -834,6 +925,8 @@ static void gsk_vulkan_render_cleanup (GskVulkanRender *self) { VkDevice device = gdk_vulkan_context_get_device (self->vulkan); + GskVulkanOp *op; + gsize i; /* XXX: Wait for fence here or just in reset()? */ GSK_VK_CHECK (vkWaitForFences, device, @@ -846,6 +939,14 @@ gsk_vulkan_render_cleanup (GskVulkanRender *self) 1, &self->fence); + for (i = 0; i < gsk_vulkan_render_ops_get_size (&self->render_ops); i += op->op_class->size) + { + op = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, i); + + gsk_vulkan_op_finish (op); + } + gsk_vulkan_render_ops_set_size (&self->render_ops, 0); + gsk_vulkan_uploader_reset (self->uploader); gsk_vulkan_command_pool_reset (self->command_pool); @@ -891,6 +992,7 @@ gsk_vulkan_render_free (GskVulkanRender *self) } g_hash_table_unref (self->render_pass_cache); + gsk_vulkan_render_ops_clear (&self->render_ops); g_clear_pointer (&self->uploader, gsk_vulkan_uploader_free); @@ -950,3 +1052,21 @@ gsk_vulkan_render_get_renderer (GskVulkanRender *self) { return self->renderer; } + +gpointer +gsk_vulkan_render_alloc_op (GskVulkanRender *self, + gsize size) +{ + gsize pos; + + pos = gsk_vulkan_render_ops_get_size (&self->render_ops); + + gsk_vulkan_render_ops_splice (&self->render_ops, + pos, + 0, FALSE, + NULL, + size); + + return gsk_vulkan_render_ops_index (&self->render_ops, pos); +} + diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index 008328329a..c902c55802 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -35,12 +35,6 @@ #include "gdk/gdkvulkancontextprivate.h" -#define GDK_ARRAY_NAME gsk_vulkan_render_ops -#define GDK_ARRAY_TYPE_NAME GskVulkanRenderOps -#define GDK_ARRAY_ELEMENT_TYPE guchar -#define GDK_ARRAY_BY_VALUE 1 -#include "gdk/gdkarrayimpl.c" - #define ORTHO_NEAR_PLANE -10000 #define ORTHO_FAR_PLANE 10000 @@ -50,8 +44,6 @@ struct _GskVulkanRenderPass { GdkVulkanContext *vulkan; - GskVulkanRenderOps render_ops; - GskVulkanImage *target; graphene_rect_t viewport; cairo_region_t *clip; @@ -76,28 +68,6 @@ static GQuark fallback_pixels_quark; static GQuark texture_pixels_quark; #endif -static void -gsk_vulkan_render_pass_seal (GskVulkanRenderPass *self) -{ - GskVulkanOp *last, *op; - guint i; - - last = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, 0); - - for (i = last->op_class->size; i < gsk_vulkan_render_ops_get_size (&self->render_ops); i += op->op_class->size) - { - op = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, i); - - last->next = op; - last = op; - } -} - -static void -gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, - GskVulkanRender *render, - GskRenderNode *node); - GskVulkanRenderPass * gsk_vulkan_render_pass_new (GdkVulkanContext *context, GskVulkanRender *render, @@ -112,7 +82,6 @@ gsk_vulkan_render_pass_new (GdkVulkanContext *context, self = g_new0 (GskVulkanRenderPass, 1); self->vulkan = g_object_ref (context); - gsk_vulkan_render_ops_init (&self->render_ops); self->target = g_object_ref (target); self->clip = cairo_region_copy (clip); @@ -144,27 +113,12 @@ gsk_vulkan_render_pass_new (GdkVulkanContext *context, } #endif - gsk_vulkan_render_pass_add (self, render, node); - - gsk_vulkan_render_pass_seal (self); - return self; } void gsk_vulkan_render_pass_free (GskVulkanRenderPass *self) { - GskVulkanOp *op; - gsize i; - - for (i = 0; i < gsk_vulkan_render_ops_get_size (&self->render_ops); i += op->op_class->size) - { - op = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, i); - - gsk_vulkan_op_finish (op); - } - gsk_vulkan_render_ops_clear (&self->render_ops); - g_object_unref (self->vulkan); g_object_unref (self->target); cairo_region_destroy (self->clip); @@ -172,49 +126,16 @@ gsk_vulkan_render_pass_free (GskVulkanRenderPass *self) g_free (self); } -void -gsk_vulkan_render_pass_print (GskVulkanRenderPass *self, - GString *string, - guint indent) -{ - GskVulkanOp *op; - gsize i; - - for (i = 0; i < gsk_vulkan_render_ops_get_size (&self->render_ops); i += op->op_class->size) - { - op = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, i); - - gsk_vulkan_op_print (op, string, indent); - } -} - -gpointer -gsk_vulkan_render_pass_alloc_op (GskVulkanRenderPass *self, - gsize size) -{ - gsize pos; - - pos = gsk_vulkan_render_ops_get_size (&self->render_ops); - - gsk_vulkan_render_ops_splice (&self->render_ops, - pos, - 0, FALSE, - NULL, - size); - - return gsk_vulkan_render_ops_index (&self->render_ops, pos); -} - static void -gsk_vulkan_render_pass_append_scissor (GskVulkanRenderPass *self, +gsk_vulkan_render_pass_append_scissor (GskVulkanRender *render, GskRenderNode *node, const GskVulkanParseState *state) { - gsk_vulkan_scissor_op (self, &state->scissor); + gsk_vulkan_scissor_op (render, &state->scissor); } static void -gsk_vulkan_render_pass_append_push_constants (GskVulkanRenderPass *self, +gsk_vulkan_render_pass_append_push_constants (GskVulkanRender *render, GskRenderNode *node, const GskVulkanParseState *state) { @@ -228,7 +149,7 @@ gsk_vulkan_render_pass_append_push_constants (GskVulkanRenderPass *self, else graphene_matrix_init_from_matrix (&mvp, &state->projection); - gsk_vulkan_push_constants_op (self, &state->scale, &mvp, &state->clip.rect); + gsk_vulkan_push_constants_op (render, &state->scale, &mvp, &state->clip.rect); } #define FALLBACK(...) G_STMT_START { \ @@ -254,7 +175,7 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self, result = gsk_vulkan_renderer_get_texture_image (renderer, texture); if (result == NULL) { - result = gsk_vulkan_upload_op (self, self->vulkan, texture); + result = gsk_vulkan_upload_op (render, self->vulkan, texture); gsk_vulkan_renderer_add_texture_image (renderer, texture, result); } @@ -272,7 +193,7 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self, if (clipped.size.width == 0 || clipped.size.height == 0) return NULL; - result = gsk_vulkan_upload_cairo_op (self, + result = gsk_vulkan_upload_cairo_op (render, self->vulkan, node, &state->scale, @@ -297,9 +218,8 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self, */ *tex_bounds = clipped; - result = gsk_vulkan_offscreen_op (self, + result = gsk_vulkan_offscreen_op (render, self->vulkan, - render, &state->scale, &clipped, node); @@ -330,13 +250,13 @@ gsk_vulkan_render_pass_add_fallback_node (GskVulkanRenderPass *self, if (clipped.size.width == 0 || clipped.size.height == 0) return TRUE; - image = gsk_vulkan_upload_cairo_op (self, + image = gsk_vulkan_upload_cairo_op (render, self->vulkan, node, &state->scale, &clipped); - gsk_vulkan_texture_op (self, + gsk_vulkan_texture_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), image, GSK_VULKAN_SAMPLER_DEFAULT, @@ -391,7 +311,7 @@ gsk_vulkan_render_pass_add_color_node (GskVulkanRenderPass *self, const GskVulkanParseState *state, GskRenderNode *node) { - gsk_vulkan_color_op (self, + gsk_vulkan_color_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), &node->bounds, &state->offset, @@ -406,7 +326,7 @@ gsk_vulkan_render_pass_add_linear_gradient_node (GskVulkanRenderPass *self const GskVulkanParseState *state, GskRenderNode *node) { - gsk_vulkan_linear_gradient_op (self, + gsk_vulkan_linear_gradient_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), &node->bounds, &state->offset, @@ -424,7 +344,7 @@ gsk_vulkan_render_pass_add_border_node (GskVulkanRenderPass *self, const GskVulkanParseState *state, GskRenderNode *node) { - gsk_vulkan_border_op (self, + gsk_vulkan_border_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), gsk_border_node_get_outline (node), &state->offset, @@ -448,11 +368,11 @@ gsk_vulkan_render_pass_add_texture_node (GskVulkanRenderPass *self, image = gsk_vulkan_renderer_get_texture_image (renderer, texture); if (image == NULL) { - image = gsk_vulkan_upload_op (self, self->vulkan, texture); + image = gsk_vulkan_upload_op (render, self->vulkan, texture); gsk_vulkan_renderer_add_texture_image (renderer, texture, image); } - gsk_vulkan_texture_op (self, + gsk_vulkan_texture_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), image, GSK_VULKAN_SAMPLER_DEFAULT, @@ -491,11 +411,11 @@ gsk_vulkan_render_pass_add_texture_scale_node (GskVulkanRenderPass *self, image = gsk_vulkan_renderer_get_texture_image (renderer, texture); if (image == NULL) { - image = gsk_vulkan_upload_op (self, self->vulkan, texture); + image = gsk_vulkan_upload_op (render, self->vulkan, texture); gsk_vulkan_renderer_add_texture_image (renderer, texture, image); } - gsk_vulkan_texture_op (self, + gsk_vulkan_texture_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), image, sampler, @@ -515,7 +435,7 @@ gsk_vulkan_render_pass_add_inset_shadow_node (GskVulkanRenderPass *self, if (gsk_inset_shadow_node_get_blur_radius (node) > 0) FALLBACK ("Blur support not implemented for inset shadows"); - gsk_vulkan_inset_shadow_op (self, + gsk_vulkan_inset_shadow_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), gsk_inset_shadow_node_get_outline (node), &state->offset, @@ -537,7 +457,7 @@ gsk_vulkan_render_pass_add_outset_shadow_node (GskVulkanRenderPass *self, if (gsk_outset_shadow_node_get_blur_radius (node) > 0) FALLBACK ("Blur support not implemented for outset shadows"); - gsk_vulkan_outset_shadow_op (self, + gsk_vulkan_outset_shadow_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), gsk_outset_shadow_node_get_outline (node), &state->offset, @@ -693,11 +613,11 @@ gsk_vulkan_render_pass_add_transform_node (GskVulkanRenderPass *self, new_state.scissor = state->scissor; graphene_matrix_init_from_matrix (&new_state.projection, &state->projection); - gsk_vulkan_render_pass_append_push_constants (self, node, &new_state); + gsk_vulkan_render_pass_append_push_constants (render, node, &new_state); gsk_vulkan_render_pass_add_node (self, render, &new_state, child); - gsk_vulkan_render_pass_append_push_constants (self, node, state); + gsk_vulkan_render_pass_append_push_constants (render, node, state); gsk_transform_unref (new_state.modelview); @@ -721,7 +641,7 @@ gsk_vulkan_render_pass_add_opacity_node (GskVulkanRenderPass *self, if (image == NULL) return TRUE; - gsk_vulkan_color_matrix_op_opacity (self, + gsk_vulkan_color_matrix_op_opacity (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), image, &node->bounds, @@ -749,7 +669,7 @@ gsk_vulkan_render_pass_add_color_matrix_node (GskVulkanRenderPass *self, if (image == NULL) return TRUE; - gsk_vulkan_color_matrix_op (self, + gsk_vulkan_color_matrix_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), image, &node->bounds, @@ -855,16 +775,16 @@ gsk_vulkan_render_pass_add_clip_node (GskVulkanRenderPass *self, graphene_matrix_init_from_matrix (&new_state.projection, &state->projection); if (do_scissor) - gsk_vulkan_render_pass_append_scissor (self, node, &new_state); + gsk_vulkan_render_pass_append_scissor (render, node, &new_state); if (do_push_constants) - gsk_vulkan_render_pass_append_push_constants (self, node, &new_state); + gsk_vulkan_render_pass_append_push_constants (render, node, &new_state); gsk_vulkan_render_pass_add_node (self, render, &new_state, gsk_clip_node_get_child (node)); if (do_push_constants) - gsk_vulkan_render_pass_append_push_constants (self, node, state); + gsk_vulkan_render_pass_append_push_constants (render, node, state); if (do_scissor) - gsk_vulkan_render_pass_append_scissor (self, node, state); + gsk_vulkan_render_pass_append_scissor (render, node, state); return TRUE; } @@ -893,11 +813,11 @@ gsk_vulkan_render_pass_add_rounded_clip_node (GskVulkanRenderPass *self, new_state.modelview = state->modelview; graphene_matrix_init_from_matrix (&new_state.projection, &state->projection); - gsk_vulkan_render_pass_append_push_constants (self, node, &new_state); + gsk_vulkan_render_pass_append_push_constants (render, node, &new_state); gsk_vulkan_render_pass_add_node (self, render, &new_state, gsk_rounded_clip_node_get_child (node)); - gsk_vulkan_render_pass_append_push_constants (self, node, state); + gsk_vulkan_render_pass_append_push_constants (render, node, state); return TRUE; } @@ -916,14 +836,13 @@ gsk_vulkan_render_pass_add_repeat_node (GskVulkanRenderPass *self, if (graphene_rect_get_area (child_bounds) == 0) return TRUE; - image = gsk_vulkan_offscreen_op (self, + image = gsk_vulkan_offscreen_op (render, self->vulkan, - render, &state->scale, child_bounds, gsk_repeat_node_get_child (node)); - gsk_vulkan_texture_op (self, + gsk_vulkan_texture_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), image, GSK_VULKAN_SAMPLER_REPEAT, @@ -970,7 +889,7 @@ gsk_vulkan_render_pass_add_blend_node (GskVulkanRenderPass *self, bottom_tex_rect = *graphene_rect_zero (); } - gsk_vulkan_blend_mode_op (self, + gsk_vulkan_blend_mode_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), &node->bounds, &state->offset, @@ -1014,7 +933,7 @@ gsk_vulkan_render_pass_add_cross_fade_node (GskVulkanRenderPass *self, if (end_image == NULL) return TRUE; - gsk_vulkan_color_matrix_op_opacity (self, + gsk_vulkan_color_matrix_op_opacity (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &end_child->bounds), end_image, &node->bounds, @@ -1026,7 +945,7 @@ gsk_vulkan_render_pass_add_cross_fade_node (GskVulkanRenderPass *self, } else if (end_image == NULL) { - gsk_vulkan_color_matrix_op_opacity (self, + gsk_vulkan_color_matrix_op_opacity (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &start_child->bounds), start_image, &node->bounds, @@ -1036,7 +955,7 @@ gsk_vulkan_render_pass_add_cross_fade_node (GskVulkanRenderPass *self, return TRUE; } - gsk_vulkan_cross_fade_op (self, + gsk_vulkan_cross_fade_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), &node->bounds, &state->offset, @@ -1099,7 +1018,7 @@ gsk_vulkan_render_pass_add_text_node (GskVulkanRenderPass *self, glyph->draw_width / glyph->tw, glyph->draw_height / glyph->th); if (gsk_text_node_has_color_glyphs (node)) - gsk_vulkan_texture_op (self, + gsk_vulkan_texture_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &glyph_bounds), glyph->atlas_image, GSK_VULKAN_SAMPLER_DEFAULT, @@ -1107,7 +1026,7 @@ gsk_vulkan_render_pass_add_text_node (GskVulkanRenderPass *self, &state->offset, &glyph_tex_rect); else - gsk_vulkan_glyph_op (self, + gsk_vulkan_glyph_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &glyph_bounds), glyph->atlas_image, &glyph_bounds, @@ -1146,7 +1065,7 @@ gsk_vulkan_render_pass_add_blur_node (GskVulkanRenderPass *self, if (image == NULL) return TRUE; - gsk_vulkan_blur_op (self, + gsk_vulkan_blur_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), image, &node->bounds, @@ -1190,7 +1109,7 @@ gsk_vulkan_render_pass_add_mask_node (GskVulkanRenderPass *self, { graphene_rect_t bounds; if (graphene_rect_intersection (&source->bounds, &mask->bounds, &bounds)) - gsk_vulkan_glyph_op (self, + gsk_vulkan_glyph_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &bounds), mask_image, &bounds, @@ -1208,7 +1127,7 @@ gsk_vulkan_render_pass_add_mask_node (GskVulkanRenderPass *self, if (source_image == NULL) return TRUE; - gsk_vulkan_mask_op (self, + gsk_vulkan_mask_op (render, gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), &state->offset, source_image, @@ -1308,7 +1227,7 @@ gsk_vulkan_render_pass_add_node (GskVulkanRenderPass *self, gsk_vulkan_render_pass_add_fallback_node (self, render, state, node); } -static void +void gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, GskVulkanRender *render, GskRenderNode *node) @@ -1335,110 +1254,17 @@ gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, state.offset = GRAPHENE_POINT_INIT (-self->viewport.origin.x * scale_x, -self->viewport.origin.y * scale_y); - gsk_vulkan_render_pass_append_scissor (self, node, &state); - gsk_vulkan_render_pass_append_push_constants (self, node, &state); + gsk_vulkan_render_pass_append_scissor (render, node, &state); + gsk_vulkan_render_pass_append_push_constants (render, node, &state); gsk_vulkan_render_pass_add_node (self, render, &state, node); } -static GskVulkanOp * -gsk_vulkan_render_pass_get_first_op (GskVulkanRenderPass *self) -{ - if (gsk_vulkan_render_ops_get_size (&self->render_ops) == 0) - return NULL; - - return (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, 0); -} - -void -gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, - GskVulkanUploader *uploader) -{ - GskVulkanOp *op; - - for (op = gsk_vulkan_render_pass_get_first_op (self); op; op = op->next) - { - gsk_vulkan_op_upload (op, uploader); - } -} - -gsize -gsk_vulkan_render_pass_count_vertex_data (GskVulkanRenderPass *self, - gsize n_bytes) -{ - GskVulkanOp *op; - - for (op = gsk_vulkan_render_pass_get_first_op (self); op; op = op->next) - { - n_bytes = gsk_vulkan_op_count_vertex_data (op, n_bytes); - } - - return n_bytes; -} - -void -gsk_vulkan_render_pass_collect_vertex_data (GskVulkanRenderPass *self, - guchar *data) -{ - GskVulkanOp *op; - - for (op = gsk_vulkan_render_pass_get_first_op (self); op; op = op->next) - { - gsk_vulkan_op_collect_vertex_data (op, data); - } -} - -void -gsk_vulkan_render_pass_reserve_descriptor_sets (GskVulkanRenderPass *self, - GskVulkanRender *render) -{ - GskVulkanOp *op; - - for (op = gsk_vulkan_render_pass_get_first_op (self); op; op = op->next) - { - gsk_vulkan_op_reserve_descriptor_sets (op, render); - } -} - -static void -gsk_vulkan_render_pass_draw_rect (GskVulkanRenderPass *self, - GskVulkanRender *render, - VkPipelineLayout pipeline_layout, - VkCommandBuffer command_buffer) -{ - VkPipeline current_pipeline = VK_NULL_HANDLE; - const GskVulkanOpClass *current_pipeline_class = NULL; - const char *current_pipeline_clip_type = NULL; - GskVulkanOp *op; - - op = gsk_vulkan_render_pass_get_first_op (self); - while (op) - { - if (op->op_class->shader_name && - (op->op_class != current_pipeline_class || - current_pipeline_clip_type != op->clip_type)) - { - current_pipeline = gsk_vulkan_render_get_pipeline (render, - op->op_class, - op->clip_type, - gsk_vulkan_image_get_vk_format (self->target), - self->render_pass); - vkCmdBindPipeline (command_buffer, - VK_PIPELINE_BIND_POINT_GRAPHICS, - current_pipeline); - current_pipeline_class = op->op_class; - current_pipeline_clip_type = op->clip_type; - } - - op = gsk_vulkan_op_command (op, render, pipeline_layout, command_buffer); - } -} - -void -gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self, - GskVulkanRender *render, - VkPipelineLayout pipeline_layout, - VkCommandBuffer command_buffer) +VkRenderPass +gsk_vulkan_render_pass_begin_draw (GskVulkanRenderPass *self, + GskVulkanRender *render, + VkPipelineLayout pipeline_layout, + VkCommandBuffer command_buffer) { cairo_rectangle_int_t rect; @@ -1473,8 +1299,15 @@ gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self, }, VK_SUBPASS_CONTENTS_INLINE); - gsk_vulkan_render_pass_draw_rect (self, render, pipeline_layout, command_buffer); + return self->render_pass; +} +void +gsk_vulkan_render_pass_end_draw (GskVulkanRenderPass *self, + GskVulkanRender *render, + VkPipelineLayout pipeline_layout, + VkCommandBuffer command_buffer) +{ vkCmdEndRenderPass (command_buffer); } diff --git a/gsk/vulkan/gskvulkanrenderpassprivate.h b/gsk/vulkan/gskvulkanrenderpassprivate.h index db2278b0cb..3625dea3f4 100644 --- a/gsk/vulkan/gskvulkanrenderpassprivate.h +++ b/gsk/vulkan/gskvulkanrenderpassprivate.h @@ -21,22 +21,15 @@ GskVulkanRenderPass * gsk_vulkan_render_pass_new (GdkVulk void gsk_vulkan_render_pass_free (GskVulkanRenderPass *self); -void gsk_vulkan_render_pass_print (GskVulkanRenderPass *self, - GString *string, - guint indent); +void gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, + GskVulkanRender *render, + GskRenderNode *node); -gpointer gsk_vulkan_render_pass_alloc_op (GskVulkanRenderPass *self, - gsize size); - -void gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, - GskVulkanUploader *uploader); -void gsk_vulkan_render_pass_reserve_descriptor_sets (GskVulkanRenderPass *self, - GskVulkanRender *render); -gsize gsk_vulkan_render_pass_count_vertex_data (GskVulkanRenderPass *self, - gsize n_bytes); -void gsk_vulkan_render_pass_collect_vertex_data (GskVulkanRenderPass *self, - guchar *data); -void gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self, +VkRenderPass gsk_vulkan_render_pass_begin_draw (GskVulkanRenderPass *self, + GskVulkanRender *render, + VkPipelineLayout pipeline_layout, + VkCommandBuffer command_buffer); +void gsk_vulkan_render_pass_end_draw (GskVulkanRenderPass *self, GskVulkanRender *render, VkPipelineLayout pipeline_layout, VkCommandBuffer command_buffer); diff --git a/gsk/vulkan/gskvulkanrenderprivate.h b/gsk/vulkan/gskvulkanrenderprivate.h index 728a606c4e..8b8d2148d8 100644 --- a/gsk/vulkan/gskvulkanrenderprivate.h +++ b/gsk/vulkan/gskvulkanrenderprivate.h @@ -30,6 +30,9 @@ GskRenderer * gsk_vulkan_render_get_renderer (GskVulk void gsk_vulkan_render_upload (GskVulkanRender *self); +gpointer gsk_vulkan_render_alloc_op (GskVulkanRender *self, + gsize size); + VkPipeline gsk_vulkan_render_get_pipeline (GskVulkanRender *self, const GskVulkanOpClass *op_class, const char *clip_type, @@ -50,9 +53,9 @@ guchar * gsk_vulkan_render_get_buffer_memory (GskVulk gsize *out_offset); void gsk_vulkan_render_draw (GskVulkanRender *self); -void gsk_vulkan_render_draw_pass (GskVulkanRender *self, - GskVulkanRenderPass *pass, - VkFence fence); +GskVulkanOp * gsk_vulkan_render_draw_pass (GskVulkanRender *self, + GskVulkanRenderPass *render_pass, + GskVulkanOp *op); GdkTexture * gsk_vulkan_render_download_target (GskVulkanRender *self); VkFence gsk_vulkan_render_get_fence (GskVulkanRender *self); diff --git a/gsk/vulkan/gskvulkanscissorop.c b/gsk/vulkan/gskvulkanscissorop.c index c2fa3dff7b..b5b40dc1f2 100644 --- a/gsk/vulkan/gskvulkanscissorop.c +++ b/gsk/vulkan/gskvulkanscissorop.c @@ -90,12 +90,12 @@ static const GskVulkanOpClass GSK_VULKAN_SCISSOR_OP_CLASS = { }; void -gsk_vulkan_scissor_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_scissor_op (GskVulkanRender *render, const cairo_rectangle_int_t *rect) { GskVulkanScissorOp *self; - self = (GskVulkanScissorOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_SCISSOR_OP_CLASS); + self = (GskVulkanScissorOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_SCISSOR_OP_CLASS); self->rect = *rect; } diff --git a/gsk/vulkan/gskvulkanscissoropprivate.h b/gsk/vulkan/gskvulkanscissoropprivate.h index a4f637d8cc..ae093764b4 100644 --- a/gsk/vulkan/gskvulkanscissoropprivate.h +++ b/gsk/vulkan/gskvulkanscissoropprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_scissor_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_scissor_op (GskVulkanRender *render, const cairo_rectangle_int_t *rect); diff --git a/gsk/vulkan/gskvulkantextureop.c b/gsk/vulkan/gskvulkantextureop.c index eedee006ff..37e3be40cd 100644 --- a/gsk/vulkan/gskvulkantextureop.c +++ b/gsk/vulkan/gskvulkantextureop.c @@ -84,7 +84,7 @@ static const GskVulkanOpClass GSK_VULKAN_TEXTURE_OP_CLASS = { }; void -gsk_vulkan_texture_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_texture_op (GskVulkanRender *render, const char *clip_type, GskVulkanImage *image, GskVulkanRenderSampler sampler, @@ -94,7 +94,7 @@ gsk_vulkan_texture_op (GskVulkanRenderPass *render_pass, { GskVulkanTextureOp *self; - self = (GskVulkanTextureOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_TEXTURE_OP_CLASS); + self = (GskVulkanTextureOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_TEXTURE_OP_CLASS); ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); self->image = g_object_ref (image); diff --git a/gsk/vulkan/gskvulkantextureopprivate.h b/gsk/vulkan/gskvulkantextureopprivate.h index 6c9dd9d68d..f67795cfb0 100644 --- a/gsk/vulkan/gskvulkantextureopprivate.h +++ b/gsk/vulkan/gskvulkantextureopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -void gsk_vulkan_texture_op (GskVulkanRenderPass *render_pass, +void gsk_vulkan_texture_op (GskVulkanRender *render, const char *clip_type, GskVulkanImage *image, GskVulkanRenderSampler sampler, diff --git a/gsk/vulkan/gskvulkanuploadcairoop.c b/gsk/vulkan/gskvulkanuploadcairoop.c index 72bc6272ed..e5c78010b6 100644 --- a/gsk/vulkan/gskvulkanuploadcairoop.c +++ b/gsk/vulkan/gskvulkanuploadcairoop.c @@ -114,7 +114,7 @@ static const GskVulkanOpClass GSK_VULKAN_UPLOAD_CAIRO_OP_CLASS = { }; GskVulkanImage * -gsk_vulkan_upload_cairo_op (GskVulkanRenderPass *render_pass, +gsk_vulkan_upload_cairo_op (GskVulkanRender *render, GdkVulkanContext *context, GskRenderNode *node, const graphene_vec2_t *scale, @@ -122,7 +122,7 @@ gsk_vulkan_upload_cairo_op (GskVulkanRenderPass *render_pass, { GskVulkanUploadCairoOp *self; - self = (GskVulkanUploadCairoOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_UPLOAD_CAIRO_OP_CLASS); + self = (GskVulkanUploadCairoOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_UPLOAD_CAIRO_OP_CLASS); self->node = gsk_render_node_ref (node); self->image = gsk_vulkan_image_new_for_upload (context, diff --git a/gsk/vulkan/gskvulkanuploadcairoopprivate.h b/gsk/vulkan/gskvulkanuploadcairoopprivate.h index 5dc55413a2..ab966c5db7 100644 --- a/gsk/vulkan/gskvulkanuploadcairoopprivate.h +++ b/gsk/vulkan/gskvulkanuploadcairoopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -GskVulkanImage * gsk_vulkan_upload_cairo_op (GskVulkanRenderPass *render_pass, +GskVulkanImage * gsk_vulkan_upload_cairo_op (GskVulkanRender *render, GdkVulkanContext *context, GskRenderNode *node, const graphene_vec2_t *scale, diff --git a/gsk/vulkan/gskvulkanuploadop.c b/gsk/vulkan/gskvulkanuploadop.c index 1a0eb6dfc0..d426bad44a 100644 --- a/gsk/vulkan/gskvulkanuploadop.c +++ b/gsk/vulkan/gskvulkanuploadop.c @@ -95,13 +95,13 @@ static const GskVulkanOpClass GSK_VULKAN_UPLOAD_OP_CLASS = { }; GskVulkanImage * -gsk_vulkan_upload_op (GskVulkanRenderPass *render_pass, - GdkVulkanContext *context, - GdkTexture *texture) +gsk_vulkan_upload_op (GskVulkanRender *render, + GdkVulkanContext *context, + GdkTexture *texture) { GskVulkanUploadOp *self; - self = (GskVulkanUploadOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_UPLOAD_OP_CLASS); + self = (GskVulkanUploadOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_UPLOAD_OP_CLASS); self->texture = g_object_ref (texture); self->image = gsk_vulkan_image_new_for_upload (context, diff --git a/gsk/vulkan/gskvulkanuploadopprivate.h b/gsk/vulkan/gskvulkanuploadopprivate.h index fb683b2335..2948a879d4 100644 --- a/gsk/vulkan/gskvulkanuploadopprivate.h +++ b/gsk/vulkan/gskvulkanuploadopprivate.h @@ -4,7 +4,7 @@ G_BEGIN_DECLS -GskVulkanImage * gsk_vulkan_upload_op (GskVulkanRenderPass *render_pass, +GskVulkanImage * gsk_vulkan_upload_op (GskVulkanRender *render, GdkVulkanContext *context, GdkTexture *texture);