vulkan: Add infrastructure for printing ops
authorBenjamin Otte <otte@redhat.com>
Wed, 5 Jul 2023 04:32:52 +0000 (06:32 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 16 Jul 2023 10:13:00 +0000 (12:13 +0200)
... and add a GSK_DEBUG=verbose setting making use of it.

26 files changed:
gsk/gskdebug.c
gsk/gskdebugprivate.h
gsk/vulkan/gskvulkanblendmodeop.c
gsk/vulkan/gskvulkanblurop.c
gsk/vulkan/gskvulkanborderop.c
gsk/vulkan/gskvulkancolormatrixop.c
gsk/vulkan/gskvulkancolorop.c
gsk/vulkan/gskvulkancrossfadeop.c
gsk/vulkan/gskvulkanglyphop.c
gsk/vulkan/gskvulkanimageprivate.h
gsk/vulkan/gskvulkaninsetshadowop.c
gsk/vulkan/gskvulkanlineargradientop.c
gsk/vulkan/gskvulkanmaskop.c
gsk/vulkan/gskvulkanoffscreenop.c
gsk/vulkan/gskvulkanop.c
gsk/vulkan/gskvulkanopprivate.h
gsk/vulkan/gskvulkanoutsetshadowop.c
gsk/vulkan/gskvulkanprivate.h
gsk/vulkan/gskvulkanpushconstantsop.c
gsk/vulkan/gskvulkanrender.c
gsk/vulkan/gskvulkanrenderpass.c
gsk/vulkan/gskvulkanrenderpassprivate.h
gsk/vulkan/gskvulkanscissorop.c
gsk/vulkan/gskvulkantextureop.c
gsk/vulkan/gskvulkanuploadcairoop.c
gsk/vulkan/gskvulkanuploadop.c

index 811616e6832f8145a20e2cf33125545af94cab1d..252fe17167414e588ce89ccd1f692a4e7025f7fb 100644 (file)
@@ -12,6 +12,7 @@ static const GdkDebugKey gsk_debug_keys[] = {
   { "surface", GSK_DEBUG_SURFACE, "Information about surfaces" },
   { "fallback", GSK_DEBUG_FALLBACK, "Information about fallbacks" },
   { "glyphcache", GSK_DEBUG_GLYPH_CACHE, "Information about glyph caching" },
+  { "verbose", GSK_DEBUG_VERBOSE, "Print verbose output while rendering" },
   { "geometry", GSK_DEBUG_GEOMETRY, "Show borders (when using cairo)" },
   { "full-redraw", GSK_DEBUG_FULL_REDRAW, "Force full redraws" },
   { "sync", GSK_DEBUG_SYNC, "Sync after each frame" },
index 405cbd7877091164fa684dd7960f2c862c8c95a9..aac8906da52832acbd2c7692bf2900d419cfbe02 100644 (file)
@@ -14,6 +14,7 @@ typedef enum {
   GSK_DEBUG_VULKAN                = 1 <<  5,
   GSK_DEBUG_FALLBACK              = 1 <<  6,
   GSK_DEBUG_GLYPH_CACHE           = 1 <<  7,
+  GSK_DEBUG_VERBOSE               = 1 <<  8,
   /* flags below may affect behavior */
   GSK_DEBUG_GEOMETRY              = 1 <<  9,
   GSK_DEBUG_FULL_REDRAW           = 1 << 10,
index 2556818453208d2d8fdc179126bc30258ca7df5d..7453a0a25ae96d38c9cdc07cad06eae7106b6345 100644 (file)
@@ -34,6 +34,19 @@ gsk_vulkan_blend_mode_op_finish (GskVulkanOp *op)
   g_object_unref (self->bottom.image);
 }
 
+static void
+gsk_vulkan_blend_mode_op_print (GskVulkanOp *op,
+                                GString     *string,
+                                guint        indent)
+{
+  GskVulkanBlendModeOp *self = (GskVulkanBlendModeOp *) op;
+
+  print_indent (string, indent);
+  print_rect (string, &self->bounds);
+  g_string_append_printf (string, "blend-mode %d%% ", self->blend_mode);
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_blend_mode_op_upload (GskVulkanOp           *op,
                                  GskVulkanRenderPass   *pass,
@@ -114,6 +127,7 @@ static const GskVulkanShaderOpClass GSK_VULKAN_BLEND_MODE_OP_CLASS = {
   "blend-mode",
   &gsk_vulkan_blend_mode_info,
   gsk_vulkan_blend_mode_op_finish,
+  gsk_vulkan_blend_mode_op_print,
   gsk_vulkan_blend_mode_op_upload,
   gsk_vulkan_blend_mode_op_count_vertex_data,
   gsk_vulkan_blend_mode_op_collect_vertex_data,
index 97dd5900eed30aa1cb241e4930f0279606bd0a82..f14c8e152beeeec0261340d250e70153e7b1306f 100644 (file)
@@ -29,6 +29,20 @@ gsk_vulkan_blur_op_finish (GskVulkanOp *op)
   g_object_unref (self->image);
 }
 
+static void
+gsk_vulkan_blur_op_print (GskVulkanOp *op,
+                          GString     *string,
+                          guint        indent)
+{
+  GskVulkanBlurOp *self = (GskVulkanBlurOp *) op;
+
+  print_indent (string, indent);
+  print_rect (string, &self->rect);
+  g_string_append_printf (string, "blur %g",
+                          self->radius);
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_blur_op_upload (GskVulkanOp           *op,
                            GskVulkanRenderPass   *pass,
@@ -101,6 +115,7 @@ static const GskVulkanOpClass GSK_VULKAN_BLUR_OP_CLASS = {
   "blur",
   &gsk_vulkan_blur_info,
   gsk_vulkan_blur_op_finish,
+  gsk_vulkan_blur_op_print,
   gsk_vulkan_blur_op_upload,
   gsk_vulkan_blur_op_count_vertex_data,
   gsk_vulkan_blur_op_collect_vertex_data,
index 63866265aedb97270af904d7125ac2850bef60de..967d40e1f072a8b3d5a112e986d2403d1001c787 100644 (file)
@@ -25,6 +25,34 @@ gsk_vulkan_border_op_finish (GskVulkanOp *op)
 {
 }
 
+static void
+gsk_vulkan_border_op_print (GskVulkanOp *op,
+                            GString     *string,
+                            guint        indent)
+{
+  GskVulkanBorderOp *self = (GskVulkanBorderOp *) op;
+
+  print_indent (string, indent);
+  print_rounded_rect (string, &self->outline);
+  g_string_append (string, "border ");
+  print_rgba (string, &self->colors[0]);
+  if (!gdk_rgba_equal (&self->colors[3], &self->colors[0]) ||
+      !gdk_rgba_equal (&self->colors[2], &self->colors[0]) ||
+      !gdk_rgba_equal (&self->colors[1], &self->colors[0]))
+    {
+      print_rgba (string, &self->colors[1]);
+      print_rgba (string, &self->colors[2]);
+      print_rgba (string, &self->colors[3]);
+    }
+  g_string_append_printf (string, "%g ", self->widths[0]);
+  if (self->widths[0] != self->widths[1] ||
+      self->widths[0] != self->widths[2] ||
+      self->widths[0] != self->widths[3])
+    g_string_append_printf (string, "%g %g %g ", self->widths[1], self->widths[2], self->widths[3]);
+
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_border_op_upload (GskVulkanOp           *op,
                              GskVulkanRenderPass   *pass,
@@ -95,6 +123,7 @@ static const GskVulkanOpClass GSK_VULKAN_BORDER_OP_CLASS = {
   "border",
   &gsk_vulkan_border_info,
   gsk_vulkan_border_op_finish,
+  gsk_vulkan_border_op_print,
   gsk_vulkan_border_op_upload,
   gsk_vulkan_border_op_count_vertex_data,
   gsk_vulkan_border_op_collect_vertex_data,
index bff05a9127458f12d781fda4ad4e3fbce61d535d..869d04feb0e51d31367b3a29badaac84e242206a 100644 (file)
@@ -30,6 +30,19 @@ gsk_vulkan_color_matrix_op_finish (GskVulkanOp *op)
   g_object_unref (self->image);
 }
 
+static void
+gsk_vulkan_color_matrix_op_print (GskVulkanOp *op,
+                                  GString     *string,
+                                  guint        indent)
+{
+  GskVulkanColorMatrixOp *self = (GskVulkanColorMatrixOp *) op;
+
+  print_indent (string, indent);
+  print_rect (string, &self->rect);
+  g_string_append (string, "color-matrix ");
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_color_matrix_op_upload (GskVulkanOp           *op,
                                    GskVulkanRenderPass   *pass,
@@ -109,6 +122,7 @@ static const GskVulkanOpClass GSK_VULKAN_COLOR_MATRIX_OP_CLASS = {
   "color-matrix",
   &gsk_vulkan_color_matrix_info,
   gsk_vulkan_color_matrix_op_finish,
+  gsk_vulkan_color_matrix_op_print,
   gsk_vulkan_color_matrix_op_upload,
   gsk_vulkan_color_matrix_op_count_vertex_data,
   gsk_vulkan_color_matrix_op_collect_vertex_data,
index 6aa3ef6f9bcb0fcc22fda732aaf0f2eeb56fd1fb..96e68cdaba78c292b7cadd1a0747bec6ced7c0af 100644 (file)
@@ -2,6 +2,8 @@
 
 #include "gskvulkancoloropprivate.h"
 
+#include "gskvulkanprivate.h"
+
 #include "vulkan/resources/color.vert.h"
 
 typedef struct _GskVulkanColorOp GskVulkanColorOp;
@@ -49,6 +51,20 @@ gsk_vulkan_color_op_count_vertex_data (GskVulkanOp *op,
   return n_bytes;
 }
 
+static void
+gsk_vulkan_color_op_print (GskVulkanOp *op,
+                           GString     *string,
+                           guint        indent)
+{
+  GskVulkanColorOp *self = (GskVulkanColorOp *) op;
+
+  print_indent (string, indent);
+  print_rect (string, &self->rect);
+  g_string_append (string, "color ");
+  print_rgba (string, &self->color);
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_color_op_collect_vertex_data (GskVulkanOp         *op,
                                          GskVulkanRenderPass *pass,
@@ -92,6 +108,7 @@ static const GskVulkanOpClass GSK_VULKAN_COLOR_OP_CLASS = {
   "color",
   &gsk_vulkan_color_info,
   gsk_vulkan_color_op_finish,
+  gsk_vulkan_color_op_print,
   gsk_vulkan_color_op_upload,
   gsk_vulkan_color_op_count_vertex_data,
   gsk_vulkan_color_op_collect_vertex_data,
index d3c66a96f001791212068bf1e7e80f6bcb42c7a4..64b9920decb4c9192441059012462b29c4006fd0 100644 (file)
@@ -34,6 +34,19 @@ gsk_vulkan_cross_fade_op_finish (GskVulkanOp *op)
   g_object_unref (self->end.image);
 }
 
+static void
+gsk_vulkan_cross_fade_op_print (GskVulkanOp *op,
+                                GString     *string,
+                                guint        indent)
+{
+  GskVulkanCrossFadeOp *self = (GskVulkanCrossFadeOp *) op;
+
+  print_indent (string, indent);
+  print_rect (string, &self->bounds);
+  g_string_append_printf (string, "cross-fade %d%% ", (int) (self->progress * 100 + 0.5));
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_cross_fade_op_upload (GskVulkanOp           *op,
                                  GskVulkanRenderPass   *pass,
@@ -114,6 +127,7 @@ static const GskVulkanOpClass GSK_VULKAN_CROSS_FADE_OP_CLASS = {
   "cross-fade",
   &gsk_vulkan_cross_fade_info,
   gsk_vulkan_cross_fade_op_finish,
+  gsk_vulkan_cross_fade_op_print,
   gsk_vulkan_cross_fade_op_upload,
   gsk_vulkan_cross_fade_op_count_vertex_data,
   gsk_vulkan_cross_fade_op_collect_vertex_data,
index b18028cd7a54553a7aa3503c64cfe90f723da8d6..5d903cfdc0dea2084072f059427d6a207467b939 100644 (file)
@@ -37,6 +37,20 @@ gsk_vulkan_glyph_op_upload (GskVulkanOp         *op,
 {
 }
 
+static void
+gsk_vulkan_glyph_op_print (GskVulkanOp *op,
+                           GString     *string,
+                           guint        indent)
+{
+  GskVulkanGlyphOp *self = (GskVulkanGlyphOp *) op;
+
+  print_indent (string, indent);
+  print_rect (string, &self->rect);
+  g_string_append (string, "glyph ");
+  print_rgba (string, &self->color);
+  print_newline (string);
+}
+
 static inline gsize
 round_up (gsize number, gsize divisor)
 {
@@ -99,6 +113,7 @@ static const GskVulkanOpClass GSK_VULKAN_GLYPH_OP_CLASS = {
   "glyph",
   &gsk_vulkan_glyph_info,
   gsk_vulkan_glyph_op_finish,
+  gsk_vulkan_glyph_op_print,
   gsk_vulkan_glyph_op_upload,
   gsk_vulkan_glyph_op_count_vertex_data,
   gsk_vulkan_glyph_op_collect_vertex_data,
index b70019eead4e8fad1ba155d4d435cc33e8c32a29..9daae9fd2401f73078692a08bf9876a348bebb84 100644 (file)
@@ -84,5 +84,14 @@ VkImageView             gsk_vulkan_image_get_image_view                 (GskVulk
 VkFormat                gsk_vulkan_image_get_vk_format                  (GskVulkanImage         *self);
 GdkMemoryFormat         gsk_vulkan_image_get_format                     (GskVulkanImage         *self);
 
+static inline void
+print_image (GString        *string,
+             GskVulkanImage *image)
+{
+  g_string_append_printf (string, "%zux%zu ",
+                          gsk_vulkan_image_get_width (image),
+                          gsk_vulkan_image_get_height (image));
+}
+
 G_END_DECLS
 
index 727f9bc3b84563631a92f94cce881ec2b9e6f538..2d76008928c22696ea26ad7a780c815f5b267d1a 100644 (file)
@@ -27,6 +27,21 @@ gsk_vulkan_inset_shadow_op_finish (GskVulkanOp *op)
 {
 }
 
+static void
+gsk_vulkan_inset_shadow_op_print (GskVulkanOp *op,
+                                  GString     *string,
+                                  guint        indent)
+{
+  GskVulkanInsetShadowOp *self = (GskVulkanInsetShadowOp *) op;
+
+  print_indent (string, indent);
+  print_rounded_rect (string, &self->outline);
+  g_string_append (string, "inset-shadow ");
+  if (self->blur_radius > 0)
+    g_string_append_printf (string, "blur %gpx ", self->blur_radius);
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_inset_shadow_op_upload (GskVulkanOp           *op,
                                    GskVulkanRenderPass   *pass,
@@ -95,6 +110,7 @@ static const GskVulkanOpClass GSK_VULKAN_INSET_SHADOW_OP_CLASS = {
   "inset-shadow",
   &gsk_vulkan_inset_shadow_info,
   gsk_vulkan_inset_shadow_op_finish,
+  gsk_vulkan_inset_shadow_op_print,
   gsk_vulkan_inset_shadow_op_upload,
   gsk_vulkan_inset_shadow_op_count_vertex_data,
   gsk_vulkan_inset_shadow_op_collect_vertex_data,
index 8277ee46936b5ef11dcbf6c2db7e9af4b205ba8d..63020b46a70556b949214b0857f76098f79d20ac 100644 (file)
@@ -31,6 +31,19 @@ gsk_vulkan_linear_gradient_op_finish (GskVulkanOp *op)
   g_free (self->stops);
 }
 
+static void
+gsk_vulkan_linear_gradient_op_print (GskVulkanOp *op,
+                                     GString     *string,
+                                     guint        indent)
+{
+  GskVulkanLinearGradientOp *self = (GskVulkanLinearGradientOp *) op;
+
+  print_indent (string, indent);
+  print_rect (string, &self->rect);
+  g_string_append_printf (string, "linear-gradient (%zu stops)", self->n_stops);
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_linear_gradient_op_upload (GskVulkanOp           *op,
                                       GskVulkanRenderPass   *pass,
@@ -108,6 +121,7 @@ static const GskVulkanOpClass GSK_VULKAN_LINEAR_GRADIENT_OP_CLASS = {
   "linear",
   &gsk_vulkan_linear_info,
   gsk_vulkan_linear_gradient_op_finish,
+  gsk_vulkan_linear_gradient_op_print,
   gsk_vulkan_linear_gradient_op_upload,
   gsk_vulkan_linear_gradient_op_count_vertex_data,
   gsk_vulkan_linear_gradient_op_collect_vertex_data,
index c6311dc038c07c453295bd54a6554532f9580ee8..ce9f4669d9f879a2142e86898c8604cd5ae99e61 100644 (file)
@@ -32,6 +32,38 @@ gsk_vulkan_mask_op_finish (GskVulkanOp *op)
   g_object_unref (self->mask.image);
 }
 
+static void
+gsk_vulkan_mask_op_print (GskVulkanOp *op,
+                          GString     *string,
+                          guint        indent)
+{
+  GskVulkanMaskOp *self = (GskVulkanMaskOp *) op;
+
+  print_indent (string, indent);
+  print_rect (string, &self->source.rect);
+  g_string_append (string, "mask ");
+  print_rect (string, &self->mask.rect);
+  switch (self->mask_mode)
+  {
+    case GSK_MASK_MODE_ALPHA:
+      g_string_append (string, "alpha ");
+      break;
+    case GSK_MASK_MODE_INVERTED_ALPHA:
+      g_string_append (string, "inverted-alpha ");
+      break;
+    case GSK_MASK_MODE_LUMINANCE:
+      g_string_append (string, "luminance ");
+      break;
+    case GSK_MASK_MODE_INVERTED_LUMINANCE:
+      g_string_append (string, "inverted-luminance ");
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_mask_op_upload (GskVulkanOp         *op,
                            GskVulkanRenderPass *pass,
@@ -106,6 +138,7 @@ static const GskVulkanOpClass GSK_VULKAN_COLOR_MASK_OP_CLASS = {
   "mask",
   &gsk_vulkan_mask_info,
   gsk_vulkan_mask_op_finish,
+  gsk_vulkan_mask_op_print,
   gsk_vulkan_mask_op_upload,
   gsk_vulkan_mask_op_count_vertex_data,
   gsk_vulkan_mask_op_collect_vertex_data,
index 5e04c72a2c6ee8ab71a1868aa7149f0b715843e0..55f7ba9cfb995d321ff57c2f45b4df74d9b73f79 100644 (file)
@@ -3,6 +3,7 @@
 #include "gskvulkanoffscreenopprivate.h"
 
 #include "gskrendernodeprivate.h"
+#include "gskvulkanprivate.h"
 
 #include "gdk/gdkvulkancontextprivate.h"
 
@@ -25,6 +26,22 @@ gsk_vulkan_offscreen_op_finish (GskVulkanOp *op)
   gsk_vulkan_render_pass_free (self->render_pass);
 }
 
+static void
+gsk_vulkan_offscreen_op_print (GskVulkanOp *op,
+                               GString     *string,
+                               guint        indent)
+{
+  GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op;
+
+  print_indent (string, indent);
+  g_string_append_printf (string, "offscreen %zux%zu ",
+                          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,
                                 GskVulkanRenderPass   *pass,
@@ -76,6 +93,7 @@ static const GskVulkanOpClass GSK_VULKAN_OFFSCREEN_OP_CLASS = {
   NULL,
   NULL,
   gsk_vulkan_offscreen_op_finish,
+  gsk_vulkan_offscreen_op_print,
   gsk_vulkan_offscreen_op_upload,
   gsk_vulkan_offscreen_op_count_vertex_data,
   gsk_vulkan_offscreen_op_collect_vertex_data,
index 4723815b4bd4921d647b276bcb5e1c9581db4762..d0878f91a4b3e2ab69623715d1a41551342fed50 100644 (file)
@@ -21,6 +21,14 @@ gsk_vulkan_op_finish (GskVulkanOp *op)
   op->op_class->finish (op);
 }
 
+void
+gsk_vulkan_op_print (GskVulkanOp *op,
+                     GString     *string,
+                     guint        indent)
+{
+  op->op_class->print (op, string, indent);
+}
+
 void
 gsk_vulkan_op_upload (GskVulkanOp         *op,
                       GskVulkanRenderPass *pass,
index 3f49dd49ec31a581d5df197b349ed7552468f2f5..c198e1b3e373ef12d6cea20fd083f4b2ff8c6b70 100644 (file)
@@ -25,6 +25,10 @@ struct _GskVulkanOpClass
 
   void                  (* finish)                                      (GskVulkanOp            *op);
 
+  void                  (* print)                                       (GskVulkanOp            *op,
+                                                                         GString                *string,
+                                                                         guint                   indent);
+
   void                  (* upload)                                      (GskVulkanOp            *op,
                                                                          GskVulkanRenderPass    *pass,
                                                                          GskVulkanRender        *render,
@@ -50,6 +54,10 @@ GskVulkanOp *           gsk_vulkan_op_alloc                             (GskVulk
                                                                          const GskVulkanOpClass *op_class);
 void                    gsk_vulkan_op_finish                            (GskVulkanOp            *op);
 
+void                    gsk_vulkan_op_print                             (GskVulkanOp            *op,
+                                                                         GString                *string,
+                                                                         guint                   indent);
+
 void                    gsk_vulkan_op_upload                            (GskVulkanOp            *op,
                                                                          GskVulkanRenderPass    *pass,
                                                                          GskVulkanRender        *render,
index 1fbd745591607caa55574c4b270120303fc4d09b..9e59ca20a4a3637d3f61fe57073be84b8377ddf7 100644 (file)
@@ -27,6 +27,21 @@ gsk_vulkan_outset_shadow_op_finish (GskVulkanOp *op)
 {
 }
 
+static void
+gsk_vulkan_outset_shadow_op_print (GskVulkanOp *op,
+                                   GString     *string,
+                                   guint        indent)
+{
+  GskVulkanOutsetShadowOp *self = (GskVulkanOutsetShadowOp *) op;
+
+  print_indent (string, indent);
+  print_rounded_rect (string, &self->outline);
+  g_string_append (string, "outset-shadow ");
+  if (self->blur_radius > 0)
+    g_string_append_printf (string, "blur %gpx ", self->blur_radius);
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_outset_shadow_op_upload (GskVulkanOp           *op,
                                     GskVulkanRenderPass   *pass,
@@ -95,6 +110,7 @@ static const GskVulkanOpClass GSK_VULKAN_OUTSET_SHADOW_OP_CLASS = {
   "outset-shadow",
   &gsk_vulkan_outset_shadow_info,
   gsk_vulkan_outset_shadow_op_finish,
+  gsk_vulkan_outset_shadow_op_print,
   gsk_vulkan_outset_shadow_op_upload,
   gsk_vulkan_outset_shadow_op_count_vertex_data,
   gsk_vulkan_outset_shadow_op_collect_vertex_data,
index 5cad3ac144d861da334d59f2bf41d269b3dd8e21..1ec1f9b7200035d5f6e0b09a81d6ce637925e077 100644 (file)
@@ -2,6 +2,8 @@
 
 #include "gskdebugprivate.h"
 
+#include "gskroundedrectprivate.h"
+
 #include <gdk/gdk.h>
 #include <graphene.h>
 
@@ -58,3 +60,78 @@ gsk_vulkan_point_to_float (const graphene_point_t *point,
   values[1] = point->y;
 }
 
+
+static inline void
+print_indent (GString *string,
+              guint    indent)
+{
+  g_string_append_printf (string, "%*s", 2 * indent, "");
+}
+
+static inline void
+print_rect (GString               *string,
+            const graphene_rect_t *rect)
+{
+  g_string_append_printf (string, "%g %g %g %g ",
+                          rect->origin.x, rect->origin.y,
+                          rect->size.width, rect->size.height);
+}
+
+static inline void
+print_int_rect (GString                     *string,
+                const cairo_rectangle_int_t *rect)
+{
+  g_string_append_printf (string, "%d %d %d %d ",
+                          rect->x, rect->y,
+                          rect->width, rect->height);
+}
+
+static inline void
+print_rounded_rect (GString              *string,
+                    const GskRoundedRect *rect)
+{
+  print_rect (string, &rect->bounds);
+
+  if (gsk_rounded_rect_is_rectilinear (rect))
+    return;
+
+  g_string_append (string, "/ ");
+
+  if (rect->corner[0].width != rect->corner[0].height ||
+      rect->corner[1].width != rect->corner[1].height ||
+      rect->corner[2].width != rect->corner[2].height ||
+      rect->corner[3].width != rect->corner[3].height)
+    {
+      g_string_append (string, "variable ");
+    }
+  else if (rect->corner[0].width != rect->corner[1].width ||
+           rect->corner[0].width != rect->corner[2].width ||
+           rect->corner[0].width != rect->corner[3].width)
+    {
+      g_string_append_printf (string, "%g %g %g %g ",
+                              rect->corner[0].width, rect->corner[1].width,
+                              rect->corner[2].width, rect->corner[3].width);
+    }
+  else
+    {
+      g_string_append_printf (string, "%g ", rect->corner[0].width);
+    }
+}
+static inline void
+print_rgba (GString       *string,
+            const GdkRGBA *rgba)
+{
+  char *s = gdk_rgba_to_string (rgba);
+  g_string_append (string, s);
+  g_string_append_c (string, ' ');
+  g_free (s);
+}
+
+static inline void
+print_newline (GString *string)
+{
+  if (string->len && string->str[string->len - 1] == ' ')
+    string->str[string->len - 1] = '\n';
+  else
+    g_string_append_c (string, '\n');
+}
index ddab7a12668b6eabd1a259e332d8352ad8f9f9b7..f16474d391878ec683fca74e5b1309d4dfb5be10 100644 (file)
@@ -3,6 +3,7 @@
 #include "gskvulkanpushconstantsopprivate.h"
 
 #include "gskroundedrectprivate.h"
+#include "gskvulkanprivate.h"
 
 typedef struct _GskVulkanPushConstantsOp GskVulkanPushConstantsOp;
 typedef struct _GskVulkanPushConstantsInstance GskVulkanPushConstantsInstance;
@@ -46,6 +47,16 @@ gsk_vulkan_push_constants_op_finish (GskVulkanOp *op)
 {
 }
 
+static void
+gsk_vulkan_push_constants_op_print (GskVulkanOp *op,
+                                    GString     *string,
+                                    guint        indent)
+{
+  print_indent (string, indent);
+  g_string_append_printf (string, "push-constants ");
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_push_constants_op_upload (GskVulkanOp           *op,
                                      GskVulkanRenderPass   *pass,
@@ -96,6 +107,7 @@ static const GskVulkanOpClass GSK_VULKAN_PUSH_CONSTANTS_OP_CLASS = {
   NULL,
   NULL,
   gsk_vulkan_push_constants_op_finish,
+  gsk_vulkan_push_constants_op_print,
   gsk_vulkan_push_constants_op_upload,
   gsk_vulkan_push_constants_op_count_vertex_data,
   gsk_vulkan_push_constants_op_collect_vertex_data,
index 8a0fb2cd2e80c5a807ab8bffdd8c764e88340817..58ae72e903b91f43c97894584ff5479020326b1e 100644 (file)
@@ -101,6 +101,22 @@ pipeline_cache_key_equal (gconstpointer a,
          keya->format == keyb->format;
 }
 
+static void
+gsk_vulkan_render_verbose_print (GskVulkanRender *self,
+                                 const char      *heading)
+{
+#ifdef G_ENABLE_DEBUG
+  if (GSK_RENDERER_DEBUG_CHECK (self->renderer, VERBOSE))
+    {
+      GString *string = g_string_new (heading);
+      g_string_append (string, ":\n");
+      gsk_vulkan_render_pass_print (g_list_last (self->render_passes)->data, string, 1);
+      g_print ("%s\n", string->str);
+      g_string_free (string, TRUE);
+    }
+#endif
+}
+
 static void
 gsk_vulkan_render_setup (GskVulkanRender       *self,
                          GskVulkanImage        *target,
@@ -345,6 +361,8 @@ gsk_vulkan_render_add_node (GskVulkanRender *self,
   gsk_vulkan_render_add_render_pass (self, pass);
 
   gsk_vulkan_render_pass_add (pass, self, node);
+
+  gsk_vulkan_render_verbose_print (self, "start of frame");
 }
 
 void
index b1e55b2f6a0c54762f8708c9e55bff27cdd2ab09..0079ec13751d626a79e1b096bd453eeb14e42339 100644 (file)
@@ -204,6 +204,22 @@ 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);
+    }
+}
+
 static inline gsize
 round_up (gsize number, gsize divisor)
 {
index cd5bb678c64219cbafd03582e899cc7b5424440b..6b7f46f93edb6e2ce083633bd70e210e574adf7a 100644 (file)
@@ -23,6 +23,10 @@ void                    gsk_vulkan_render_pass_add                      (GskVulk
                                                                          GskVulkanRender        *render,
                                                                          GskRenderNode          *node);
 
+void                    gsk_vulkan_render_pass_print                    (GskVulkanRenderPass    *self,
+                                                                         GString                *string,
+                                                                         guint                   indent);
+
 gpointer                gsk_vulkan_render_pass_alloc_op                 (GskVulkanRenderPass    *self,
                                                                          gsize                   size);
 
index d0e90543181d4094cdc4f560458176fd0699eb4d..87027799563691822852fc1efb1e5e1d7e81cb04 100644 (file)
@@ -2,6 +2,8 @@
 
 #include "gskvulkanscissoropprivate.h"
 
+#include "gskvulkanprivate.h"
+
 typedef struct _GskVulkanScissorOp GskVulkanScissorOp;
 
 struct _GskVulkanScissorOp
@@ -16,6 +18,19 @@ gsk_vulkan_scissor_op_finish (GskVulkanOp *op)
 {
 }
 
+static void
+gsk_vulkan_scissor_op_print (GskVulkanOp *op,
+                             GString     *string,
+                             guint        indent)
+{
+  GskVulkanScissorOp *self = (GskVulkanScissorOp *) op;
+
+  print_indent (string, indent);
+  print_int_rect (string, &self->rect);
+  g_string_append_printf (string, "scissor ");
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_scissor_op_upload (GskVulkanOp           *op,
                               GskVulkanRenderPass   *pass,
@@ -67,6 +82,7 @@ static const GskVulkanOpClass GSK_VULKAN_SCISSOR_OP_CLASS = {
   NULL,
   NULL,
   gsk_vulkan_scissor_op_finish,
+  gsk_vulkan_scissor_op_print,
   gsk_vulkan_scissor_op_upload,
   gsk_vulkan_scissor_op_count_vertex_data,
   gsk_vulkan_scissor_op_collect_vertex_data,
index 2943a116e04a28acaae5086b696a161ecdd5d70f..1b4afeae5776aa6d61d3832b742aae4cfb680d61 100644 (file)
@@ -29,6 +29,20 @@ gsk_vulkan_texture_op_finish (GskVulkanOp *op)
   g_object_unref (self->image);
 }
 
+static void
+gsk_vulkan_texture_op_print (GskVulkanOp *op,
+                             GString     *string,
+                             guint        indent)
+{
+  GskVulkanTextureOp *self = (GskVulkanTextureOp *) op;
+
+  print_indent (string, indent);
+  print_rect (string, &self->rect);
+  g_string_append (string, "texture ");
+  print_image (string, self->image);
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_texture_op_upload (GskVulkanOp           *op,
                               GskVulkanRenderPass   *pass,
@@ -104,6 +118,7 @@ static const GskVulkanOpClass GSK_VULKAN_TEXTURE_OP_CLASS = {
   "texture",
   &gsk_vulkan_texture_info,
   gsk_vulkan_texture_op_finish,
+  gsk_vulkan_texture_op_print,
   gsk_vulkan_texture_op_upload,
   gsk_vulkan_texture_op_count_vertex_data,
   gsk_vulkan_texture_op_collect_vertex_data,
index 259fc60283648419469964687113d8c0b7b5f8bc..93f2f758c6ecb4dc41a55407c276a7e07a8e8c8b 100644 (file)
@@ -2,6 +2,8 @@
 
 #include "gskvulkanuploadcairoopprivate.h"
 
+#include "gskvulkanprivate.h"
+
 typedef struct _GskVulkanUploadCairoOp GskVulkanUploadCairoOp;
 
 struct _GskVulkanUploadCairoOp
@@ -22,6 +24,19 @@ gsk_vulkan_upload_cairo_op_finish (GskVulkanOp *op)
   gsk_render_node_unref (self->node);
 }
 
+static void
+gsk_vulkan_upload_cairo_op_print (GskVulkanOp *op,
+                                  GString     *string,
+                                  guint        indent)
+{
+  GskVulkanUploadCairoOp *self = (GskVulkanUploadCairoOp *) op;
+
+  print_indent (string, indent);
+  g_string_append (string, "upload-cairo ");
+  print_image (string, self->image);
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_upload_cairo_op_upload (GskVulkanOp           *op,
                                    GskVulkanRenderPass   *pass,
@@ -92,6 +107,7 @@ static const GskVulkanOpClass GSK_VULKAN_UPLOAD_CAIRO_OP_CLASS = {
   NULL,
   NULL,
   gsk_vulkan_upload_cairo_op_finish,
+  gsk_vulkan_upload_cairo_op_print,
   gsk_vulkan_upload_cairo_op_upload,
   gsk_vulkan_upload_cairo_op_count_vertex_data,
   gsk_vulkan_upload_cairo_op_collect_vertex_data,
index 119c6e544d63466d50c6ec56730586df046cd4f5..fe6d54f126ac0d2e0eeef242602959b9fff7490c 100644 (file)
@@ -2,6 +2,8 @@
 
 #include "gskvulkanuploadopprivate.h"
 
+#include "gskvulkanprivate.h"
+
 typedef struct _GskVulkanUploadOp GskVulkanUploadOp;
 
 struct _GskVulkanUploadOp
@@ -21,6 +23,19 @@ gsk_vulkan_upload_op_finish (GskVulkanOp *op)
   g_object_unref (self->texture);
 }
 
+static void
+gsk_vulkan_upload_op_print (GskVulkanOp *op,
+                            GString     *string,
+                            guint        indent)
+{
+  GskVulkanUploadOp *self = (GskVulkanUploadOp *) op;
+
+  print_indent (string, indent);
+  g_string_append (string, "upload ");
+  print_image (string, self->image);
+  print_newline (string);
+}
+
 static void
 gsk_vulkan_upload_op_upload (GskVulkanOp           *op,
                              GskVulkanRenderPass   *pass,
@@ -73,6 +88,7 @@ static const GskVulkanOpClass GSK_VULKAN_UPLOAD_OP_CLASS = {
   NULL,
   NULL,
   gsk_vulkan_upload_op_finish,
+  gsk_vulkan_upload_op_print,
   gsk_vulkan_upload_op_upload,
   gsk_vulkan_upload_op_count_vertex_data,
   gsk_vulkan_upload_op_collect_vertex_data,