[Mesa-dev] [PATCH] i965: Don't use fast copy blit in case of logical operations other than GL_COPY

Matt Turner mattst88 at gmail.com
Wed May 25 19:59:23 UTC 2016


On Wed, May 25, 2016 at 11:40 AM, Anuj Phogat <anuj.phogat at gmail.com> wrote:
> XY_FAST_COPY_BLT command doesn't have a field for raster operation. So, fall
> back to using XY_SRC_COPY_BLT to handle those cases.
>
> Fixes piglit test gl-1.1-xor-copypixels when fast copy blit is enabled
> for all tiling formats.
>
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
> ---
>  src/mesa/drivers/dri/i965/intel_blit.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_blit.c b/src/mesa/drivers/dri/i965/intel_blit.c
> index 42cdb36..91c24ea 100644
> --- a/src/mesa/drivers/dri/i965/intel_blit.c
> +++ b/src/mesa/drivers/dri/i965/intel_blit.c
> @@ -340,7 +340,8 @@ can_fast_copy_blit(struct brw_context *brw,
>                     int16_t dst_x, int16_t dst_y,
>                     uintptr_t dst_offset, uint32_t dst_pitch,
>                     uint32_t dst_tiling, uint32_t dst_tr_mode,
> -                   int16_t w, int16_t h, uint32_t cpp)
> +                   int16_t w, int16_t h, uint32_t cpp,
> +                   GLenum logic_op)
>  {
>     const bool dst_tiling_none = dst_tiling == I915_TILING_NONE;
>     const bool src_tiling_none = src_tiling == I915_TILING_NONE;
> @@ -348,6 +349,9 @@ can_fast_copy_blit(struct brw_context *brw,
>     if (brw->gen < 9)
>        return false;
>
> +   if (logic_op != GL_COPY)
> +      return false;
> +
>     /* The start pixel for Fast Copy blit should be on an OWord boundary. */
>     if ((dst_x * cpp | src_x * cpp) & 15)
>        return false;
> @@ -490,13 +494,14 @@ intelEmitCopyBlit(struct brw_context *brw,
>                                             dst_x, dst_y,
>                                             dst_offset, dst_pitch,
>                                             dst_tiling, dst_tr_mode,
> -                                           w, h, cpp);
> +                                           w, h, cpp, logic_op);
>     if (!use_fast_copy_blit &&
>         (src_tr_mode != INTEL_MIPTREE_TRMODE_NONE ||
>          dst_tr_mode != INTEL_MIPTREE_TRMODE_NONE))
>        return false;
>
>     if (use_fast_copy_blit) {
> +      assert(logic_op == GL_COPY);

Newline between the assert and the multiline comment.

Reviewed-by: Matt Turner <mattst88 at gmail.com>

>        /* When two sequential fast copy blits have different source surfaces,
>         * but their destinations refer to the same destination surfaces and
>         * therefore destinations overlap it is imperative that a flush be
> --


More information about the mesa-dev mailing list