From: Benjamin Otte Date: Sun, 2 Jul 2023 04:30:10 +0000 (+0200) Subject: vulkan: Add a blur op and use it X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~60^2~61 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=c598fa9147117f5fbe8000fb047a016ad9e0dae3;p=gtk4.git vulkan: Add a blur op and use it This removes the last old user of offscreens, so those functions are now gone, too. --- diff --git a/gsk/meson.build b/gsk/meson.build index f8d7e721cd..4dc1c221cc 100644 --- a/gsk/meson.build +++ b/gsk/meson.build @@ -108,7 +108,7 @@ gsk_private_vulkan_shader_headers = [] if have_vulkan gsk_private_sources += files([ 'vulkan/gskvulkanblendmodeop.c', - 'vulkan/gskvulkanblurpipeline.c', + 'vulkan/gskvulkanblurop.c', 'vulkan/gskvulkanborderpipeline.c', 'vulkan/gskvulkanbuffer.c', 'vulkan/gskvulkanclip.c', diff --git a/gsk/vulkan/gskvulkanblurop.c b/gsk/vulkan/gskvulkanblurop.c new file mode 100644 index 0000000000..8d84008c12 --- /dev/null +++ b/gsk/vulkan/gskvulkanblurop.c @@ -0,0 +1,139 @@ +#include "config.h" + +#include "gskvulkanbluropprivate.h" + +#include "vulkan/resources/blur.vert.h" + +typedef struct _GskVulkanBlurOp GskVulkanBlurOp; + +struct _GskVulkanBlurOp +{ + GskVulkanOp op; + + GskVulkanImage *image; + graphene_rect_t rect; + graphene_rect_t tex_rect; + float radius; + + guint32 image_descriptor; + gsize vertex_offset; +}; + +static void +gsk_vulkan_blur_op_finish (GskVulkanOp *op) +{ + GskVulkanBlurOp *self = (GskVulkanBlurOp *) op; + + g_object_unref (self->image); +} + +static void +gsk_vulkan_blur_op_upload (GskVulkanOp *op, + GskVulkanRenderPass *pass, + GskVulkanRender *render, + GskVulkanUploader *uploader, + const graphene_rect_t *clip, + const graphene_vec2_t *scale) +{ +} + +static inline gsize +round_up (gsize number, gsize divisor) +{ + return (number + divisor - 1) / divisor * divisor; +} + +static gsize +gsk_vulkan_blur_op_count_vertex_data (GskVulkanOp *op, + gsize n_bytes) +{ + GskVulkanBlurOp *self = (GskVulkanBlurOp *) op; + gsize vertex_stride; + + vertex_stride = gsk_vulkan_blur_info.pVertexBindingDescriptions[0].stride; + n_bytes = round_up (n_bytes, vertex_stride); + self->vertex_offset = n_bytes; + n_bytes += vertex_stride; + return n_bytes; +} + +static void +gsk_vulkan_blur_op_collect_vertex_data (GskVulkanOp *op, + GskVulkanRenderPass *pass, + GskVulkanRender *render, + guchar *data) +{ + GskVulkanBlurOp *self = (GskVulkanBlurOp *) op; + GskVulkanBlurInstance *instance = (GskVulkanBlurInstance *) (data + self->vertex_offset); + + gsk_vulkan_rect_to_float (&self->rect, instance->rect); + gsk_vulkan_rect_to_float (&self->tex_rect, instance->tex_rect); + instance->tex_id = self->image_descriptor; + instance->radius = self->radius; +} + +static void +gsk_vulkan_blur_op_reserve_descriptor_sets (GskVulkanOp *op, + GskVulkanRender *render) +{ + GskVulkanBlurOp *self = (GskVulkanBlurOp *) op; + + self->image_descriptor = gsk_vulkan_render_get_image_descriptor (render, + self->image, + GSK_VULKAN_SAMPLER_DEFAULT); +} + +static VkPipeline +gsk_vulkan_blur_op_get_pipeline (GskVulkanOp *op) +{ + return VK_NULL_HANDLE; +} + +static void +gsk_vulkan_blur_op_command (GskVulkanOp *op, + GskVulkanRender *render, + VkPipelineLayout pipeline_layout, + VkCommandBuffer command_buffer) +{ + GskVulkanBlurOp *self = (GskVulkanBlurOp *) op; + + vkCmdDraw (command_buffer, + 6, 1, + 0, self->vertex_offset / gsk_vulkan_blur_info.pVertexBindingDescriptions[0].stride); +} + +static const GskVulkanOpClass GSK_VULKAN_BLUR_OP_CLASS = { + GSK_VULKAN_OP_SIZE (GskVulkanBlurOp), + "blur", + &gsk_vulkan_blur_info, + gsk_vulkan_blur_op_finish, + gsk_vulkan_blur_op_upload, + gsk_vulkan_blur_op_count_vertex_data, + gsk_vulkan_blur_op_collect_vertex_data, + gsk_vulkan_blur_op_reserve_descriptor_sets, + gsk_vulkan_blur_op_get_pipeline, + gsk_vulkan_blur_op_command +}; + +void +gsk_vulkan_blur_op (GskVulkanRenderPass *render_pass, + const char *clip_type, + GskVulkanImage *image, + const graphene_rect_t *rect, + const graphene_point_t *offset, + const graphene_rect_t *tex_rect, + float radius) +{ + GskVulkanBlurOp *self; + + g_assert (radius > 0); + + self = (GskVulkanBlurOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_BLUR_OP_CLASS); + + ((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type); + self->image = g_object_ref (image); + graphene_rect_offset_r (rect, offset->x, offset->y, &self->rect); + gsk_vulkan_normalize_tex_coords (&self->tex_rect, rect, tex_rect); + self->radius = radius; +} + diff --git a/gsk/vulkan/gskvulkanbluropprivate.h b/gsk/vulkan/gskvulkanbluropprivate.h new file mode 100644 index 0000000000..6419811d47 --- /dev/null +++ b/gsk/vulkan/gskvulkanbluropprivate.h @@ -0,0 +1,16 @@ +#pragma once + +#include "gskvulkanopprivate.h" + +G_BEGIN_DECLS + +void gsk_vulkan_blur_op (GskVulkanRenderPass *render_pass, + const char *clip_type, + GskVulkanImage *image, + const graphene_rect_t *rect, + const graphene_point_t *offset, + const graphene_rect_t *tex_rect, + float radius); + +G_END_DECLS + diff --git a/gsk/vulkan/gskvulkanblurpipeline.c b/gsk/vulkan/gskvulkanblurpipeline.c deleted file mode 100644 index 5f46c7edde..0000000000 --- a/gsk/vulkan/gskvulkanblurpipeline.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "config.h" - -#include "gskvulkanblurpipelineprivate.h" - -#include "vulkan/resources/blur.vert.h" - -struct _GskVulkanBlurPipeline -{ - GObject parent_instance; -}; - -G_DEFINE_TYPE (GskVulkanBlurPipeline, gsk_vulkan_blur_pipeline, GSK_TYPE_VULKAN_PIPELINE) - -static const VkPipelineVertexInputStateCreateInfo * -gsk_vulkan_blur_pipeline_get_input_state_create_info (GskVulkanPipeline *self) -{ - return &gsk_vulkan_blur_info; -} - -static void -gsk_vulkan_blur_pipeline_finalize (GObject *gobject) -{ - //GskVulkanBlurPipeline *self = GSK_VULKAN_BLUR_PIPELINE (gobject); - - G_OBJECT_CLASS (gsk_vulkan_blur_pipeline_parent_class)->finalize (gobject); -} - -static void -gsk_vulkan_blur_pipeline_class_init (GskVulkanBlurPipelineClass *klass) -{ - GskVulkanPipelineClass *pipeline_class = GSK_VULKAN_PIPELINE_CLASS (klass); - - G_OBJECT_CLASS (klass)->finalize = gsk_vulkan_blur_pipeline_finalize; - - pipeline_class->get_input_state_create_info = gsk_vulkan_blur_pipeline_get_input_state_create_info; -} - -static void -gsk_vulkan_blur_pipeline_init (GskVulkanBlurPipeline *self) -{ -} - -GskVulkanPipeline * -gsk_vulkan_blur_pipeline_new (GdkVulkanContext *context, - VkPipelineLayout layout, - const char *shader_name, - VkRenderPass render_pass) -{ - return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BLUR_PIPELINE, context, layout, shader_name, render_pass); -} - -void -gsk_vulkan_blur_pipeline_collect_vertex_data (GskVulkanBlurPipeline *pipeline, - guchar *data, - guint32 tex_id, - const graphene_point_t *offset, - const graphene_rect_t *rect, - const graphene_rect_t *tex_rect, - double radius) -{ - GskVulkanBlurInstance *instance = (GskVulkanBlurInstance *) data; - - instance->rect[0] = rect->origin.x + offset->x; - instance->rect[1] = rect->origin.y + offset->y; - instance->rect[2] = rect->size.width; - instance->rect[3] = rect->size.height; - instance->tex_rect[0] = tex_rect->origin.x; - instance->tex_rect[1] = tex_rect->origin.y; - instance->tex_rect[2] = tex_rect->size.width; - instance->tex_rect[3] = tex_rect->size.height; - instance->radius = radius; - instance->tex_id = tex_id; -} - -gsize -gsk_vulkan_blur_pipeline_draw (GskVulkanBlurPipeline *pipeline, - VkCommandBuffer command_buffer, - gsize offset, - gsize n_commands) -{ - vkCmdDraw (command_buffer, - 6, n_commands, - 0, offset); - - return n_commands; -} diff --git a/gsk/vulkan/gskvulkanblurpipelineprivate.h b/gsk/vulkan/gskvulkanblurpipelineprivate.h deleted file mode 100644 index 5e7435aba6..0000000000 --- a/gsk/vulkan/gskvulkanblurpipelineprivate.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include - -#include "gskvulkanpipelineprivate.h" - -G_BEGIN_DECLS - -typedef struct _GskVulkanBlurPipelineLayout GskVulkanBlurPipelineLayout; - -#define GSK_TYPE_VULKAN_BLUR_PIPELINE (gsk_vulkan_blur_pipeline_get_type ()) - -G_DECLARE_FINAL_TYPE (GskVulkanBlurPipeline, gsk_vulkan_blur_pipeline, GSK, VULKAN_BLUR_PIPELINE, GskVulkanPipeline) - -GskVulkanPipeline * gsk_vulkan_blur_pipeline_new (GdkVulkanContext *context, - VkPipelineLayout layout, - const char *shader_name, - VkRenderPass render_pass); - -void gsk_vulkan_blur_pipeline_collect_vertex_data (GskVulkanBlurPipeline *pipeline, - guchar *data, - guint32 tex_id, - const graphene_point_t *offset, - const graphene_rect_t *rect, - const graphene_rect_t *tex_rect, - double radius); -gsize gsk_vulkan_blur_pipeline_draw (GskVulkanBlurPipeline *pipeline, - VkCommandBuffer command_buffer, - gsize offset, - gsize n_commands); - -G_END_DECLS - diff --git a/gsk/vulkan/gskvulkanrender.c b/gsk/vulkan/gskvulkanrender.c index 8698402ae2..2812bce4d6 100644 --- a/gsk/vulkan/gskvulkanrender.c +++ b/gsk/vulkan/gskvulkanrender.c @@ -10,7 +10,6 @@ #include "gskvulkanpipelineprivate.h" #include "gskvulkanrenderpassprivate.h" -#include "gskvulkanblurpipelineprivate.h" #include "gskvulkanborderpipelineprivate.h" #include "gskvulkancolortextpipelineprivate.h" #include "gskvulkanlineargradientpipelineprivate.h" @@ -505,9 +504,6 @@ gsk_vulkan_render_get_pipeline (GskVulkanRender *self, { "border", 0, gsk_vulkan_border_pipeline_new }, { "border-clip", 0, gsk_vulkan_border_pipeline_new }, { "border-clip-rounded", 0, gsk_vulkan_border_pipeline_new }, - { "blur", 1, gsk_vulkan_blur_pipeline_new }, - { "blur-clip", 1, gsk_vulkan_blur_pipeline_new }, - { "blur-clip-rounded", 1, gsk_vulkan_blur_pipeline_new }, { "mask", 1, gsk_vulkan_text_pipeline_new }, { "mask-clip", 1, gsk_vulkan_text_pipeline_new }, { "mask-clip-rounded", 1, gsk_vulkan_text_pipeline_new }, diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index d17a645440..fedea6dc95 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -10,7 +10,7 @@ #include "gskroundedrectprivate.h" #include "gsktransform.h" #include "gskvulkanblendmodeopprivate.h" -#include "gskvulkanblurpipelineprivate.h" +#include "gskvulkanbluropprivate.h" #include "gskvulkanborderpipelineprivate.h" #include "gskvulkanclipprivate.h" #include "gskvulkancolormatrixopprivate.h" @@ -54,7 +54,6 @@ typedef struct _GskVulkanOpPushConstants GskVulkanOpPushConstants; typedef enum { /* GskVulkanOpRender */ GSK_VULKAN_OP_LINEAR_GRADIENT, - GSK_VULKAN_OP_BLUR, GSK_VULKAN_OP_BORDER, /* GskVulkanOpText */ GSK_VULKAN_OP_TEXT, @@ -71,14 +70,8 @@ struct _GskVulkanOpRender GskRenderNode *node; /* node that's the source of this op */ graphene_point_t offset; /* offset of the node */ GskVulkanPipeline *pipeline; /* pipeline to use */ - GskVulkanImage *source; /* source image to render */ - GskVulkanImage *source2; /* second source image to render (if relevant) */ gsize vertex_offset; /* offset into vertex buffer */ - guint32 image_descriptor; /* index into descriptor for the image */ - guint32 image_descriptor2; /* index into descriptor for the 2nd image (if relevant) */ gsize buffer_offset; /* offset into buffer */ - graphene_rect_t source_rect; /* area that source maps to */ - graphene_rect_t source2_rect; /* area that source2 maps to */ }; struct _GskVulkanOpText @@ -1310,22 +1303,32 @@ gsk_vulkan_render_pass_add_blur_node (GskVulkanRenderPass *self, const GskVulkanParseState *state, GskRenderNode *node) { - GskVulkanPipelineType pipeline_type; - GskVulkanOpRender op = { - .type = GSK_VULKAN_OP_BLUR, - .node = node, - .offset = state->offset, - }; + GskVulkanImage *image; + graphene_rect_t tex_rect; + float radius; - if (gsk_vulkan_clip_contains_rect (&state->clip, &state->offset, &node->bounds)) - pipeline_type = GSK_VULKAN_PIPELINE_BLUR; - else if (state->clip.type == GSK_VULKAN_CLIP_RECT) - pipeline_type = GSK_VULKAN_PIPELINE_BLUR_CLIP; - else - pipeline_type = GSK_VULKAN_PIPELINE_BLUR_CLIP_ROUNDED; + radius = gsk_blur_node_get_radius (node); + if (radius == 0) + { + gsk_vulkan_render_pass_add_node (self, render, state, gsk_blur_node_get_child (node)); + return TRUE; + } - op.pipeline = gsk_vulkan_render_pass_get_pipeline (self, render, pipeline_type); - gsk_vulkan_render_pass_add_op (self, (GskVulkanOp *) &op); + image = gsk_vulkan_render_pass_get_node_as_image (self, + render, + state, + gsk_blur_node_get_child (node), + &tex_rect); + if (image == NULL) + return TRUE; + + gsk_vulkan_blur_op (self, + gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds), + image, + &node->bounds, + &state->offset, + &tex_rect, + radius); return TRUE; } @@ -1450,177 +1453,6 @@ gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, gsk_vulkan_render_pass_add_node (self, render, &state, node); } -static GskVulkanImage * -gsk_vulkan_render_pass_render_offscreen (GdkVulkanContext *vulkan, - GskVulkanRender *render, - GskVulkanUploader *uploader, - VkSemaphore semaphore, - GskRenderNode *node, - const graphene_vec2_t *scale, - const graphene_rect_t *viewport) -{ - graphene_rect_t view; - cairo_region_t *clip; - GskVulkanRenderPass *pass; - GskVulkanImage *result; - float scale_x, scale_y; - - scale_x = graphene_vec2_get_x (scale); - scale_y = graphene_vec2_get_y (scale); - view = GRAPHENE_RECT_INIT (scale_x * viewport->origin.x, - scale_y * viewport->origin.y, - ceil (scale_x * viewport->size.width), - ceil (scale_y * viewport->size.height)); - - result = gsk_vulkan_image_new_for_offscreen (vulkan, - gdk_vulkan_context_get_offscreen_format (vulkan, - gsk_render_node_get_preferred_depth (node)), - view.size.width, view.size.height); - -#ifdef G_ENABLE_DEBUG - { - GskProfiler *profiler = gsk_renderer_get_profiler (gsk_vulkan_render_get_renderer (render)); - gsk_profiler_counter_add (profiler, - texture_pixels_quark, - view.size.width * view.size.height); - } -#endif - - clip = cairo_region_create_rectangle (&(cairo_rectangle_int_t) { - 0, 0, - gsk_vulkan_image_get_width (result), - gsk_vulkan_image_get_height (result) - }); - - pass = gsk_vulkan_render_pass_new (vulkan, - result, - scale, - &view, - clip, - semaphore); - - cairo_region_destroy (clip); - - gsk_vulkan_render_add_render_pass (render, pass); - gsk_vulkan_render_pass_add (pass, render, node); - gsk_vulkan_render_add_cleanup_image (render, result); - - return result; -} - -static GskVulkanImage * -gsk_vulkan_render_pass_get_node_as_texture (GskVulkanRenderPass *self, - GskVulkanRender *render, - GskVulkanUploader *uploader, - GskRenderNode *node, - const graphene_vec2_t *scale, - const graphene_rect_t *clip_bounds, - const graphene_point_t *clip_offset, - graphene_rect_t *tex_bounds) -{ - VkSemaphore semaphore; - GskVulkanImage *result; - GskVulkanImageMap map; - gsize width, height; - cairo_surface_t *surface; - cairo_t *cr; - - switch ((guint) gsk_render_node_get_node_type (node)) - { - case GSK_TEXTURE_NODE: - result = gsk_vulkan_renderer_ref_texture_image (GSK_VULKAN_RENDERER (gsk_vulkan_render_get_renderer (render)), - gsk_texture_node_get_texture (node), - uploader); - gsk_vulkan_render_add_cleanup_image (render, result); - *tex_bounds = node->bounds; - return result; - - case GSK_CAIRO_NODE: - /* We're using recording surfaces, so drawing them to an image - * surface and uploading them is the right thing. - * But that's exactly what the fallback code does. - */ - break; - - default: - { - graphene_rect_t clipped; - - graphene_rect_offset_r (clip_bounds, - clip_offset->x, - clip_offset->y, &clipped); - graphene_rect_intersection (&clipped, &node->bounds, &clipped); - - if (clipped.size.width == 0 || clipped.size.height == 0) - return NULL; - - /* assuming the unclipped bounds should go to texture coordinates 0..1, - * calculate the coordinates for the clipped texture size - */ - *tex_bounds = clipped; - - vkCreateSemaphore (gdk_vulkan_context_get_device (self->vulkan), - &(VkSemaphoreCreateInfo) { - VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, - NULL, - 0 - }, - NULL, - &semaphore); - - g_array_append_val (self->wait_semaphores, semaphore); - - return gsk_vulkan_render_pass_render_offscreen (self->vulkan, - render, - uploader, - semaphore, - node, - scale, - &clipped); - } - } - - GSK_RENDERER_DEBUG (gsk_vulkan_render_get_renderer (render), FALLBACK, "Node as texture not implemented for this case. Using %gx%g fallback surface", - ceil (node->bounds.size.width), - ceil (node->bounds.size.height)); -#ifdef G_ENABLE_DEBUG - { - GskProfiler *profiler = gsk_renderer_get_profiler (gsk_vulkan_render_get_renderer (render)); - gsk_profiler_counter_add (profiler, - fallback_pixels_quark, - ceil (node->bounds.size.width) * ceil (node->bounds.size.height)); - } -#endif - - /* XXX: We could intersect bounds with clip bounds here */ - width = ceil (node->bounds.size.width * graphene_vec2_get_x (scale)); - height = ceil (node->bounds.size.height * graphene_vec2_get_y (scale)); - - result = gsk_vulkan_image_new_for_upload (self->vulkan, GDK_MEMORY_DEFAULT, width, height); - gsk_vulkan_image_map_memory (result, uploader, GSK_VULKAN_WRITE, &map); - surface = cairo_image_surface_create_for_data (map.data, - CAIRO_FORMAT_ARGB32, - width, height, - map.stride); - cairo_surface_set_device_scale (surface, - width / node->bounds.size.width, - height / node->bounds.size.height); - cr = cairo_create (surface); - cairo_translate (cr, -node->bounds.origin.x, -node->bounds.origin.y); - - gsk_render_node_draw (node, cr); - - cairo_destroy (cr); - - cairo_surface_finish (surface); - cairo_surface_destroy (surface); - - gsk_vulkan_image_unmap_memory (result, uploader, &map); - gsk_vulkan_render_add_cleanup_image (render, result); - - *tex_bounds = node->bounds; - - return result; -} - void gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, GskVulkanRender *render, @@ -1668,23 +1500,6 @@ gsk_vulkan_render_op_upload (GskVulkanOp *op_, } break; - case GSK_VULKAN_OP_BLUR: - { - GskRenderNode *child = gsk_blur_node_get_child (op->render.node); - graphene_rect_t tex_bounds; - - op->render.source = gsk_vulkan_render_pass_get_node_as_texture (self, - render, - uploader, - child, - scale, - clip, - &op->render.offset, - &tex_bounds); - gsk_vulkan_normalize_tex_coords (&op->render.source_rect, &op->render.node->bounds, &tex_bounds); - } - break; - default: g_assert_not_reached (); case GSK_VULKAN_OP_PUSH_VERTEX_CONSTANTS: @@ -1722,7 +1537,6 @@ gsk_vulkan_render_op_count_vertex_data (GskVulkanOp *op_, switch (op->any.type) { case GSK_VULKAN_OP_LINEAR_GRADIENT: - case GSK_VULKAN_OP_BLUR: case GSK_VULKAN_OP_BORDER: vertex_stride = gsk_vulkan_pipeline_get_vertex_stride (op->render.pipeline); n_bytes = round_up (n_bytes, vertex_stride); @@ -1823,16 +1637,6 @@ gsk_vulkan_render_op_collect_vertex_data (GskVulkanOp *op_, gsk_linear_gradient_node_get_n_color_stops (op->render.node)); break; - case GSK_VULKAN_OP_BLUR: - gsk_vulkan_blur_pipeline_collect_vertex_data (GSK_VULKAN_BLUR_PIPELINE (op->render.pipeline), - data + op->render.vertex_offset, - op->render.image_descriptor, - &op->render.offset, - &op->render.node->bounds, - &op->render.source_rect, - gsk_blur_node_get_radius (op->render.node)); - break; - case GSK_VULKAN_OP_BORDER: gsk_vulkan_border_pipeline_collect_vertex_data (GSK_VULKAN_BORDER_PIPELINE (op->render.pipeline), data + op->render.vertex_offset, @@ -1910,15 +1714,6 @@ gsk_vulkan_render_op_reserve_descriptor_sets (GskVulkanOp *op_, switch (op->any.type) { - case GSK_VULKAN_OP_BLUR: - if (op->render.source) - { - op->render.image_descriptor = gsk_vulkan_render_get_image_descriptor (render, - op->render.source, - GSK_VULKAN_SAMPLER_DEFAULT); - } - break; - case GSK_VULKAN_OP_TEXT: case GSK_VULKAN_OP_COLOR_TEXT: op->text.image_descriptor = gsk_vulkan_render_get_image_descriptor (render, @@ -2009,7 +1804,6 @@ gsk_vulkan_render_op_get_pipeline (GskVulkanOp *op_) switch (op->any.type) { case GSK_VULKAN_OP_LINEAR_GRADIENT: - case GSK_VULKAN_OP_BLUR: case GSK_VULKAN_OP_BORDER: return gsk_vulkan_pipeline_get_pipeline (op->render.pipeline); @@ -2050,15 +1844,6 @@ gsk_vulkan_render_op_command (GskVulkanOp *op_, op->text.num_glyphs); break; - case GSK_VULKAN_OP_BLUR: - if (!op->render.source) - break; - gsk_vulkan_blur_pipeline_draw (GSK_VULKAN_BLUR_PIPELINE (op->render.pipeline), - command_buffer, - op->render.vertex_offset / gsk_vulkan_pipeline_get_vertex_stride (op->render.pipeline), - 1); - break; - case GSK_VULKAN_OP_LINEAR_GRADIENT: gsk_vulkan_linear_gradient_pipeline_draw (GSK_VULKAN_LINEAR_GRADIENT_PIPELINE (op->render.pipeline), command_buffer, diff --git a/gsk/vulkan/gskvulkanrenderprivate.h b/gsk/vulkan/gskvulkanrenderprivate.h index 34a7c75daa..3f40e0b4e1 100644 --- a/gsk/vulkan/gskvulkanrenderprivate.h +++ b/gsk/vulkan/gskvulkanrenderprivate.h @@ -17,9 +17,6 @@ typedef enum { GSK_VULKAN_PIPELINE_BORDER, GSK_VULKAN_PIPELINE_BORDER_CLIP, GSK_VULKAN_PIPELINE_BORDER_CLIP_ROUNDED, - GSK_VULKAN_PIPELINE_BLUR, - GSK_VULKAN_PIPELINE_BLUR_CLIP, - GSK_VULKAN_PIPELINE_BLUR_CLIP_ROUNDED, GSK_VULKAN_PIPELINE_TEXT, GSK_VULKAN_PIPELINE_TEXT_CLIP, GSK_VULKAN_PIPELINE_TEXT_CLIP_ROUNDED,