vulkan: Move the render ops to the Render
authorBenjamin Otte <otte@redhat.com>
Sun, 9 Jul 2023 18:28:12 +0000 (20:28 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 16 Jul 2023 10:13:00 +0000 (12:13 +0200)
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.

41 files changed:
gsk/vulkan/gskvulkanblendmodeop.c
gsk/vulkan/gskvulkanblendmodeopprivate.h
gsk/vulkan/gskvulkanblurop.c
gsk/vulkan/gskvulkanbluropprivate.h
gsk/vulkan/gskvulkanborderop.c
gsk/vulkan/gskvulkanborderopprivate.h
gsk/vulkan/gskvulkancolormatrixop.c
gsk/vulkan/gskvulkancolormatrixopprivate.h
gsk/vulkan/gskvulkancolorop.c
gsk/vulkan/gskvulkancoloropprivate.h
gsk/vulkan/gskvulkancrossfadeop.c
gsk/vulkan/gskvulkancrossfadeopprivate.h
gsk/vulkan/gskvulkanglyphop.c
gsk/vulkan/gskvulkanglyphopprivate.h
gsk/vulkan/gskvulkaninsetshadowop.c
gsk/vulkan/gskvulkaninsetshadowopprivate.h
gsk/vulkan/gskvulkanlineargradientop.c
gsk/vulkan/gskvulkanlineargradientopprivate.h
gsk/vulkan/gskvulkanmaskop.c
gsk/vulkan/gskvulkanmaskopprivate.h
gsk/vulkan/gskvulkanoffscreenop.c
gsk/vulkan/gskvulkanoffscreenopprivate.h
gsk/vulkan/gskvulkanop.c
gsk/vulkan/gskvulkanopprivate.h
gsk/vulkan/gskvulkanoutsetshadowop.c
gsk/vulkan/gskvulkanoutsetshadowopprivate.h
gsk/vulkan/gskvulkanprivate.h
gsk/vulkan/gskvulkanpushconstantsop.c
gsk/vulkan/gskvulkanpushconstantsopprivate.h
gsk/vulkan/gskvulkanrender.c
gsk/vulkan/gskvulkanrenderpass.c
gsk/vulkan/gskvulkanrenderpassprivate.h
gsk/vulkan/gskvulkanrenderprivate.h
gsk/vulkan/gskvulkanscissorop.c
gsk/vulkan/gskvulkanscissoropprivate.h
gsk/vulkan/gskvulkantextureop.c
gsk/vulkan/gskvulkantextureopprivate.h
gsk/vulkan/gskvulkanuploadcairoop.c
gsk/vulkan/gskvulkanuploadcairoopprivate.h
gsk/vulkan/gskvulkanuploadop.c
gsk/vulkan/gskvulkanuploadopprivate.h

index f839e645717e1002774810f8ae9dacbf91a26756..2bebd37f88cb50917b661d2757a501872d5665b9 100644 (file)
@@ -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);
index 2a2b7c76c5baca757e2be9c879499a4a341288e0..418c5f2649714fb5245760900cdc8a9918a52af5 100644 (file)
@@ -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,
index 048092b0479f2d37b967bbbc330ed2a260579ab5..caa3710a2a9a437c689be35a7e1b99c4ce3ac61d 100644 (file)
@@ -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);
index 6419811d47a4ea474f4b6a7d14573da9eb5063dd..24a90a71951ffe63da7409c693b3d7ee6a6782a0 100644 (file)
@@ -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,
index 5a5adf21fef414b753736f0247e252bfe8d8858a..c65c2f312c381bc9096616bf769fe3842cc0d5b2 100644 (file)
@@ -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;
index e8843a6476a3d5dc1445873625a0f5369d2413ed..85985e4a7af51a5c310ed579ee418faa05d0e68c 100644 (file)
@@ -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,
index 27e6c4fbb8f20864b8b0f1a262295a2f30a36db4..8129af097e4509e30e8253c6f3164bf6adab8ca7 100644 (file)
@@ -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,
index e5d4cf4c6215b20c87eaf317732a7b2a4da66b79..e50cdbf10b4d0a13b4de8e2e4dcc0668746213dd 100644 (file)
@@ -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,
index 7a2ca016ad076c7915b334f1a8f77666d66efe69..8458c91d5584c6fc08cfa21f42f658fae919ec20 100644 (file)
@@ -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);
index 0256c831c7b8c8d5123a9089b396af6d4d3e0e88..904141b61220e1b2d5c8563f058bf150f04bb791 100644 (file)
@@ -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,
index bd295cc476e3344e8725b8effe329c40fc3af27f..c6216a7e164acf7fb3803d0b7c8a12ea1468aea6 100644 (file)
@@ -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);
index 00f99131826a32f633689359743da09d5d4ffdf1..ec7e1d92603a58f1383aab1d11b340620af20f4f 100644 (file)
@@ -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,
index a51afba633ab3065ea2391d64ec6cdb569c3b741..9c3bea76031da6f0382ce66d4882a90fd8e273a7 100644 (file)
@@ -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);
index deb64b902f573976ac0f3292add1798d51620296..74f38832e6a17f9df618d8a076e0884fac9d3dde 100644 (file)
@@ -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,
index 7d3078b5c791bd1c12505ade5e170c72d265440f..8afa86cdb5df0fab33aef9264748f063ef77f69a 100644 (file)
@@ -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;
index 1cf5137991b45eaca970be40741034206e94473b..eef7a16cca1128df1b2924fbf602b4ed02de0043 100644 (file)
@@ -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,
index 63aec985c599d01d7c8fb228380e8e92de7a9d84..ff90d01f119bc90b1f7781e1bd0426bc22a0bbb5 100644 (file)
@@ -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);
index 4e8de815a69fae1d95e8f061989d7218f2f1e2f9..ce26f4cf85932fe9abcf418d958ac6d1a677b46f 100644 (file)
@@ -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,
index 8393809b9a1607241f3e179ac79061c8b91c4a82..61227d6271fd56d43297fd4016f0c15177caf5c0 100644 (file)
@@ -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);
index cc98fc4093eef0cbc31172fd1e586560066b62f8..520b3c2daaaa13a64d1913a14acc264d694b1779 100644 (file)
@@ -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,
index 8a48ebea6c816f10552ae2c34a5de893c7c3ca74..a46436733bc31c4f3c1eec55b0caa9bcedd1ba4b 100644 (file)
@@ -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;
 }
