On 02/03/2014 01:29 AM, Chris Forbes wrote:
> Signed-off-by: Chris Forbes <chr...@ijw.co.nz>
> ---
>  src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 30 
> ++++++++++++++++++++----
>  1 file changed, 25 insertions(+), 5 deletions(-)
> 
> 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 dd96c9b..247b663 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> @@ -282,15 +282,35 @@ brw_update_texture_surface(struct gl_context *ctx,
>     surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE,
>                         6 * 4, 32, surf_offset);
>  
> -   (void) for_gather;   /* no w/a to apply for this gen */
> +   uint32_t tex_format = translate_tex_format(brw, mt->format,
> +                                              sampler->sRGBDecode);
> +
> +   if (for_gather) {

The cover letter for your patch series has a nice explanation of what's
going on.  It would be great to capture some of that here.  Perhaps by
adding something like:

      /* Sandybridge's gather4 message is broken for integer formats.
       * To work around this, we pretend the surface is UNORM for
       * 8 or 16-bit formats, and emit shader instructions to recover
       * the real INT/UINT value.  For 32-bit formats, we pretend
       * the surface is FLOAT, and simply reinterpret the resulting
       * bits.
       */

> +      switch (tex_format) {
> +      case BRW_SURFACEFORMAT_R8_SINT:
> +      case BRW_SURFACEFORMAT_R8_UINT:
> +         tex_format = BRW_SURFACEFORMAT_R8_UNORM;
> +         break;
> +
> +      case BRW_SURFACEFORMAT_R16_SINT:
> +      case BRW_SURFACEFORMAT_R16_UINT:
> +         tex_format = BRW_SURFACEFORMAT_R16_UNORM;
> +         break;
> +
> +      case BRW_SURFACEFORMAT_R32_SINT:
> +      case BRW_SURFACEFORMAT_R32_UINT:
> +         tex_format = BRW_SURFACEFORMAT_R32_FLOAT;
> +         break;
> +
> +      default:
> +         break;
> +      }
> +   }
>  
>     surf[0] = (translate_tex_target(tObj->Target) << BRW_SURFACE_TYPE_SHIFT |
>             BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT |
>             BRW_SURFACE_CUBEFACE_ENABLES |
> -           (translate_tex_format(brw,
> -                                    mt->format,
> -                                 sampler->sRGBDecode) <<
> -            BRW_SURFACE_FORMAT_SHIFT));
> +           tex_format << BRW_SURFACE_FORMAT_SHIFT);
>  
>     surf[1] = intelObj->mt->region->bo->offset64 + intelObj->mt->offset; /* 
> reloc */
>  
> 


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to