Eric Anholt <e...@anholt.net> writes:

> Unlike the previous two fixes, this one introduces new GL calls and
> statechanges of the scissor.  However, given that our Render drawing
> already does CPU side transformation and inefficient box upload, this
> shouldn't be a limiting factor for Render acceleration.
>
> Surprisingly, it improves x11perf -comppixwin10 -repeat 1 -reps 10000
> on i965 by 3.21191% +/- 1.79977% (n=50).
>
> Signed-off-by: Eric Anholt <e...@anholt.net>
> ---
>  glamor/glamor_render.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
> index 52f073d0578b..413c4a7f8e8a 100644
> --- a/glamor/glamor_render.c
> +++ b/glamor/glamor_render.c
> @@ -1198,6 +1198,29 @@ glamor_composite_with_shader(CARD8 op,
>  
>      nrect_max = MIN(nrect, GLAMOR_COMPOSITE_VBO_VERT_CNT / 4);
>  
> +    if (nrect < 100) {
> +        BoxRec bounds = glamor_start_rendering_bounds();
> +
> +        for (int i = 0; i < nrect; i++) {
> +            BoxRec box = {
> +                .x1 = rects[i].x_dst,
> +                .y1 = rects[i].y_dst,
> +                .x2 = rects[i].x_dst + rects[i].width,
> +                .y2 = rects[i].y_dst + rects[i].height,
> +            };
> +            glamor_bounds_union_box(&bounds, &box);
> +        }
> +
> +        if (bounds.x1 >= bounds.x2 || bounds.y1 >= bounds.y2)
> +            goto disable;

You might as well branch after the glDisable(GL_SCISSOR_TEST) to make it
symmetrical here?

> +
> +        glEnable(GL_SCISSOR_TEST);
> +        glScissor(bounds.x1 + dest_x_off,
> +                  bounds.y1 + dest_y_off,
> +                  bounds.x2 - bounds.x1,
> +                  bounds.y2 - bounds.y1);
> +    }

I think that's right; have you tested in a composited window to make
sure the offset is correct?

-- 
-keith

Attachment: signature.asc
Description: PGP signature

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to