[Intel-gfx] [PATCH] i915: Do not force the incoming source alpha to 1.
Clemens Eisserer
linuxhippy at gmail.com
Tue Nov 10 22:08:37 CET 2009
This really made my day :)
Thank you very very much for fixing this :D
- Clemens
2009/11/10 Chris Wilson <chris at chris-wilson.co.uk>:
> RENDER specifies that textures are extended with the clear colour in the
> EXTEND_NONE case. By forcing the border colour to contain 1, we were
> padding with black instead. This is a long standing bug that causes
> numerous failure in cairo and has been frequently bemoaned about in
> bugzilla.
>
> https://bugs.freedesktop.org/show_bug.cgi?id=17933
> x8r8g8b8 doesn't sample alpha=0 outside surface bounds
>
> However, one consequence of this is that we now must trust the incoming
> source alpha for x8r8g8b8 surfaces (and similar ignored alpha formats).
> We workaround this by ensuring that we fill the outgoing alpha channel
> with 1 for such targets, but we must also rely on the X server to fill
> the alpha channel on incoming RGB images.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> src/i915_render.c | 9 +++------
> 1 files changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/src/i915_render.c b/src/i915_render.c
> index f64e031..8d8fde4 100644
> --- a/src/i915_render.c
> +++ b/src/i915_render.c
> @@ -446,7 +446,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
> {
> intel_screen_private *intel = intel_get_screen_private(scrn);
> int op = intel->i915_render_state.op;
> - PicturePtr source_picture = intel->render_source_picture;
> PicturePtr mask_picture = intel->render_mask_picture;
> PicturePtr dest_picture = intel->render_dest_picture;
> PixmapPtr mask = intel->render_mask;
> @@ -600,10 +599,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
> i915_fs_texldp(FS_R0, FS_S0, FS_T0);
> }
>
> - /* If the texture lacks an alpha channel, force the alpha to 1. */
> - if (PICT_FORMAT_A(source_picture->format) == 0)
> - i915_fs_mov_masked(FS_R0, MASK_W, i915_fs_operand_one());
> -
> src_reg = FS_R0;
> }
>
> @@ -653,7 +648,9 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
> }
> }
> if (dst_format == COLR_BUF_8BIT)
> - i915_fs_mov(FS_OC, i915_fs_operand(out_reg, W, W, W, W));
> + i915_fs_mov(FS_OC, i915_fs_operand(out_reg, W, W, W, W));
> + if (PICT_FORMAT_A(dest_picture->format) == 0)
> + i915_fs_mov_masked(FS_OC, MASK_W, i915_fs_operand_one());
>
> FS_END();
> }
> --
> 1.6.5.2
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
More information about the Intel-gfx
mailing list