From d03d9b657e73fe026a395c7c7f0e157ad90107c7 Mon Sep 17 00:00:00 2001 From: Roland Scheidegger Date: Sat, 12 Jan 2013 17:28:40 -0800 Subject: [PATCH] llvmpipe: turn on integer texture support MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- 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 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; } -- 2.30.2