summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/softpipe/sp_context.c5
-rw-r--r--src/gallium/drivers/softpipe/sp_screen.c16
-rw-r--r--src/gallium/drivers/softpipe/sp_screen.h6
3 files changed, 18 insertions, 9 deletions
diff --git a/src/gallium/drivers/softpipe/sp_context.c b/src/gallium/drivers/softpipe/sp_context.c
index e533e5a8243..abe0507b1ac 100644
--- a/src/gallium/drivers/softpipe/sp_context.c
+++ b/src/gallium/drivers/softpipe/sp_context.c
@@ -50,7 +50,7 @@
#include "sp_tex_tile_cache.h"
#include "sp_texture.h"
#include "sp_query.h"
-
+#include "sp_screen.h"
/**
@@ -230,6 +230,7 @@ struct pipe_context *
softpipe_create_context( struct pipe_screen *screen,
void *priv )
{
+ struct softpipe_screen *sp_screen = softpipe_screen(screen);
struct softpipe_context *softpipe = CALLOC_STRUCT(softpipe_context);
uint i;
@@ -304,7 +305,7 @@ softpipe_create_context( struct pipe_screen *screen,
/*
* Create drawing context and plug our rendering stage into it.
*/
- if (debug_get_bool_option("SOFTPIPE_USE_LLVM", FALSE))
+ if (sp_screen->using_llvm)
softpipe->draw = draw_create(&softpipe->pipe);
else
softpipe->draw = draw_create_no_llvm(&softpipe->pipe);
diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c
index 982af6b3808..35521b64ab1 100644
--- a/src/gallium/drivers/softpipe/sp_screen.c
+++ b/src/gallium/drivers/softpipe/sp_screen.c
@@ -45,6 +45,7 @@
#include "sp_fence.h"
#include "sp_public.h"
+DEBUG_GET_ONCE_BOOL_OPTION(use_llvm, "SOFTPIPE_USE_LLVM", FALSE);
static const char *
softpipe_get_vendor(struct pipe_screen *screen)
@@ -135,6 +136,7 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
static int
softpipe_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param)
{
+ struct softpipe_screen *sp_screen = softpipe_screen(screen);
switch(shader)
{
case PIPE_SHADER_FRAGMENT:
@@ -144,11 +146,17 @@ softpipe_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe
switch (param) {
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
#ifdef HAVE_LLVM
- /* Softpipe doesn't yet know how to tell draw/llvm about textures */
- return 0;
-#else
+ if (sp_screen->use_llvm)
+ /* Softpipe doesn't yet know how to tell draw/llvm about textures */
+ return 0;
+#endif
return PIPE_MAX_VERTEX_SAMPLERS;
+ case PIPE_SHADER_CAP_INTEGERS:
+#ifdef HAVE_LLVM /* gallivm doesn't support integers yet */
+ if (sp_screen->use_llvm)
+ return 0;
#endif
+ /* fallthrough */
default:
return draw_get_shader_param(shader, param);
}
@@ -326,6 +334,8 @@ softpipe_create_screen(struct sw_winsys *winsys)
screen->base.context_create = softpipe_create_context;
screen->base.flush_frontbuffer = softpipe_flush_frontbuffer;
+ screen->using_llvm = debug_get_option_use_llvm();
+
util_format_s3tc_init();
softpipe_init_screen_texture_funcs(&screen->base);
diff --git a/src/gallium/drivers/softpipe/sp_screen.h b/src/gallium/drivers/softpipe/sp_screen.h
index f741454c9e5..2cac81641a0 100644
--- a/src/gallium/drivers/softpipe/sp_screen.h
+++ b/src/gallium/drivers/softpipe/sp_screen.h
@@ -45,12 +45,10 @@ struct softpipe_screen {
/* Increments whenever textures are modified. Contexts can track
* this.
*/
- unsigned timestamp;
+ unsigned timestamp;
+ boolean using_llvm;
};
-
-
-
static INLINE struct softpipe_screen *
softpipe_screen( struct pipe_screen *pipe )
{