[Mesa-dev] [PATCH 08/64] i965/blorp: Only set src_z for gen8+ 3D textures

Chad Versace chad.versace at intel.com
Thu Jun 16 17:08:03 UTC 2016


On Sat 11 Jun 2016, Jason Ekstrand wrote:
> Otherwise, we end up with a bogus value in the third component.  On gen6-7
> where we always use 2D textures, this can cause problems if the
> SurfaceArray bit is set in the SURFACE_STATE.

Enlighten me. Why does blorp use 3D surfaces on gen >= 8 but not
earlier?

> ---
>  src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> index 782d285..cdb6b33 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> @@ -1846,8 +1846,15 @@ brw_blorp_blit_miptrees(struct brw_context *brw,
>     brw_blorp_setup_coord_transform(&params.wm_push_consts.y_transform,
>                                     src_y0, src_y1, dst_y0, dst_y1, mirror_y);
>  
> -   params.wm_push_consts.src_z =
> -      params.src.mt->target == GL_TEXTURE_3D ? params.src.layer : 0;
> +   if (brw->gen >= 8 && params.src.mt->target == GL_TEXTURE_3D) {
> +      /* On gen8+ we use actual 3-D textures so we need to pass the layer
> +       * through to the sampler.
> +       */
> +      params.wm_push_consts.src_z = params.src.layer;
> +   } else {
> +      /* On gen7 and earlier, we fake everything with 2-D textures */
> +      params.wm_push_consts.src_z = 0;
> +   }
>  
>     if (params.dst.num_samples <= 1 && dst_mt->num_samples > 1) {
>        /* We must expand the rectangle we send through the rendering pipeline,


More information about the mesa-dev mailing list