Mesa (master): llvmpipe: turn on integer texture support

Roland Scheidegger sroland at kemper.freedesktop.org
Fri Jan 18 17:14:58 UTC 2013


Module: Mesa
Branch: master
Commit: d03d9b657e73fe026a395c7c7f0e157ad90107c7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d03d9b657e73fe026a395c7c7f0e157ad90107c7

Author: Roland Scheidegger <sroland at vmware.com>
Date:   Sat Jan 12 17:28:40 2013 -0800

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 <brianp at vmware.com>
Reviewed-by: José Fonseca <jfonseca at vmware.com>

---

 src/gallium/drivers/llvmpipe/lp_screen.c |   22 ++++++++++++++++------
 1 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
index 450a896..872967c 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;
 }
 




More information about the mesa-commit mailing list