summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/draw/draw_llvm.c
AgeCommit message (Collapse)Author
2010-08-16draw_llvm: fix segfaults on non-SSE2 CPUs where it is disabled (v2)Luca Barbieri
Changes in v2: - Change function name Currently draw_llvm refuses to create itself on non-SSE2 CPUs due to an alleged LLVM bug. However, this is implemented improperly, because other parts of draw still attempt to access draw->llvm, resulting in segfaults. Instead, put the check in debug_get_option_draw_use_llvm, check that before calling draw_llvm_create, and then check whether draw->llvm is non-null everywhere else.
2010-08-08draw: Remove unused variable.José Fonseca
2010-08-08draw: Use the correct type for integersnobled
Two integers were being operated on as a vector of floats in draw_llvm_generate(). This bug got uncovered by fixing this bug: http://bugs.freedesktop.org/29407
2010-07-30llvmpipe: Fix implicit declaration of lp_func_delete_body warnings.Vinson Lee
2010-07-30llvmpipe: delete function bodies after generating machine codeZack Rusin
2010-07-29draw: Also emit EMMS on generated LLVM IR.José Fonseca
2010-07-22draw: re-order optimization passes depending on LLVM version, 32/64-bitBrian Paul
This is a work-around for an apparent bug in LLVM seen with piglit's glsl-vs-sqrt-zero test.
2010-07-19draw: fix incorrect instancing divisor in LLVM codeBrian Paul
2010-07-16draw/llvm: adjust the instance id at run timeZack Rusin
fixes instancing in draw llvm
2010-07-16draw: use the instance id when fetching vertex dataZack Rusin
2010-07-08draw: Fix off-by-one error in assert.Vinson Lee
textures is an array of size PIPE_MAX_VERTEX_SAMPLERS.
2010-07-06draw: make sure softpipe doesn't crash with vertex tex samplingZack Rusin
softpipe doesn't implement the draw's llvm tex sampling interface so make sure draw can handle the cases where the driver doesn't implement the interface
2010-07-06draw: implement vertex texture sampling using llvmZack Rusin
2010-06-25draw: limit the number of vertex shader variants kept aroundZack Rusin
we used to create and cache unltimited number of variant, this change limits the number of variants kept around to a fixed number. the change is based on a similar patch by Roland for llvmpipe fragment shaders.
2010-06-16draw: add alloc checkAlan Hourihane
2010-05-30draw: Use pointer_to_func() instead of custom wrappers.José Fonseca
2010-05-15draw: Use GALLIVM_DEBUG opt.José Fonseca
2010-05-13draw: silence casting warningsBrian Paul
2010-05-08gallivm: Add an alternative to LLVMDumpValue that works with Windows GUI apps.José Fonseca
2010-05-06gallivm: Require SSE2 for draw_llvm/llvmpipe due to LLVM PR6960.Török Edwin
Note that this also requires X86 for llvm, if llvmpipe/draw_llvm works on PPC then the condition should be extended to include && x86. Signed-off-by: Török Edwin <edwintorok@gmail.com> Signed-off-by: José Fonseca <jfonseca@vmware.com>
2010-05-03Reorder LLVM passes, running mem2reg earlier.Török Edwin
This gives a ~30% shader optimization time improvement on blender. Tested by comparing the dumped LLVM modules. Current ordering: time ~/llvm-git/obj/Release-Asserts/bin/opt l.bc -constprop -instcombine -mem2reg -gvn -simplifycfg real 0m1.126s user 0m1.108s sys 0m0.012s With this patch: time ~/llvm-git/obj/Release-Asserts/bin/opt l.bc -mem2reg -constprop -instcombine -gvn -simplifycfg real 0m0.885s user 0m0.880s sys 0m0.000s The overall improvement in blender is ~15%. Blender without the patch takes 1m13s: edwin 5934 87.6 11.5 729440 458296 pts/5 SLl+ 17:35 1:13 blender Blender with the patch takes 1m3s: edwin 5726 94.2 11.2 716424 446168 pts/5 SLl+ 17:32 1:03 blender It is still slow with the patch, but better (most of the optimization time is taken up by GVN, see LLVM PR7023). Signed-off-by: Török Edwin <edwintorok@gmail.com> Signed-off-by: José Fonseca <jfonseca@vmware.com>
2010-04-30draw: Fix memory leaks in llvm code.José Fonseca
2010-04-29draw llvm: stay in bounds even if fetch_count % 4 != 0Zack Rusin
if fetch_count % 4 != 0 then on the last iteration we fetch garbage. this patch makes sure we stay within bounds
2010-04-26draw/llvm: implement fetch elts pathsZack Rusin
we were only running the llvm paths when the input elts were linear, now we can handle abritrary fetch elts arrays. we do this by generating two paths - linear and fetch_elts one and just selecting the right one at run time.
2010-04-25draw: Respect pipe_vertex_buffer::max_index in llvm generated code.José Fonseca
Everybody should respect max_index, specially llvm generated code, which likes to eat vertices 4 at a time, so it may end up chew a bit a bit more than actually exists.
2010-04-23draw: use FREE() instead of free()Stephen Johnson
2010-04-22gallivm: implement indirect addressing over temporariesZack Rusin
a bit more involved than indirect addressing over consts, but still fairly reasonable. we allocate an array instead of individual alloca's, and we do it only if the shader does indirect addressing.
2010-04-19draw llvm: Remove unnecessary header.Vinson Lee
2010-04-19draw llvm: fix constructor messZack Rusin
use just one constructor to figure out whether to use llvm.
2010-04-16gallium/draw: fix breakage from moving lp_bld_* filesBrian Paul
2010-04-13draw llvm: Initialize variable.Vinson Lee
2010-04-08draw: Fix vertex buffer indexation.José Fonseca
2010-04-08draw llvm: Remove unnecessary header.Vinson Lee
2010-04-07draw llvm: highly reduce the compilation times for draw llvmZack Rusin
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.
2010-04-07draw: Fix MSVC build (snprintf->util_snprintf).José Fonseca
2010-04-07llvmpipe: Fix USE_DRAW_LLVM build. Use lp_build_engine.José Fonseca
2010-04-06draw llvm: disable printing of the LLVM irZack Rusin
2010-04-06draw llvm: implement simple pipeline caching using variantsZack Rusin
2010-04-06draw llvm: fix iteration for larger vertex arraysZack Rusin
we were trying to store the outputs starting at the same offset we were using for the input arrays, which was writing beyond the end of the output array.
2010-04-06draw llvm: iterate with the correct stop over the outputsZack Rusin
it's whatever the var step is (4 usually) not an unconditional 1
2010-04-06draw llvm: fix draw arraysZack Rusin
we don't index within the outputs but only within the inputs
2010-04-06draw llvm: fix loop iteration and vertex header offsetsZack Rusin
the loop was doing a NE comparison which we could have skipped if the prim was triangles (3 verts) and our step was 4 verts. also fix offsets in conversion to aos.
2010-04-05draw llvm: when generating the vertex_header struct adjust its nameZack Rusin
change the name to not clash and accuretly represent the number of inputs we store in the data member
2010-04-02draw llvm: fix storing of outputs for the rest of the pipelineZack Rusin
there's no good way of aligning the output's, and since the vertex_header is variable sized in the first place we need to extract elements from a vector and store them individually into an array. this gets the basic examples working again
2010-04-01draw llvm: a lot better storing implementationZack Rusin
2010-03-31draw llvm: fix iteration over buffersZack Rusin
fetching was converting garbage
2010-03-30draw llvm: fix a warningZack Rusin
2010-03-30draw llvm: actually set the constant buffers on the contextZack Rusin
2010-03-30draw llvm: fix some silly mistakesZack Rusin
the vs_type selection isn't ideal, but for now both llvmpipe's fs and vs do the same thing which is operate on 4xfloat vector as the base type
2010-03-30draw llvm: various fixes for the translation codeZack Rusin
the from translation isn't quite right yet