[Mesa-dev] [PATCH V2 08/11] Gallium/dri2: implement blitImage
Marek Olšák
maraeo at gmail.com
Thu May 29 10:18:26 PDT 2014
Hi Axel,
flush_resource should be called before ctx->st->flush.
Marek
On Thu, May 29, 2014 at 5:22 AM, Axel Davy <axel.davy at ens.fr> wrote:
> Signed-off-by: Axel Davy <axel.davy at ens.fr>
> ---
> src/gallium/state_trackers/dri/drm/dri2.c | 43 ++++++++++++++++++++++++++++---
> 1 file changed, 40 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/state_trackers/dri/drm/dri2.c b/src/gallium/state_trackers/dri/drm/dri2.c
> index eefbe42..f4db3d8 100644
> --- a/src/gallium/state_trackers/dri/drm/dri2.c
> +++ b/src/gallium/state_trackers/dri/drm/dri2.c
> @@ -1251,6 +1251,42 @@ dri2_from_dma_bufs(__DRIscreen *screen,
> }
>
> static void
> +dri2_blit_image(__DRIcontext *context, __DRIimage *dst, __DRIimage *src,
> + int dstx0, int dsty0, int dstwidth, int dstheight,
> + int srcx0, int srcy0, int srcwidth, int srcheight)
> +{
> + struct dri_context *ctx = dri_context(context);
> + struct pipe_context *pipe = ctx->st->pipe;
> + struct pipe_blit_info blit;
> +
> + if (!dst || !src)
> + return;
> +
> + memset(&blit, 0, sizeof(blit));
> + blit.dst.resource = dst->texture;
> + blit.dst.box.x = dstx0;
> + blit.dst.box.y = dsty0;
> + blit.dst.box.width = dstwidth;
> + blit.dst.box.height = dstheight;
> + blit.dst.box.depth = 1;
> + blit.dst.format = dst->texture->format;
> + blit.src.resource = src->texture;
> + blit.src.box.x = srcx0;
> + blit.src.box.y = srcy0;
> + blit.src.box.width = srcwidth;
> + blit.src.box.height = srcheight;
> + blit.src.box.depth = 1;
> + blit.src.format = src->texture->format;
> + blit.mask = PIPE_MASK_RGBA;
> + blit.filter = PIPE_TEX_FILTER_NEAREST;
> +
> + pipe->blit(pipe, &blit);
> +
> + ctx->st->flush(ctx->st, 0, NULL);
> + pipe->flush_resource(pipe, dst->texture);
> +}
> +
> +static void
> dri2_destroy_image(__DRIimage *img)
> {
> pipe_resource_reference(&img->texture, NULL);
> @@ -1259,7 +1295,7 @@ dri2_destroy_image(__DRIimage *img)
>
> /* The extension is modified during runtime if DRI_PRIME is detected */
> static __DRIimageExtension dri2ImageExtension = {
> - .base = { __DRI_IMAGE, 6 },
> + .base = { __DRI_IMAGE, 9 },
>
> .createImageFromName = dri2_create_image_from_name,
> .createImageFromRenderbuffer = dri2_create_image_from_renderbuffer,
> @@ -1271,6 +1307,9 @@ static __DRIimageExtension dri2ImageExtension = {
> .createImageFromNames = dri2_from_names,
> .fromPlanar = dri2_from_planar,
> .createImageFromTexture = dri2_create_from_texture,
> + .createImageFromFds = NULL,
> + .createImageFromDmaBufs = NULL,
> + .blitImage = dri2_blit_image,
> };
>
> /*
> @@ -1325,8 +1364,6 @@ dri2_init_screen(__DRIscreen * sPriv)
>
> if (drmGetCap(sPriv->fd, DRM_CAP_PRIME, &cap) == 0 &&
> (cap & DRM_PRIME_CAP_IMPORT)) {
> -
> - dri2ImageExtension.base.version = 8;
> dri2ImageExtension.createImageFromFds = dri2_from_fds;
> dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs;
> }
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list