From 2aba50efa0be13a6b982c08c995a73edf511af4d Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 9 Jul 2023 20:28:12 +0200 Subject: [PATCH] vulkan: Move the render ops to the Render This is a massive refactoring because it collects all the renderops of all renderpasses into one long array in the Render object. Lots of code in there is still flaky and needs cleanup. That will follow in further commits. Other than that it does work fine though. --- gsk/vulkan/gskvulkanblendmodeop.c | 4 +- gsk/vulkan/gskvulkanblendmodeopprivate.h | 2 +- gsk/vulkan/gskvulkanblurop.c | 4 +- gsk/vulkan/gskvulkanbluropprivate.h | 2 +- gsk/vulkan/gskvulkanborderop.c | 4 +- gsk/vulkan/gskvulkanborderopprivate.h | 2 +- gsk/vulkan/gskvulkancolormatrixop.c | 8 +- gsk/vulkan/gskvulkancolormatrixopprivate.h | 4 +- gsk/vulkan/gskvulkancolorop.c | 4 +- gsk/vulkan/gskvulkancoloropprivate.h | 2 +- gsk/vulkan/gskvulkancrossfadeop.c | 4 +- gsk/vulkan/gskvulkancrossfadeopprivate.h | 2 +- gsk/vulkan/gskvulkanglyphop.c | 4 +- gsk/vulkan/gskvulkanglyphopprivate.h | 2 +- gsk/vulkan/gskvulkaninsetshadowop.c | 4 +- gsk/vulkan/gskvulkaninsetshadowopprivate.h | 2 +- gsk/vulkan/gskvulkanlineargradientop.c | 4 +- gsk/vulkan/gskvulkanlineargradientopprivate.h | 2 +- gsk/vulkan/gskvulkanmaskop.c | 4 +- gsk/vulkan/gskvulkanmaskopprivate.h | 2 +- gsk/vulkan/gskvulkanoffscreenop.c | 44 ++- gsk/vulkan/gskvulkanoffscreenopprivate.h | 3 +- gsk/vulkan/gskvulkanop.c | 5 +- gsk/vulkan/gskvulkanopprivate.h | 4 +- gsk/vulkan/gskvulkanoutsetshadowop.c | 4 +- gsk/vulkan/gskvulkanoutsetshadowopprivate.h | 2 +- gsk/vulkan/gskvulkanprivate.h | 1 + gsk/vulkan/gskvulkanpushconstantsop.c | 4 +- gsk/vulkan/gskvulkanpushconstantsopprivate.h | 2 +- gsk/vulkan/gskvulkanrender.c | 146 ++++++++- gsk/vulkan/gskvulkanrenderpass.c | 277 ++++-------------- gsk/vulkan/gskvulkanrenderpassprivate.h | 25 +- gsk/vulkan/gskvulkanrenderprivate.h | 9 +- gsk/vulkan/gskvulkanscissorop.c | 4 +- gsk/vulkan/gskvulkanscissoropprivate.h | 2 +- gsk/vulkan/gskvulkantextureop.c | 4 +- gsk/vulkan/gskvulkantextureopprivate.h | 2 +- gsk/vulkan/gskvulkanuploadcairoop.c | 4 +- gsk/vulkan/gskvulkanuploadcairoopprivate.h | 2 +- gsk/vulkan/gskvulkanuploadop.c | 8 +- gsk/vulkan/gskvulkanuploadopprivate.h | 2 +- 41 files changed, 279 insertions(+), 341 deletions(-) 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 = (GskVulkanOffscreenEndOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_OFFSCREEN_END_OP_CLASS); - end->image = g_object_ref (self->image); + 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); - -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, +void gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, + GskVulkanRender *render, + GskRenderNode *node); + +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); -- 2.30.2