diff options
author | Eric Anholt <eric@anholt.net> | 2016-01-21 11:30:15 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2016-01-21 17:50:25 -0800 |
commit | 510c8605641803f1f5b5d2de6d3bb422b148e0e7 (patch) | |
tree | 278201822db963df1951db4a1ea89ca82c41858e /glamor | |
parent | bc415fb1e0031ad23bda6e9c3f4664532876a0e5 (diff) |
glamor: Fix copy-like Render operations between 15 and 16 depth.
Reading and writing to 16-depth pixmaps using PICT_x1r5g5b5 ends up
failing, unless you're doing a straight copy at the same bpp where the
misinterpretation matches on both sides.
Fixes rendercheck/blend/over and renderhceck/blend/src in piglit.
Please cherry-pick this to active stable branches.
Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'glamor')
-rw-r--r-- | glamor/glamor_render.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c index d8574ece6..92b6b0cd0 100644 --- a/glamor/glamor_render.c +++ b/glamor/glamor_render.c @@ -512,6 +512,14 @@ static int compatible_formats(CARD8 op, PicturePtr dst, PicturePtr src) { if (op == PictOpSrc) { + /* We can't do direct copies between different depths at 16bpp + * because r,g,b are allocated to different bits. + */ + if (dst->pDrawable->bitsPerPixel == 16 && + dst->pDrawable->depth != src->pDrawable->depth) { + return 0; + } + if (src->format == dst->format) return 1; |