From f1b1aacc343f94ba03669e1e1765ccf098c5c0bd Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 23 May 2023 23:47:55 +0200 Subject: [PATCH] vulkan: Stop differentiating rounded from cicular corners Our shaders can handle both, so don'ttry to tell them apart anymore. Removes a lot of unnecessary fallbacks. --- gsk/vulkan/gskvulkanclip.c | 9 +---- gsk/vulkan/gskvulkanclipprivate.h | 4 -- gsk/vulkan/gskvulkanrenderpass.c | 61 ++++++++----------------------- 3 files changed, 16 insertions(+), 58 deletions(-) diff --git a/gsk/vulkan/gskvulkanclip.c b/gsk/vulkan/gskvulkanclip.c index 0d255d8148..72cc1454c4 100644 --- a/gsk/vulkan/gskvulkanclip.c +++ b/gsk/vulkan/gskvulkanclip.c @@ -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); } diff --git a/gsk/vulkan/gskvulkanclipprivate.h b/gsk/vulkan/gskvulkanclipprivate.h index 7f7cba2e8a..f3cadfc337 100644 --- a/gsk/vulkan/gskvulkanclipprivate.h +++ b/gsk/vulkan/gskvulkanclipprivate.h @@ -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; diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index e2d7500769..cacbfd3e4c 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -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); -- 2.30.2