summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2014-04-23 17:06:13 -0400
committerZack Rusin <[email protected]>2014-04-24 13:59:24 -0400
commit1c73e919a4b4dd79166d0633075990056f27fd28 (patch)
tree0a8295b69c5cba74760fa28bea7abab4bb7a618c /src
parent552a8e44a92937a6ec6db05f4bea583245431b71 (diff)
draw/llvm: reduce memory usage
Lets make draw_get_option_use_llvm function available unconditionally and use it to avoid useless allocations when LLVM paths are active. TGSI machine is never used when we're using LLVM. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]> Reviewed-by: José Fonseca <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/draw/draw_context.c6
-rw-r--r--src/gallium/auxiliary/draw/draw_context.h2
-rw-r--r--src/gallium/auxiliary/draw/draw_gs.c26
-rw-r--r--src/gallium/auxiliary/draw/draw_vs.c11
-rw-r--r--src/gallium/auxiliary/draw/draw_vs_exec.c2
5 files changed, 27 insertions, 20 deletions
diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c
index 0a678790f13..ddc305b3b8d 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -68,6 +68,12 @@ draw_get_option_use_llvm(void)
}
return value;
}
+#else
+boolean
+draw_get_option_use_llvm(void)
+{
+ return FALSE;
+}
#endif
diff --git a/src/gallium/auxiliary/draw/draw_context.h b/src/gallium/auxiliary/draw/draw_context.h
index f114f503546..48549fe200e 100644
--- a/src/gallium/auxiliary/draw/draw_context.h
+++ b/src/gallium/auxiliary/draw/draw_context.h
@@ -288,9 +288,7 @@ 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);
-#ifdef HAVE_LLVM
boolean
draw_get_option_use_llvm(void);
-#endif
#endif /* DRAW_CONTEXT_H */
diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c
index 7de5e0308ec..5e503fff76a 100644
--- a/src/gallium/auxiliary/draw/draw_gs.c
+++ b/src/gallium/auxiliary/draw/draw_gs.c
@@ -674,11 +674,7 @@ int draw_geometry_shader_run(struct draw_geometry_shader *shader,
void draw_geometry_shader_prepare(struct draw_geometry_shader *shader,
struct draw_context *draw)
{
-#ifdef HAVE_LLVM
boolean use_llvm = draw_get_option_use_llvm();
-#else
- boolean use_llvm = FALSE;
-#endif
if (!use_llvm && shader && shader->machine->Tokens != shader->state.tokens) {
tgsi_exec_machine_bind_shader(shader->machine,
shader->state.tokens,
@@ -690,16 +686,18 @@ void draw_geometry_shader_prepare(struct draw_geometry_shader *shader,
boolean
draw_gs_init( struct draw_context *draw )
{
- draw->gs.tgsi.machine = tgsi_exec_machine_create();
- if (!draw->gs.tgsi.machine)
- return FALSE;
-
- draw->gs.tgsi.machine->Primitives = align_malloc(
- MAX_PRIMITIVES * sizeof(struct tgsi_exec_vector), 16);
- if (!draw->gs.tgsi.machine->Primitives)
- return FALSE;
- memset(draw->gs.tgsi.machine->Primitives, 0,
- MAX_PRIMITIVES * sizeof(struct tgsi_exec_vector));
+ if (!draw_get_option_use_llvm()) {
+ draw->gs.tgsi.machine = tgsi_exec_machine_create();
+ if (!draw->gs.tgsi.machine)
+ return FALSE;
+
+ draw->gs.tgsi.machine->Primitives = align_malloc(
+ MAX_PRIMITIVES * sizeof(struct tgsi_exec_vector), 16);
+ if (!draw->gs.tgsi.machine->Primitives)
+ return FALSE;
+ memset(draw->gs.tgsi.machine->Primitives, 0,
+ MAX_PRIMITIVES * sizeof(struct tgsi_exec_vector));
+ }
return TRUE;
}
diff --git a/src/gallium/auxiliary/draw/draw_vs.c b/src/gallium/auxiliary/draw/draw_vs.c
index 55cbeb9203d..eb7f4e0967c 100644
--- a/src/gallium/auxiliary/draw/draw_vs.c
+++ b/src/gallium/auxiliary/draw/draw_vs.c
@@ -149,9 +149,11 @@ draw_vs_init( struct draw_context *draw )
{
draw->dump_vs = debug_get_option_gallium_dump_vs();
- draw->vs.tgsi.machine = tgsi_exec_machine_create();
- if (!draw->vs.tgsi.machine)
- return FALSE;
+ if (!draw_get_option_use_llvm()) {
+ draw->vs.tgsi.machine = tgsi_exec_machine_create();
+ if (!draw->vs.tgsi.machine)
+ return FALSE;
+ }
draw->vs.emit_cache = translate_cache_create();
if (!draw->vs.emit_cache)
@@ -173,7 +175,8 @@ draw_vs_destroy( struct draw_context *draw )
if (draw->vs.emit_cache)
translate_cache_destroy(draw->vs.emit_cache);
- tgsi_exec_machine_destroy(draw->vs.tgsi.machine);
+ if (!draw_get_option_use_llvm())
+ tgsi_exec_machine_destroy(draw->vs.tgsi.machine);
}
diff --git a/src/gallium/auxiliary/draw/draw_vs_exec.c b/src/gallium/auxiliary/draw/draw_vs_exec.c
index 133b116a49c..6a18d8c46bd 100644
--- a/src/gallium/auxiliary/draw/draw_vs_exec.c
+++ b/src/gallium/auxiliary/draw/draw_vs_exec.c
@@ -63,6 +63,7 @@ vs_exec_prepare( struct draw_vertex_shader *shader,
{
struct exec_vertex_shader *evs = exec_vertex_shader(shader);
+ debug_assert(!draw_get_option_use_llvm());
/* Specify the vertex program to interpret/execute.
* Avoid rebinding when possible.
*/
@@ -96,6 +97,7 @@ vs_exec_run_linear( struct draw_vertex_shader *shader,
unsigned slot;
boolean clamp_vertex_color = shader->draw->rasterizer->clamp_vertex_color;
+ debug_assert(!draw_get_option_use_llvm());
tgsi_exec_set_constant_buffers(machine, PIPE_MAX_CONSTANT_BUFFERS,
constants, const_size);