llvmpipe: Support S3TC when util_format_s3tc_enabled is set.
authorJosé Fonseca <jfonseca@vmware.com>
Tue, 6 Apr 2010 21:49:57 +0000 (22:49 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Tue, 6 Apr 2010 21:52:33 +0000 (22:52 +0100)
src/gallium/drivers/llvmpipe/lp_screen.c

index 625d4092db66e9687994f6e23644e61cc05ec529..69995995580d6b98f2e028cd4915102475c33880 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "util/u_memory.h"
 #include "util/u_format.h"
+#include "util/u_format_s3tc.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_screen.h"
 
@@ -186,19 +187,19 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
    case PIPE_FORMAT_DXT1_RGBA:
    case PIPE_FORMAT_DXT3_RGBA:
    case PIPE_FORMAT_DXT5_RGBA:
-      return FALSE;
+      return util_format_s3tc_enabled;
    default:
       break;
    }
 
-   if(format_desc->block.width != 1 ||
-      format_desc->block.height != 1)
-      return FALSE;
+   if(tex_usage & PIPE_TEXTURE_USAGE_RENDER_TARGET) {
+      if(format_desc->layout != UTIL_FORMAT_LAYOUT_PLAIN)
+         return FALSE;
 
-   if(format_desc->layout != UTIL_FORMAT_LAYOUT_PLAIN)
-      return FALSE;
+      if(format_desc->block.width != 1 ||
+         format_desc->block.height != 1)
+         return FALSE;
 
-   if(tex_usage & PIPE_TEXTURE_USAGE_RENDER_TARGET) {
       if(format_desc->colorspace != UTIL_FORMAT_COLORSPACE_RGB &&
          format_desc->colorspace != UTIL_FORMAT_COLORSPACE_SRGB)
          return FALSE;
@@ -220,17 +221,6 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
          return FALSE;
    }
 
-   /* FIXME: Temporary restrictions. See lp_bld_sample_soa.c */
-   if(tex_usage & PIPE_TEXTURE_USAGE_SAMPLER) {
-      if(!format_desc->is_bitmask &&
-         format != PIPE_FORMAT_R32_FLOAT)
-         return FALSE;
-
-      if(format_desc->colorspace != UTIL_FORMAT_COLORSPACE_RGB &&
-         format_desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS)
-         return FALSE;
-   }
-
    return TRUE;
 }
 
@@ -297,6 +287,8 @@ llvmpipe_create_screen(struct sw_winsys *winsys)
    screen->base.context_create = llvmpipe_create_context;
    screen->base.flush_frontbuffer = llvmpipe_flush_frontbuffer;
 
+   util_format_s3tc_init();
+
    llvmpipe_init_screen_texture_funcs(&screen->base);
    llvmpipe_init_screen_buffer_funcs(&screen->base);
    llvmpipe_init_screen_fence_funcs(&screen->base);