llvmpipe: turn on integer texture support
authorRoland Scheidegger <sroland@vmware.com>
Sun, 13 Jan 2013 01:28:40 +0000 (17:28 -0800)
committerRoland Scheidegger <sroland@vmware.com>
Fri, 18 Jan 2013 17:14:52 +0000 (09:14 -0800)
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@vmware.com>
Reviewed-by: José Fonseca <jfonseca@vmware.com>
src/gallium/drivers/llvmpipe/lp_screen.c

index 450a896b0972cc85a84c5103af419c63acb14b7a..872967caeef65a75e8920eaea817ea86f8bd8210 100644 (file)
@@ -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;
 }