From: Roland Scheidegger Date: Sun, 13 Jan 2013 01:28:40 +0000 (-0800) Subject: llvmpipe: turn on integer texture support X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d03d9b657e73fe026a395c7c7f0e157ad90107c7;p=mesa.git llvmpipe: turn on integer texture support 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). Reviewed-by: Brian Paul Reviewed-by: José Fonseca --- diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c index 450a896b097..872967caeef 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.c +++ b/src/gallium/drivers/llvmpipe/lp_screen.c @@ -332,6 +332,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) { @@ -356,14 +370,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; - } - return TRUE; }