On 04.11.2015 08:46, Marek Olšák wrote:
> 
> @@ -209,11 +211,48 @@ static void si_clear_buffer(struct pipe_context *ctx, 
> struct pipe_resource *dst,
>               r600_resource(dst)->TC_L2_dirty = true;
>  }
>  
> +/**
> + * Realign the CP DMA engine. This must be done after a copy with an 
> unaligned
> + * size.
> + *
> + * \param size  Remaining size to the CP DMA alignment.
> + */
> +static void si_cp_dma_realign_engine(struct si_context *sctx, unsigned size)
> +{
> +     uint64_t va;
> +     unsigned dma_flags = 0;
> +     unsigned scratch_size = CP_DMA_ALIGNMENT * 2;
> +
> +     assert(size < CP_DMA_ALIGNMENT);
> +
> +     /* Use the scratch buffer as the dummy buffer. The 3D engine should be
> +      * idle at this point.
> +      */
> +     if (!sctx->scratch_buffer ||
> +         sctx->scratch_buffer->b.b.width0 < scratch_size) {
> +             r600_resource_reference(&sctx->scratch_buffer, NULL);
> +             sctx->scratch_buffer =
> +                     si_resource_create_custom(&sctx->screen->b.b,
> +                                               PIPE_USAGE_DEFAULT,
> +                                               scratch_size);
> +     }
> +
> +     si_cp_dma_prepare(sctx, &sctx->scratch_buffer->b.b,
> +                       &sctx->scratch_buffer->b.b, size, size, &dma_flags);
> +
> +     va = sctx->scratch_buffer->gpu_address;
> +     si_emit_cp_dma_copy_buffer(sctx, va, va + CP_DMA_ALIGNMENT, size,
> +                                dma_flags);
> +}

Should this update sctx->emit_scratch_reloc ?


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to