[Mesa-dev] [PATCH 10/18] i965: Make intel_set_texture_region just take a BO and pitch.
Kristian Høgsberg
krh at bitplanet.net
Wed Apr 30 21:59:48 PDT 2014
On Tue, Apr 29, 2014 at 4:34 PM, Eric Anholt <eric at anholt.net> wrote:
> I want to do this to get the region removed from DRI images. However, it
> does mean that we won't share the intel_region between the rb and the
> texture for texture_from_pixmap. I think that's fine.
My review got stuck on this one as I though we were going to put a
miptree in the __DRIimage struct and then we could just share the
miptree instead. But you have a good point that that's problematic
from a thread-safety point of view and this works just as well, if not
better (less overhead). This and the rest of the series
Reviewed-by: Kristian Høgsberg <krh at bitplanet.net>
> ---
> src/mesa/drivers/dri/i965/intel_tex_image.c | 56 ++++++++++++++---------------
> 1 file changed, 27 insertions(+), 29 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c
> index 46cbaf7..b7fab39 100644
> --- a/src/mesa/drivers/dri/i965/intel_tex_image.c
> +++ b/src/mesa/drivers/dri/i965/intel_tex_image.c
> @@ -201,22 +201,21 @@ intelTexImage(struct gl_context * ctx,
>
>
> /**
> - * Binds a region to a texture image, like it was uploaded by glTexImage2D().
> + * Binds a BO to a texture image, as if it was uploaded by glTexImage2D().
> *
> * Used for GLX_EXT_texture_from_pixmap and EGL image extensions,
> */
> static void
> -intel_set_texture_image_region(struct gl_context *ctx,
> - struct gl_texture_image *image,
> - struct intel_region *region,
> - GLenum target,
> - GLenum internalFormat,
> - mesa_format format,
> - uint32_t offset,
> - GLuint width,
> - GLuint height,
> - GLuint tile_x,
> - GLuint tile_y)
> +intel_set_texture_image_bo(struct gl_context *ctx,
> + struct gl_texture_image *image,
> + drm_intel_bo *bo,
> + GLenum target,
> + GLenum internalFormat,
> + mesa_format format,
> + uint32_t offset,
> + GLuint width, GLuint height,
> + GLuint pitch,
> + GLuint tile_x, GLuint tile_y)
> {
> struct brw_context *brw = brw_context(ctx);
> struct intel_texture_image *intel_image = intel_texture_image(image);
> @@ -230,13 +229,10 @@ intel_set_texture_image_region(struct gl_context *ctx,
>
> ctx->Driver.FreeTextureImageBuffer(ctx, image);
>
> - intel_image->mt = intel_miptree_create_layout(brw, target, image->TexFormat,
> - 0, 0,
> - width, height, 1,
> - true, 0 /* num_samples */);
> + intel_image->mt = intel_miptree_create_for_bo(brw, bo, image->TexFormat,
> + 0, width, height, pitch);
> if (intel_image->mt == NULL)
> return;
> - intel_region_reference(&intel_image->mt->region, region);
> intel_image->mt->total_width = width;
> intel_image->mt->total_height = height;
> intel_image->mt->level[0].slice[0].x_offset = tile_x;
> @@ -258,8 +254,8 @@ intel_set_texture_image_region(struct gl_context *ctx,
> intel_texobj->needs_validate = true;
>
> intel_image->mt->offset = offset;
> - assert(region->pitch % region->cpp == 0);
> - intel_image->base.RowStride = region->pitch / region->cpp;
> + assert(pitch % intel_image->mt->region->cpp == 0);
> + intel_image->base.RowStride = pitch / intel_image->mt->region->cpp;
>
> /* Immediately validate the image to the object. */
> intel_miptree_reference(&intel_texobj->mt, intel_image->mt);
> @@ -312,11 +308,12 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
> _mesa_lock_texture(&brw->ctx, texObj);
> texImage = _mesa_get_tex_image(ctx, texObj, target, level);
> intel_miptree_make_shareable(brw, rb->mt);
> - intel_set_texture_image_region(ctx, texImage, rb->mt->region, target,
> - internalFormat, texFormat, 0,
> - rb->mt->region->width,
> - rb->mt->region->height,
> - 0, 0);
> + intel_set_texture_image_bo(ctx, texImage, rb->mt->region->bo, target,
> + internalFormat, texFormat, 0,
> + rb->mt->region->width,
> + rb->mt->region->height,
> + rb->mt->region->pitch,
> + 0, 0);
> _mesa_unlock_texture(&brw->ctx, texObj);
> }
>
> @@ -406,11 +403,12 @@ intel_image_target_texture_2d(struct gl_context *ctx, GLenum target,
> return;
> }
>
> - intel_set_texture_image_region(ctx, texImage, image->region,
> - target, image->internal_format,
> - image->format, image->offset,
> - image->width, image->height,
> - image->tile_x, image->tile_y);
> + intel_set_texture_image_bo(ctx, texImage, image->region->bo,
> + target, image->internal_format,
> + image->format, image->offset,
> + image->width, image->height,
> + image->region->pitch,
> + image->tile_x, image->tile_y);
> }
>
> void
> --
> 1.9.2
>
> _______________________________________________
> 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