Re: [Mesa-dev] [PATCH V2 08/11] Gallium/dri2: implement blitImage
Hi Axel, flush_resource should be called before ctx-st-flush. Marek On Thu, May 29, 2014 at 5:22 AM, Axel Davy axel.d...@ens.fr wrote: Signed-off-by: Axel Davy axel.d...@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@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH V2 08/11] Gallium/dri2: implement blitImage
On 29/05/2014 13:18, Marek Olšák wrote : Hi Axel, flush_resource should be called before ctx-st-flush. Marek Thanks, I'll update for the next version of the patch. Axel Davy ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH V2 08/11] Gallium/dri2: implement blitImage
Signed-off-by: Axel Davy axel.d...@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@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev