diff options
author | Zack Rusin <zackr@vmware.com> | 2010-04-07 17:46:55 -0400 |
---|---|---|
committer | Zack Rusin <zackr@vmware.com> | 2010-04-07 17:50:11 -0400 |
commit | 821abff8c03031603111abc17dabe7cfa28a31e1 (patch) | |
tree | 8def3a5f85f92382d72ad07ac9416e9d0b760e59 /src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c | |
parent | 40bac07f9b5182890719151c99e9d9035e7984e7 (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.c | 6 |
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; |