draw: unify linear and elts draw jit functions
authorRoland Scheidegger <sroland@vmware.com>
Sun, 13 Nov 2016 15:32:24 +0000 (16:32 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Mon, 21 Nov 2016 19:02:53 +0000 (20:02 +0100)
commit4e1be31f01e279c35de09333fc3e3a1e72fad599
tree71330a8a7a78c1aeda490c1f532fc0b079395dd5
parent8cf7edff7dda8c11a0843a168ad2756f0bd584be
draw: unify linear and elts draw jit functions

The code for elts and linear paths was nearly 100% identical by now - with
the elts path simply having some additional gather for the elements in the
main loop (with some additional small differences before the main loop).

Hence nuke the separate functions and decide this at jit shader execution
time (simply based on the presence of the elts pointer).

Some analysis shows that the generated vs jit functions seem to be just very
minimally more complex than the former elts functions, and almost none of the
additional complexity is in the main loop (basically just the branch logic
for the branch fetching the actual indices).
Compared to linear, the codesize of the function is of course a bit larger,
however the actual executed code in the main loop appears to be near 100%
identical (the additional code looking up indices is skipped as expected).

So, I would not expect a (meaningful) performance difference with the
generated code, neither with elts nor linear, this does however roughly
half the compilation time (the compiled shaders should also use only half
the memory of course).

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/draw/draw_llvm.c
src/gallium/auxiliary/draw/draw_llvm.h
src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c