[PATCH xserver 1/3] glamor: Scissor rectangle drawing to the bounds of the rects.

Keith Packard keithp at keithp.com
Tue Aug 1 22:01:15 UTC 2017

Eric Anholt <eric at anholt.net> writes:

> Scissors provide a critical hint to tiled renderers as to what tiles
> need to be load/stored because they could be modified by the
> rendering.
> The bounds calculation here is limited to when we have a small number
> of rects (large enough to cover rounded window corners, but probably
> not xeyes) to avoid overhead on desktop GL.

Hrm. Often times, the rendering comes from a region which already has a
bounds computed. I wonder if it would be useful to somehow wrap
PaintWindow and capture the bounding rect from there?

+static inline void
+glamor_bounds_union_rect(BoxPtr bounds, xRectangle *rect)
+    bounds->x1 = min(bounds->x1, rect->x);
+    bounds->y1 = min(bounds->y1, rect->y);
+    bounds->x2 = max(bounds->x2, rect->x + rect->width);
+    bounds->y2 = max(bounds->y2, rect->y + rect->height);

You're in a world of pain here -- rect->width is an unsigned 16-bit
value, bounds->x2 and rect->x are signed 16-bit values.

Maybe something like:

    bounds->x2 = min(SHRT_MAX, max(bounds->x2, rect->x + rect->width));
    bounds->y2 = min(SHRT_MAX, max(bounds->y2, rect->y + rect->height));


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <https://lists.x.org/archives/xorg-devel/attachments/20170801/78601818/attachment.sig>

More information about the xorg-devel mailing list