gpu: Make containers check opaque size for early exit

Container nodes save their opaque region, so it's quick to access. Use
that to check if the largest opaque region even qualifies for culling -
and if not, just exit.

Speeds up walking node trees by a lot.
This commit is contained in:
Benjamin Otte
2024-08-05 17:07:01 +02:00
parent 55597d88a4
commit afa4eb7d35

View File

@@ -3596,12 +3596,17 @@ gsk_gpu_node_processor_add_first_container_node (GskGpuNodeProcessor *self,
gsize min_occlusion_pixels,
GskRenderNode *node)
{
graphene_rect_t opaque;
int i, n;
n = gsk_container_node_get_n_children (node);
if (n == 0)
return FALSE;
if (!gsk_render_node_get_opaque_rect (node, &opaque) ||
!gsk_gpu_node_processor_clip_first_node (self, min_occlusion_pixels, &opaque))
return FALSE;
for (i = n; i-->0; )
{
if (gsk_gpu_node_processor_add_first_node (self,
@@ -3614,14 +3619,6 @@ gsk_gpu_node_processor_add_first_container_node (GskGpuNodeProcessor *self,
if (i < 0)
{
graphene_rect_t opaque;
if (!gsk_render_node_get_opaque_rect (node, &opaque))
return FALSE;
if (!gsk_gpu_node_processor_clip_first_node (self, min_occlusion_pixels, &opaque))
return FALSE;
gsk_gpu_render_pass_begin_op (self->frame,
target,
&self->scissor,