[Mesa-dev] [PATCH 4/4] llvmpipe: turn on integer texture support
sroland at vmware.com
sroland at vmware.com
Sat Jan 12 17:29:52 PST 2013
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;
- }
-
return TRUE;
}
--
1.7.9.5
More information about the mesa-dev
mailing list