summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
diff options
context:
space:
mode:
authorZack Rusin <zackr@vmware.com>2010-04-07 17:46:55 -0400
committerZack Rusin <zackr@vmware.com>2010-04-07 17:50:11 -0400
commit821abff8c03031603111abc17dabe7cfa28a31e1 (patch)
tree8def3a5f85f92382d72ad07ac9416e9d0b760e59 /src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
parent40bac07f9b5182890719151c99e9d9035e7984e7 (diff)
draw llvm: highly reduce the compilation times for draw llvm
our code resets pipe_vertex_buffer's with different offsets when rendering vbo, meaning that we kept creating insane number of shaders even for simple apps e.g. geartrain had 54 shaders and it was taking almost 27 seconds just to compile them. this patch passes pipe_vertex_buffer's to the jit function and lets it to the stride/buffer_offset computation at run time. the slowdown at runtime is largely unnoticable but the we go from 54 shaders to 3, and from 27 seconds to less than 1.
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c')
-rw-r--r--src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
index aa34a3ea5f..42dcc0886f 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
@@ -53,6 +53,7 @@ struct llvm_middle_end {
struct draw_llvm *llvm;
struct draw_llvm_variant *variants;
struct draw_llvm_variant *current_variant;
+ int nr_variants;
};
@@ -145,6 +146,7 @@ llvm_middle_end_prepare( struct draw_pt_middle_end *middle,
variant = draw_llvm_prepare(fpme->llvm, nr);
variant->next = fpme->variants;
fpme->variants = variant;
+ ++fpme->nr_variants;
}
fpme->current_variant = variant;
@@ -271,7 +273,8 @@ static void llvm_middle_end_linear_run( struct draw_pt_middle_end *middle,
(const char **)draw->pt.user.vbuffer,
start,
count,
- fpme->vertex_size );
+ fpme->vertex_size,
+ draw->pt.vertex_buffer );
if (draw_pt_post_vs_run( fpme->post_vs,
pipeline_verts,
@@ -451,6 +454,7 @@ struct draw_pt_middle_end *draw_pt_fetch_pipeline_or_emit_llvm( struct draw_cont
fpme->variants = NULL;
fpme->current_variant = NULL;
+ fpme->nr_variants = 0;
return &fpme->base;