From: Benjamin Otte Date: Sun, 11 Jun 2023 01:01:04 +0000 (+0200) Subject: vulkan: Do intersection check for every node X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~159^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1f8045ddbeb70547a50d34814723ad95c5348c4e;p=gtk4.git vulkan: Do intersection check for every node This is more expensive, but it finds more cases, and in particular it catches corner cases like empty nodes or fully clipped nodes that might otherwise make the kernel throw signals in our direction. --- diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index 67338b74cd..c98c368973 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -355,9 +355,6 @@ gsk_vulkan_render_pass_add_container_node (GskVulkanRenderPass *self, const GskVulkanParseState *state, GskRenderNode *node) { - if (!gsk_vulkan_clip_intersects_rect (&state->clip, &state->offset, &node->bounds)) - return TRUE; - for (guint i = 0; i < gsk_container_node_get_n_children (node); i++) gsk_vulkan_render_pass_add_node (self, render, state, gsk_container_node_get_child (node, i)); @@ -1170,6 +1167,11 @@ gsk_vulkan_render_pass_add_node (GskVulkanRenderPass *self, GskRenderNodeType node_type; gboolean fallback = FALSE; + /* This catches the corner cases of empty nodes, so after this check + * there's quaranteed to be at least 1 pixel that needs to be drawn */ + if (!gsk_vulkan_clip_intersects_rect (&state->clip, &state->offset, &node->bounds)) + return; + node_type = gsk_render_node_get_node_type (node); node_func = nodes_vtable[node_type];