[Mesa-dev] [PATCH 05/10] i965: Move tex miptree and format resolving into dispatcher

Francisco Jerez currojerez at riseup.net
Wed Aug 19 07:46:41 PDT 2015


Topi Pohjolainen <topi.pohjolainen at intel.com> writes:

> All hardware platforms have this in common, so do it in the
> hardware independent dispatcher.
>
> v2 (Matt): Removed extra whitespace.
> v3: Non-trivial rebase
>
> Reviewed-by: Matt Turner <mattst88 at gmail.com> (v1)
> Reviewed-by: Kenneth Graunke <kenneth at whitecape.org> (v1)
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

I had already reviewed this patch, not sure why you dropped it, anyway:
Reviewed-by: Francisco Jerez <currojerez at riseup.net>

> ---
>  src/mesa/drivers/dri/i965/brw_context.h           |  4 +++-
>  src/mesa/drivers/dri/i965/brw_wm_surface_state.c  | 26 ++++++++++++++++-------
>  src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 10 +++------
>  src/mesa/drivers/dri/i965/gen8_surface_state.c    | 14 +++---------
>  4 files changed, 27 insertions(+), 27 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
> index da018bf..ef9bb87 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.h
> +++ b/src/mesa/drivers/dri/i965/brw_context.h
> @@ -981,7 +981,9 @@ struct brw_context
>     struct
>     {
>        void (*update_texture_surface)(struct gl_context *ctx,
> -                                     unsigned unit,
> +                                     const struct intel_mipmap_tree *mt,
> +                                     struct gl_texture_object *tex_obj,
> +                                     uint32_t tex_format,
>                                       uint32_t *surf_offset,
>                                       bool for_gather);
>        uint32_t (*update_renderbuffer_surface)(struct brw_context *brw,
> diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> index 26e9122..c14f00a 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> @@ -308,23 +308,19 @@ brw_update_buffer_texture_surface(struct brw_context *brw,
>  
>  static void
>  brw_update_texture_surface(struct gl_context *ctx,
> -                           unsigned unit,
> +                           const struct intel_mipmap_tree *mt,
> +                           struct gl_texture_object *tObj,
> +                           uint32_t tex_format,
>                             uint32_t *surf_offset,
>                             bool for_gather)
>  {
>     struct brw_context *brw = brw_context(ctx);
> -   struct gl_texture_object *tObj = ctx->Texture.Unit[unit]._Current;
>     struct intel_texture_object *intelObj = intel_texture_object(tObj);
> -   struct intel_mipmap_tree *mt = intelObj->mt;
> -   struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, unit);
>     uint32_t *surf;
>  
>     surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE,
>  			  6 * 4, 32, surf_offset);
>  
> -   uint32_t tex_format = translate_tex_format(brw, intelObj->_Format,
> -                                              sampler->sRGBDecode);
> -
>     if (for_gather) {
>        /* Sandybridge's gather4 message is broken for integer formats.
>         * To work around this, we pretend the surface is UNORM for
> @@ -828,8 +824,22 @@ update_stage_texture_surfaces(struct brw_context *brw,
>           continue;
>        }
>  
> +      const struct gl_texture_image *first_img = tex->Image[0][tex->BaseLevel];
> +      const struct intel_texture_object *itex = intel_texture_object(tex);
> +      const struct intel_mipmap_tree *mt = itex->mt;
> +      const struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx,
> +                                                                     unit);
> +      uint32_t format = translate_tex_format(brw, itex->_Format,
> +                                             sampler->sRGBDecode);
> +
> +      if (tex->StencilSampling && first_img->_BaseFormat == GL_DEPTH_STENCIL) {
> +         mt = mt->stencil_mt;
> +         format = BRW_SURFACEFORMAT_R8_UINT;
> +         assert(brw->gen >= 8);
> +      }
> +
>        /* _NEW_TEXTURE */
> -      brw->vtbl.update_texture_surface(ctx, unit,
> +      brw->vtbl.update_texture_surface(ctx, mt, tex, format,
>                                         surf_offset + s, for_gather);
>     }
>  }
> diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> index 6aa8299..26d080f 100644
> --- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> @@ -349,20 +349,19 @@ gen7_emit_texture_surface_state(struct brw_context *brw,
>  
>  static void
>  gen7_update_texture_surface(struct gl_context *ctx,
> -                            unsigned unit,
> +                            const struct intel_mipmap_tree *mt,
> +                            struct gl_texture_object *obj,
> +                            uint32_t format,
>                              uint32_t *surf_offset,
>                              bool for_gather)
>  {
>     struct brw_context *brw = brw_context(ctx);
> -   struct gl_texture_object *obj = ctx->Texture.Unit[unit]._Current;
>  
>     if (obj->Target == GL_TEXTURE_BUFFER) {
>        brw_update_buffer_texture_surface(brw, obj, surf_offset);
>  
>     } else {
>        struct intel_texture_object *intel_obj = intel_texture_object(obj);
> -      struct intel_mipmap_tree *mt = intel_obj->mt;
> -      struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, unit);
>        /* If this is a view with restricted NumLayers, then our effective depth
>         * is not just the miptree depth.
>         */
> @@ -380,9 +379,6 @@ gen7_update_texture_surface(struct gl_context *ctx,
>        const unsigned swizzle = (unlikely(alpha_depth) ? SWIZZLE_XYZW :
>                                  brw_get_texture_swizzle(&brw->ctx, obj));
>  
> -      unsigned format = translate_tex_format(
> -         brw, intel_obj->_Format, sampler->sRGBDecode);
> -
>        if (for_gather && format == BRW_SURFACEFORMAT_R32G32_FLOAT)
>           format = BRW_SURFACEFORMAT_R32G32_FLOAT_LD;
>  
> diff --git a/src/mesa/drivers/dri/i965/gen8_surface_state.c b/src/mesa/drivers/dri/i965/gen8_surface_state.c
> index 11defd1..b6766ef 100644
> --- a/src/mesa/drivers/dri/i965/gen8_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/gen8_surface_state.c
> @@ -300,12 +300,13 @@ gen8_emit_texture_surface_state(struct brw_context *brw,
>  
>  static void
>  gen8_update_texture_surface(struct gl_context *ctx,
> -                            unsigned unit,
> +                            const struct intel_mipmap_tree *mt,
> +                            struct gl_texture_object *obj,
> +                            uint32_t format,
>                              uint32_t *surf_offset,
>                              bool for_gather)
>  {
>     struct brw_context *brw = brw_context(ctx);
> -   struct gl_texture_object *obj = ctx->Texture.Unit[unit]._Current;
>  
>     if (obj->Target == GL_TEXTURE_BUFFER) {
>        brw_update_buffer_texture_surface(brw, obj, surf_offset);
> @@ -313,8 +314,6 @@ gen8_update_texture_surface(struct gl_context *ctx,
>     } else {
>        struct gl_texture_image *firstImage = obj->Image[0][obj->BaseLevel];
>        struct intel_texture_object *intel_obj = intel_texture_object(obj);
> -      struct intel_mipmap_tree *mt = intel_obj->mt;
> -      struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, unit);
>        /* If this is a view with restricted NumLayers, then our effective depth
>         * is not just the miptree depth.
>         */
> @@ -331,13 +330,6 @@ gen8_update_texture_surface(struct gl_context *ctx,
>        const unsigned swizzle = (unlikely(alpha_depth) ? SWIZZLE_XYZW :
>                                  brw_get_texture_swizzle(&brw->ctx, obj));
>  
> -      unsigned format = translate_tex_format(brw, intel_obj->_Format,
> -                                             sampler->sRGBDecode);
> -      if (obj->StencilSampling && firstImage->_BaseFormat == GL_DEPTH_STENCIL) {
> -         mt = mt->stencil_mt;
> -         format = BRW_SURFACEFORMAT_R8_UINT;
> -      }
> -
>        gen8_emit_texture_surface_state(brw, mt, obj->Target,
>                                        obj->MinLayer, obj->MinLayer + depth,
>                                        obj->MinLevel + obj->BaseLevel,
> -- 
> 1.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150819/6db5ac4d/attachment.sig>


More information about the mesa-dev mailing list