vulkan: Stop differentiating rounded from cicular corners
authorBenjamin Otte <otte@redhat.com>
Tue, 23 May 2023 21:47:55 +0000 (23:47 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 4 Jun 2023 17:42:01 +0000 (19:42 +0200)
Our shaders can handle both, so don'ttry to tell them apart anymore.

Removes a lot of unnecessary fallbacks.

gsk/vulkan/gskvulkanclip.c
gsk/vulkan/gskvulkanclipprivate.h
gsk/vulkan/gskvulkanrenderpass.c

index 0d255d8148e271dcbbef2111063fa636bfb22174..72cc1454c4631cee0347ce0a9b59c92a3a515a63 100644 (file)
@@ -40,8 +40,6 @@ gsk_vulkan_clip_init_after_intersection (GskVulkanClip              *self,
     self->type = GSK_VULKAN_CLIP_ALL_CLIPPED;
   else if (gsk_rounded_rect_is_rectilinear (&self->rect))
     self->type = GSK_VULKAN_CLIP_RECT;
-  else if (gsk_rounded_rect_is_circular (&self->rect))
-    self->type = GSK_VULKAN_CLIP_ROUNDED_CIRCULAR;
   else
     self->type = GSK_VULKAN_CLIP_ROUNDED;
 
@@ -86,7 +84,6 @@ gsk_vulkan_clip_intersect_rect (GskVulkanClip         *dest,
         dest->type = GSK_VULKAN_CLIP_ALL_CLIPPED;
       break;
 
-    case GSK_VULKAN_CLIP_ROUNDED_CIRCULAR:
     case GSK_VULKAN_CLIP_ROUNDED:
       res = gsk_rounded_rect_intersect_with_rect (&src->rect, rect, &dest->rect);
       if (!gsk_vulkan_clip_init_after_intersection (dest, res))
@@ -126,7 +123,7 @@ gsk_vulkan_clip_intersect_rounded_rect (GskVulkanClip        *dest,
       break;
 
     case GSK_VULKAN_CLIP_NONE:
-      dest->type = gsk_rounded_rect_is_circular (rounded) ? GSK_VULKAN_CLIP_ROUNDED_CIRCULAR : GSK_VULKAN_CLIP_ROUNDED;
+      dest->type = GSK_VULKAN_CLIP_ROUNDED;
       gsk_rounded_rect_init_copy (&dest->rect, rounded);
       break;
 
@@ -136,7 +133,6 @@ gsk_vulkan_clip_intersect_rounded_rect (GskVulkanClip        *dest,
         return FALSE;
       break;
 
-    case GSK_VULKAN_CLIP_ROUNDED_CIRCULAR:
     case GSK_VULKAN_CLIP_ROUNDED:
       res = gsk_rounded_rect_intersection (&src->rect, rounded, &dest->rect);
       if (!gsk_vulkan_clip_init_after_intersection (dest, res))
@@ -185,7 +181,6 @@ gsk_vulkan_clip_transform (GskVulkanClip         *dest,
       return TRUE;
 
     case GSK_VULKAN_CLIP_RECT:
-    case GSK_VULKAN_CLIP_ROUNDED_CIRCULAR:
     case GSK_VULKAN_CLIP_ROUNDED:
       switch (gsk_transform_get_category (transform))
         {
@@ -262,7 +257,6 @@ gsk_vulkan_clip_intersects_rect (const GskVulkanClip    *self,
     case GSK_VULKAN_CLIP_RECT:
       return graphene_rect_intersection (&self->rect.bounds, &r, NULL);
 
-    case GSK_VULKAN_CLIP_ROUNDED_CIRCULAR:
     case GSK_VULKAN_CLIP_ROUNDED:
       return gsk_rounded_rect_intersects_rect (&self->rect, &r);
     }
@@ -290,7 +284,6 @@ gsk_vulkan_clip_contains_rect (const GskVulkanClip    *self,
     case GSK_VULKAN_CLIP_RECT:
       return graphene_rect_contains_rect (&self->rect.bounds, &r);
 
-    case GSK_VULKAN_CLIP_ROUNDED_CIRCULAR:
     case GSK_VULKAN_CLIP_ROUNDED:
       return gsk_rounded_rect_contains_rect (&self->rect, &r);
     }
index 7f7cba2e8a0c055406ed45ae5a0af94c3a11557e..f3cadfc3377c2c3b3b5869573d135ec6783abb96 100644 (file)
@@ -18,10 +18,6 @@ typedef enum {
   GSK_VULKAN_CLIP_NONE,
   /* The clip is a rectangular area */
   GSK_VULKAN_CLIP_RECT,
-  /* The clip is a rounded rectangle, and for every corner
-   * corner.width == corner.height is true
-   */
-  GSK_VULKAN_CLIP_ROUNDED_CIRCULAR,
   /* The clip is a rounded rectangle */
   GSK_VULKAN_CLIP_ROUNDED
 } GskVulkanClipComplexity;
index e2d750076914ce4295815443c42e1260168a064e..cacbfd3e4cd5072d6523c2c242cd0cd6504644c2 100644 (file)
@@ -322,7 +322,6 @@ gsk_vulkan_render_pass_add_fallback_node (GskVulkanRenderPass       *self,
         op.type = GSK_VULKAN_OP_FALLBACK_CLIP;
         gsk_rounded_rect_init_copy (&op.render.clip, &state->clip.rect);
         break;
-      case GSK_VULKAN_CLIP_ROUNDED_CIRCULAR:
       case GSK_VULKAN_CLIP_ROUNDED:
         op.type = GSK_VULKAN_OP_FALLBACK_ROUNDED_CLIP;
         gsk_rounded_rect_init_copy (&op.render.clip, &state->clip.rect);
@@ -397,10 +396,8 @@ gsk_vulkan_render_pass_add_color_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_COLOR;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_COLOR_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_COLOR_CLIP_ROUNDED;
   else
-    FALLBACK ("Color nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_COLOR_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -430,10 +427,8 @@ gsk_vulkan_render_pass_add_repeating_linear_gradient_node (GskVulkanRenderPass
     pipeline_type = GSK_VULKAN_PIPELINE_LINEAR_GRADIENT;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_LINEAR_GRADIENT_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_LINEAR_GRADIENT_CLIP_ROUNDED;
   else
-    FALLBACK ("Linear gradient nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_LINEAR_GRADIENT_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -458,10 +453,8 @@ gsk_vulkan_render_pass_add_border_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_BORDER;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_BORDER_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_BORDER_CLIP_ROUNDED;
   else
-    FALLBACK ("Border nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_BORDER_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -486,10 +479,8 @@ gsk_vulkan_render_pass_add_texture_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP_ROUNDED;
   else
-    FALLBACK ("Texture nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -514,10 +505,8 @@ gsk_vulkan_render_pass_add_texture_scale_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP_ROUNDED;
   else
-    FALLBACK ("Texture nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -544,10 +533,8 @@ gsk_vulkan_render_pass_add_inset_shadow_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_INSET_SHADOW;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_INSET_SHADOW_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_INSET_SHADOW_CLIP_ROUNDED;
   else
-    FALLBACK ("Inset shadow nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_INSET_SHADOW_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -574,10 +561,8 @@ gsk_vulkan_render_pass_add_outset_shadow_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_OUTSET_SHADOW;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_OUTSET_SHADOW_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_OUTSET_SHADOW_CLIP_ROUNDED;
   else
-    FALLBACK ("Outset shadow nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_OUTSET_SHADOW_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -756,10 +741,8 @@ gsk_vulkan_render_pass_add_opacity_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_COLOR_MATRIX;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_COLOR_MATRIX_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_COLOR_MATRIX_CLIP_ROUNDED;
   else
-    FALLBACK ("Opacity nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_COLOR_MATRIX_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -784,10 +767,8 @@ gsk_vulkan_render_pass_add_color_matrix_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_COLOR_MATRIX;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_COLOR_MATRIX_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_COLOR_MATRIX_CLIP_ROUNDED;
   else
-    FALLBACK ("Color matrix nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_COLOR_MATRIX_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -956,10 +937,8 @@ gsk_vulkan_render_pass_add_repeat_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP_ROUNDED;
   else
-    FALLBACK ("Repeat nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -984,10 +963,8 @@ gsk_vulkan_render_pass_add_blend_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_BLEND_MODE;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_BLEND_MODE_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_BLEND_MODE_CLIP_ROUNDED;
   else
-    FALLBACK ("Blend nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_BLEND_MODE_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -1012,10 +989,8 @@ gsk_vulkan_render_pass_add_cross_fade_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_CROSS_FADE;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_CROSS_FADE_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_CROSS_FADE_CLIP_ROUNDED;
   else
-    FALLBACK ("Cross fade nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_CROSS_FADE_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);
@@ -1054,10 +1029,8 @@ gsk_vulkan_render_pass_add_text_node (GskVulkanRenderPass       *self,
         pipeline_type = GSK_VULKAN_PIPELINE_COLOR_TEXT;
       else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
         pipeline_type = GSK_VULKAN_PIPELINE_COLOR_TEXT_CLIP;
-      else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-        pipeline_type = GSK_VULKAN_PIPELINE_COLOR_TEXT_CLIP_ROUNDED;
       else
-        FALLBACK ("Text nodes can't deal with clip type %u", state->clip.type);
+        pipeline_type = GSK_VULKAN_PIPELINE_COLOR_TEXT_CLIP_ROUNDED;
       op.type = GSK_VULKAN_OP_COLOR_TEXT;
     }
   else
@@ -1066,10 +1039,8 @@ gsk_vulkan_render_pass_add_text_node (GskVulkanRenderPass       *self,
         pipeline_type = GSK_VULKAN_PIPELINE_TEXT;
       else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
         pipeline_type = GSK_VULKAN_PIPELINE_TEXT_CLIP;
-      else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-        pipeline_type = GSK_VULKAN_PIPELINE_TEXT_CLIP_ROUNDED;
       else
-        FALLBACK ("Text nodes can't deal with clip type %u", state->clip.type);
+        pipeline_type = GSK_VULKAN_PIPELINE_TEXT_CLIP_ROUNDED;
       op.type = GSK_VULKAN_OP_TEXT;
     }
   op.text.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
@@ -1133,10 +1104,8 @@ gsk_vulkan_render_pass_add_blur_node (GskVulkanRenderPass       *self,
     pipeline_type = GSK_VULKAN_PIPELINE_BLUR;
   else if (state->clip.type == GSK_VULKAN_CLIP_RECT)
     pipeline_type = GSK_VULKAN_PIPELINE_BLUR_CLIP;
-  else if (state->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-    pipeline_type = GSK_VULKAN_PIPELINE_BLUR_CLIP_ROUNDED;
   else
-    FALLBACK ("Blur nodes can't deal with clip type %u", state->clip.type);
+    pipeline_type = GSK_VULKAN_PIPELINE_BLUR_CLIP_ROUNDED;
 
   op.render.pipeline = gsk_vulkan_render_get_pipeline (render, pipeline_type);
   g_array_append_val (self->render_ops, op);