aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/draw
diff options
context:
space:
mode:
authorJosé Fonseca <[email protected]>2012-07-12 20:47:20 +0100
committerJosé Fonseca <[email protected]>2012-07-13 13:01:51 +0100
commit6dddd184803da5f67f69e7c243dbb596b4dd4b9d (patch)
tree30929d27e0fa88b8de2f079ac28fb0f7729e5744 /src/gallium/auxiliary/draw
parent99728076ec1a8bd3feb0f23e41198d8d5e56d0c9 (diff)
draw,gallivm: Fix draw_get_shader_param.
- Use LLVM limits when LLVM is being used, instead of TGSI limits - Provide draw_get_shader_param_no_llvm for when llvm is never used (softpipe) - Eliminate several of the hacks around draw shader caps in several drivers Unfortunately the hack for PIPE_MAX_VERTEX_SAMPLERS is still necessary. Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/draw')
-rw-r--r--src/gallium/auxiliary/draw/draw_context.c41
-rw-r--r--src/gallium/auxiliary/draw/draw_context.h16
2 files changed, 46 insertions, 11 deletions
diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c
index 2eae204ff2c..20260c1abbf 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -42,6 +42,7 @@
#if HAVE_LLVM
#include "gallivm/lp_bld_init.h"
+#include "gallivm/lp_bld_limits.h"
#include "draw_llvm.h"
static boolean
@@ -830,3 +831,43 @@ draw_set_mapped_texture(struct draw_context *draw,
row_stride, img_stride, data);
#endif
}
+
+/**
+ * XXX: Results for PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS because there are two
+ * different ways of setting textures, and drivers typically only support one.
+ */
+int
+draw_get_shader_param_no_llvm(unsigned shader, enum pipe_shader_cap param)
+{
+ switch(shader) {
+ case PIPE_SHADER_VERTEX:
+ case PIPE_SHADER_GEOMETRY:
+ return tgsi_exec_get_shader_param(param);
+ default:
+ return 0;
+ }
+}
+
+/**
+ * XXX: Results for PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS because there are two
+ * different ways of setting textures, and drivers typically only support one.
+ */
+int
+draw_get_shader_param(unsigned shader, enum pipe_shader_cap param)
+{
+
+#ifdef HAVE_LLVM
+ if (draw_get_option_use_llvm()) {
+ switch(shader) {
+ case PIPE_SHADER_VERTEX:
+ case PIPE_SHADER_GEOMETRY:
+ return gallivm_get_shader_param(param);
+ default:
+ return 0;
+ }
+ }
+#endif
+
+ return draw_get_shader_param_no_llvm(shader, param);
+}
+
diff --git a/src/gallium/auxiliary/draw/draw_context.h b/src/gallium/auxiliary/draw/draw_context.h
index 4cd0caf3296..852cbc3da13 100644
--- a/src/gallium/auxiliary/draw/draw_context.h
+++ b/src/gallium/auxiliary/draw/draw_context.h
@@ -277,16 +277,10 @@ boolean draw_need_pipeline(const struct draw_context *draw,
const struct pipe_rasterizer_state *rasterizer,
unsigned prim );
-static INLINE int
-draw_get_shader_param(unsigned shader, enum pipe_shader_cap param)
-{
- switch(shader) {
- case PIPE_SHADER_VERTEX:
- case PIPE_SHADER_GEOMETRY:
- return tgsi_exec_get_shader_param(param);
- default:
- return 0;
- }
-}
+int
+draw_get_shader_param(unsigned shader, enum pipe_shader_cap param);
+
+int
+draw_get_shader_param_no_llvm(unsigned shader, enum pipe_shader_cap param);
#endif /* DRAW_CONTEXT_H */