[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