[Mesa-dev] [PATCH 4/4] llvmpipe: turn on integer texture support

Jose Fonseca jfonseca at vmware.com
Tue Jan 15 14:00:26 PST 2013


----- Original Message -----
> From: Roland Scheidegger <sroland at vmware.com>
> 
> Now that things mostly seem to work enable those formats.
> Some formats cause crashes (notably RGB8 variants) so switch these
> off
> (these crashes are not specific to INT/UINT variants but the state
> tracker
> doesn't use them for UNORM etc. formats so it went unnoticed so far).
> ---
>  src/gallium/drivers/llvmpipe/lp_screen.c |   22
>  ++++++++++++++++------
>  1 file changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c
> b/src/gallium/drivers/llvmpipe/lp_screen.c
> index b99e617..66a84c0 100644
> --- a/src/gallium/drivers/llvmpipe/lp_screen.c
> +++ b/src/gallium/drivers/llvmpipe/lp_screen.c
> @@ -334,6 +334,20 @@ llvmpipe_is_format_supported( struct pipe_screen
> *_screen,
>  
>        if (!format_desc->is_array && !format_desc->is_bitmask)
>           return FALSE;
> +
> +      /*
> +       * XXX refuse formats known to crash in
> generate_unswizzled_blend().
> +       * These include all 3-channel 24bit RGB8 variants, plus 48bit
> +       * (except those using floats) 3-channel RGB16 variants (the
> latter
> +       * seems to be more of a llvm bug though).
> +       * The mesa state tracker only seems to use these for
> SINT/UINT formats.
> +       */
> +      if (format_desc->is_array && format_desc->nr_channels == 3) {
> +         if (format_desc->block.bits == 24 ||
> (format_desc->block.bits == 48 &&
> +               !util_format_is_float(format))) {
> +            return FALSE;
> +         }
> +      }
>     }
>  
>     if (bind & PIPE_BIND_DISPLAY_TARGET) {
> @@ -358,14 +372,10 @@ llvmpipe_is_format_supported( struct
> pipe_screen *_screen,
>     }
>  
>     /*
> -    * Everything can be supported by u_format.
> +    * Everything can be supported by u_format
> +    * (those without fetch_rgba_float might be not but shouldn't hit
> that)
>      */
>  
> -   if (format_desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS &&
> -       !format_desc->fetch_rgba_float) {
> -      return FALSE;
> -   }

We don't have a fetch_rgba_uint fallback, like the fetch_rgba_float there is now. But this is not a problem now. So series is

Reviewed-by: Jose Fonseca <jfonseca at vmware.com>

Jose


More information about the mesa-dev mailing list