xf86-video-intel: src/sna/gen3_render.c src/sna/gen4_render.c src/sna/gen5_render.c src/sna/gen6_render.c src/sna/gen7_render.c
Chris Wilson
ickle at kemper.freedesktop.org
Sat Oct 29 10:59:22 PDT 2011
src/sna/gen3_render.c | 26 +++++++++++++-------------
src/sna/gen4_render.c | 30 ++++++++++++++++--------------
src/sna/gen5_render.c | 30 ++++++++++++++++--------------
src/sna/gen6_render.c | 21 +++++++++++++--------
src/sna/gen7_render.c | 30 ++++++++++++++++--------------
5 files changed, 74 insertions(+), 63 deletions(-)
New commits:
commit 4835fe5b2e19ac456773565399f334845f7442c0
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sat Oct 29 18:56:29 2011 +0100
sna/genX: Improve reduction of Render operator to BLT alu
This appeared to introduce a visual gitch into the xfce4 selection box
on gen6 at least.
References: https://bugs.freedesktop.org/show_bug.cgi?id=42367
Reported-by: Paul Neumann <paul104x at yahoo.de>
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 118b906..a581c8a 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -3634,14 +3634,6 @@ gen3_render_fill_boxes_try_blt(struct sna *sna,
if (dst_bo->tiling == I915_TILING_Y)
return FALSE;
- if (!sna_get_pixel_from_rgba(&pixel,
- color->red,
- color->green,
- color->blue,
- color->alpha,
- format))
- return FALSE;
-
if (color->alpha >= 0xff00) {
if (op == PictOpOver)
op = PictOpSrc;
@@ -3652,15 +3644,23 @@ gen3_render_fill_boxes_try_blt(struct sna *sna,
op = PictOpSrc;
}
+ pixel = 0;
if (op == PictOpClear) {
alu = GXclear;
- pixel = 0;
- op = PictOpSrc;
- }
-
- if (op != PictOpSrc)
+ } else if (op == PictOpSrc) {
+ if (color->alpha <= 0x00ff)
+ alu = GXclear;
+ else if (!sna_get_pixel_from_rgba(&pixel,
+ color->red,
+ color->green,
+ color->blue,
+ color->alpha,
+ format))
+ return FALSE;
+ } else
return FALSE;
+
return sna_blt_fill_boxes(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
pixel, box, n);
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 425967b..18171c4 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2416,24 +2416,26 @@ gen4_render_fill_boxes(struct sna *sna,
dst->drawable.width > 8192 ||
dst->drawable.height > 8192 ||
!gen4_check_dst_format(format)) {
- uint8_t alu = GXcopy;
+ uint8_t alu = -1;
- if (op == PictOpClear) {
+ if (op == PictOpClear || (op == PictOpOutReverse && color->alpha >= 0xff00))
alu = GXclear;
- pixel = 0;
- op = PictOpSrc;
- }
- if (op == PictOpOver && color->alpha >= 0xff00)
- op = PictOpSrc;
+ if (op == PictOpSrc || (op == PictOpOver && color->alpha >= 0xff00)) {
+ alu = GXcopy;
+ if (color->alpha <= 0x00ff)
+ alu = GXclear;
+ }
- if (op == PictOpSrc &&
- sna_get_pixel_from_rgba(&pixel,
- color->red,
- color->green,
- color->blue,
- color->alpha,
- format) &&
+ pixel = 0;
+ if ((alu == GXclear ||
+ (alu == GXcopy &&
+ sna_get_pixel_from_rgba(&pixel,
+ color->red,
+ color->green,
+ color->blue,
+ color->alpha,
+ format))) &&
sna_blt_fill_boxes(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
pixel, box, n))
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 6d4fbd9..b9512c7 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2389,24 +2389,26 @@ gen5_render_fill_boxes(struct sna *sna,
dst->drawable.width > 8192 ||
dst->drawable.height > 8192 ||
!gen5_check_dst_format(format)) {
- uint8_t alu = GXcopy;
- uint8_t _op = op;
+ uint8_t alu = -1;
- if (_op == PictOpClear) {
+ if (op == PictOpClear || (op == PictOpOutReverse && color->alpha >= 0xff00))
alu = GXclear;
- _op = PictOpSrc;
- }
- if (_op == PictOpOver && color->alpha >= 0xff00)
- _op = PictOpSrc;
+ if (op == PictOpSrc || (op == PictOpOver && color->alpha >= 0xff00)) {
+ alu = GXcopy;
+ if (color->alpha <= 0x00ff)
+ alu = GXclear;
+ }
- if (_op == PictOpSrc &&
- sna_get_pixel_from_rgba(&pixel,
- color->red,
- color->green,
- color->blue,
- color->alpha,
- format) &&
+ pixel = 0;
+ if ((alu == GXclear ||
+ (alu == GXcopy &&
+ sna_get_pixel_from_rgba(&pixel,
+ color->red,
+ color->green,
+ color->blue,
+ color->alpha,
+ format))) &&
sna_blt_fill_boxes(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
pixel, box, n))
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 1abb54f..1fc971f 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2598,16 +2598,21 @@ gen6_render_fill_boxes(struct sna *sna,
if (op == PictOpClear || (op == PictOpOutReverse && color->alpha >= 0xff00))
alu = GXclear;
- if (op == PictOpSrc || (op == PictOpOver && color->alpha >= 0xff00))
+ if (op == PictOpSrc || (op == PictOpOver && color->alpha >= 0xff00)) {
alu = GXcopy;
+ if (color->alpha <= 0x00ff)
+ alu = GXclear;
+ }
- if (alu != -1 &&
- sna_get_pixel_from_rgba(&pixel,
- color->red,
- color->green,
- color->blue,
- color->alpha,
- format) &&
+ pixel = 0;
+ if ((alu == GXclear ||
+ (alu == GXcopy &&
+ sna_get_pixel_from_rgba(&pixel,
+ color->red,
+ color->green,
+ color->blue,
+ color->alpha,
+ format))) &&
sna_blt_fill_boxes(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
pixel, box, n))
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 7eb323f..ecdab6e 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2741,24 +2741,26 @@ gen7_render_fill_boxes(struct sna *sna,
dst->drawable.width > GEN7_MAX_SIZE ||
dst->drawable.height > GEN7_MAX_SIZE ||
!gen7_check_dst_format(format)) {
- uint8_t alu = GXcopy;
+ uint8_t alu = -1;
- if (op == PictOpClear) {
+ if (op == PictOpClear || (op == PictOpOutReverse && color->alpha >= 0xff00))
alu = GXclear;
- pixel = 0;
- op = PictOpSrc;
- }
- if (op == PictOpOver && color->alpha >= 0xff00)
- op = PictOpSrc;
+ if (op == PictOpSrc || (op == PictOpOver && color->alpha >= 0xff00)) {
+ alu = GXcopy;
+ if (color->alpha <= 0x00ff)
+ alu = GXclear;
+ }
- if (op == PictOpSrc &&
- sna_get_pixel_from_rgba(&pixel,
- color->red,
- color->green,
- color->blue,
- color->alpha,
- format) &&
+ pixel = 0;
+ if ((alu == GXclear ||
+ (alu == GXcopy &&
+ sna_get_pixel_from_rgba(&pixel,
+ color->red,
+ color->green,
+ color->blue,
+ color->alpha,
+ format))) &&
sna_blt_fill_boxes(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
pixel, box, n))
More information about the xorg-commit
mailing list