summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/softpipe/sp_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/softpipe/sp_screen.c')
-rw-r--r--src/gallium/drivers/softpipe/sp_screen.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c
index ddc53b336f..be64048abf 100644
--- a/src/gallium/drivers/softpipe/sp_screen.c
+++ b/src/gallium/drivers/softpipe/sp_screen.c
@@ -27,7 +27,6 @@
#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"
@@ -156,9 +155,25 @@ softpipe_is_format_supported( struct pipe_screen *screen,
target == PIPE_TEXTURE_3D ||
target == PIPE_TEXTURE_CUBE);
- if(!util_format_is_supported(format))
+ switch(format) {
+ case PIPE_FORMAT_YUYV:
+ case PIPE_FORMAT_UYVY:
return FALSE;
+ case PIPE_FORMAT_DXT1_RGB:
+ case PIPE_FORMAT_DXT1_RGBA:
+ case PIPE_FORMAT_DXT3_RGBA:
+ case PIPE_FORMAT_DXT5_RGBA:
+ return util_format_s3tc_enabled;
+
+ case PIPE_FORMAT_Z32_FLOAT:
+ case PIPE_FORMAT_NONE:
+ return FALSE;
+
+ default:
+ break;
+ }
+
if(tex_usage & (PIPE_TEXTURE_USAGE_DISPLAY_TARGET |
PIPE_TEXTURE_USAGE_SCANOUT |
PIPE_TEXTURE_USAGE_SHARED)) {
@@ -166,6 +181,8 @@ softpipe_is_format_supported( struct pipe_screen *screen,
return FALSE;
}
+ /* XXX: this is often a lie. Pull in logic from llvmpipe to fix.
+ */
return TRUE;
}
@@ -224,6 +241,8 @@ softpipe_create_screen(struct sw_winsys *winsys)
screen->base.context_create = softpipe_create_context;
screen->base.flush_frontbuffer = softpipe_flush_frontbuffer;
+ util_format_s3tc_init();
+
softpipe_init_screen_texture_funcs(&screen->base);
softpipe_init_screen_buffer_funcs(&screen->base);
softpipe_init_screen_fence_funcs(&screen->base);