index 9b2cda14310405df35b8945b826ffc05bc26c7f9..52371b565aa0baedc25c05101d82ca745376e0a6 100644 (file)
@@ -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);
index 6ce89a25914f5a43b293ee7c5ff0d820ab393bb3..130a61bfe63f03230f52510ceab957ba78bab0f6 100644 (file)
@@ -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;
index c7aecfa86151392ad869c2a9b62c856f9db70b25..dd358cdc59f6e4e1ab4e81a7be96dbf0822c9992 100644 (file)
@@ -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);
 
index d307d81f5116ea0198445f4fc27aa0606ae1046a..1725308397049ab6956b8da5beeb924b882dc4a6 100644 (file)
@@ -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;
index 5061602ac841e19a2631f202ac9838a3aedce216..4ff2b6c51b568715d60cd637bda9c8acf7ecaea5 100644 (file)
@@ -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,
index 4a248228635c563823ad05cb76a6dd77f3120f19..3d426c0a98dad8791c4f3df0bc7f59b1cd3d958f 100644 (file)
@@ -7,6 +7,7 @@
 #include <gdk/gdk.h>
 #include <graphene.h>
 
+typedef struct _GskVulkanOp GskVulkanOp;
 typedef struct _GskVulkanOpClass GskVulkanOpClass;
 typedef struct _GskVulkanRender GskVulkanRender;
 typedef struct _GskVulkanRenderPass GskVulkanRenderPass;
index 2dc1d7dc1903f8b9035fcef31baee6488a597908..59aa54f233dbb502dce54ca7913afa3a620d58c3 100644 (file)
@@ -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);
index ab4422a2aa01aff3ef2067e5463ee0851fc719ff..f8c0e1fc1de5c412c3ea470200c89040fd0e0193 100644 (file)
@@ -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);
index f4e41fe407d1de33c3a4f66b9737f8c1a258e457..925aef58089c78f98eab53643b1c2772ac35f1d7 100644 (file)
 
 #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);
+}
+
index 008328329a362daf6a74def5f3c80c11172640a4..c902c55802673ebef44df50150c291ccfa806289 100644 (file)
 
 #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);
 }
 
index db2278b0cb0bbf3205497e98740d980cd3934043..3625dea3f4071048c1540ae81eb8043733f8f4ae 100644 (file)
@@ -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);
index 728a606c4e000b5ae5503af94c3aa15a28a9d25d..8b8d2148d8091928d43a85293016b25b8a310959 100644 (file)
@@ -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);
index c2fa3dff7b555c18881e1a94b37a7abc60e289ab..b5b40dc1f2d72ad806e18cf33c2fb918c00365be 100644 (file)
@@ -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;
 }
index a4f637d8ccc557bf394b00c4e2d121437aee7a14..ae093764b4cf58839ece3d4db1d0acd4a8b20ad8 100644 (file)
@@ -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);
 
 
index eedee006ff756408dda512a46b59c459e5e4f6ae..37e3be40cd7597929b19f42086de6c3135eea4e3 100644 (file)
@@ -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);
index 6c9dd9d68de47fc5a24d5395a4afd91623284633..f67795cfb0f645998bedac4433009cb95de6eb4a 100644 (file)
@@ -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,
index 72bc6272edeabd8bf39c39086e6535bd4be37539..e5c78010b661746fd00a5628908bd7236f6ba8a8 100644 (file)
@@ -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,
index 5dc55413a2a6d930081211494f474a7fd6425b47..ab966c5db7eeded1b98fec844ee0b588bea29d72 100644 (file)
@@ -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,
index 1a0eb6dfc0b92fe7ef71c405c063dac1c57482f8..d426bad44a3f1a9a882775d5fce97d7083e324df 100644 (file)
@@ -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,
index fb683b23358260b2b9aa930e287b44f5de76e3e4..2948a879d4bfac5a4def4610c3cea3009e1bf792 100644 (file)
@@ -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);