summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/draw
Commit message (Collapse)AuthorAgeFilesLines
* draw: Implement support for primitive idZack Rusin2013-04-034-8/+24
| | | | | | | We were largely ignoring primitive id. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw/so: Fix bogus assertZack Rusin2013-04-031-1/+0
| | | | | | | We do support so with multiple primitives. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw/gs: Fix memory corruption with multiple primitivesZack Rusin2013-04-031-10/+15
| | | | | | | | | | We were flushing with incorrect number of primitives. TGSI exec can only work with a single primitive at a time. Plus the fetching with multiple primitives on llvm paths wasn't copying the last element. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* gallivm: cleanup the gs interfaceZack Rusin2013-04-031-21/+58
| | | | | | | | Instead of void pointers use a base interface. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw: use pipe_transfer_unmap() to match pipe_transfer_map()Brian Paul2013-04-021-1/+1
|
* draw: fix some build breakage when LLVM is not usedBrian Paul2013-03-282-1/+8
| | | | | Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=62883 Tested-by: Vinson Lee <[email protected]>
* llvmpipe/draw: Fix texture sampling in geometry shadersZack Rusin2013-03-273-62/+84
| | | | | | | | | We weren't correctly propagating the samplers and sampler views when they were related to geometry shaders. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw/llvm: Cleanup the store debugging codeZack Rusin2013-03-271-8/+5
| | | | | | Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw: Allocate the output buffer for output primitivesZack Rusin2013-03-271-2/+1
| | | | | | | | | | We were allocating the output buffer but using the input primitives. We need to allocate that buffer using the maximum number of output, not input, primitives. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* gallium/llvm: implement geometry shaders in the llvm pathsZack Rusin2013-03-277-64/+1096
| | | | | | | | | This commits implements code generation of the geometry shaders in the SOA paths. All the code is there but bugs are likely present. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw/gs: Fetch more than one primitive per invocationZack Rusin2013-03-272-13/+48
| | | | | | | | | | Allows executing gs on up to 4 primitives at a time. Will also be required by the llvm code because there we definitely don't want to flush with just a single primitive. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw/gs: Abstract the portions of GS that are tgsi specificZack Rusin2013-03-272-128/+156
| | | | | | | | | To be able to add llvm paths later on we need to have some common interface for them. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw/llvm: Remove unused gs_constants from jit_contextZack Rusin2013-03-273-25/+11
| | | | | | | | | The member was never used and we'll need to handle it differently because gs will also need samplers/textures setup. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* gallium: add TGSI_SEMANTIC_TEXCOORD,PCOORD v3Christoph Bumiller2013-03-201-18/+28
| | | | | | | | | | | | | | | This makes it possible to identify gl_TexCoord and gl_PointCoord for drivers where sprite coordinate replacement is restricted. The new PIPE_CAP_TGSI_TEXCOORD decides whether these varyings should be hidden behind the GENERIC semantic or not. With this patch only nvc0 and nv30 will request that they be used. v2: introduce a CAP so other drivers don't have to bother with the new semantic v3: adapt to introduction gl_varying_slot enum
* draw: init pre_clip_pos = NULL to fix optimized build warningBrian Paul2013-03-141-1/+1
|
* draw/so: Fix stream output with geometry shadersZack Rusin2013-03-122-8/+31
| | | | | | | | | If geometry shader is present its stream output info should be used instead of the vs and we shouldn't use the pre-clipped corrdinates. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw/gs: Correctly iterate the emitted primitivesZack Rusin2013-03-071-4/+4
| | | | | | | | | | We were assuming that each emitted primitive had the same number of vertices. That is incorrect. Emitted primitives can have arbirtrary number of vertices. Simply increment index on iteration to fix it. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw/llvm: another quick hack for drawing with no position outputRoland Scheidegger2013-03-111-1/+1
| | | | | | Also need to skip things if we have no cv value but pos value (happens with geometry shaders enabled). Needs a round of cleanup, though.
* draw: add const qualifier to silence compiler warningBrian Paul2013-03-071-1/+1
|
* draw/llvm: fix inputs to the geometry shaderZack Rusin2013-03-051-4/+9
| | | | | | | | | | We can't clip and viewport transform the vertices before we let the geometry shader process them. Lets make sure the generated vertex shader has both disabled if geometry shader is present. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw: use geometry shader info in clip_init_state if appropriateBryan Cain2013-03-051-6/+9
| | | | | | Reviewed-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw: account for separate shader objects in geometry shader codeBryan Cain2013-03-054-4/+32
| | | | | | | | | | | | | | | | The geometry shader code seems to have been originally written with the assumptions that there are the same number of VS outputs as GS outputs and that VS outputs are in the same order as their corresponding GS inputs. Since TGSI uses separate shader objects, these are both wrong assumptions. This was causing several valid vertex/geometry shader combinations to either render incorrectly or trigger an assertion. Conflicts: src/gallium/auxiliary/draw/draw_gs.c Reviewed-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
* draw: additional fix for the no-position case with llvmRoland Scheidegger2013-03-021-20/+20
| | | | | | | | Similar fix to what is done for the non-llvm case, we could otherwise still hit the stages (near certainly with gs) which crash. It is probably a much better idea to skip trying to draw at that point anyway. Reviewed-by: Brian Paul <[email protected]>
* draw: fix no position output in non-llvm pipeline.Roland Scheidegger2013-03-021-19/+19
| | | | | | | | | | It seems easiest (and best) if we simply skip all the later stages (after stream output). (This is different to the llvm case at least for now where we will simply try to render garbage, though both behaviors should be correct.) Fixes piglit glsl-1.40-tf-no-position with softpipe. Reviewed-by: Brian Paul <[email protected]>
* draw/llvm: skip clipping and viewport transform if there's no position outputRoland Scheidegger2013-03-021-26/+31
| | | | | | | | | | | | | With glsl 1.40 writing position is not required (useful for transform feedback, though in fact it's still possible to rasterize such geometry even if the results aren't too well defined). Prevents crashes in that case. Fixes piglit glsl-1.40-tf-no-position. Not quite sure this is 100% correct as it also skips clipdistance clipping which could still work (but not sure if the result would really be needed?) Reviewed-by: Jose Fonseca <[email protected] Reviewed-by: Brian Paul <[email protected]>
* softpipe/draw/tgsi: simplify driver/tgsi sampler interfaceRoland Scheidegger2013-02-285-20/+12
| | | | | | | | | | | | | | | Use a single sampler adapter instead of per-sampler-unit samplers, and just pass along texture unit and sampler unit in the calls. The reason is that for dx10-style sample opcodes pre-wired samplers including all the texture state aren't really feasible (and for sample_i/sviewinfo we don't even have samplers). Of course right now softpipe doesn't actually do anything more than just look up all its pre-wired per-texunit/per-samplerunit sampler as it did before so this doesn't really achieve much except one more function call, however this is now all softpipe's fault (fixing that in a way which doesn't suck is still an unsolved problem). Reviewed-by: Jose Fonseca <[email protected]>
* draw: make sure pipeline is revalidated when sampler views or samplers change.Roland Scheidegger2013-02-251-0/+4
| | | | | | | | | | | Since with llvm execution parts of sampler view and sampler state is baked into the shader, we need to revalidate otherwise the wrong shader might get used. (Not completely sure but I think this would not be required for non-llvm case, along with everything else in these functions.) This caused bugs in piglit arb_texture_buffer_object-formats, because we never noticed that the view format changed. Reviewed-by: Jose Fonseca <[email protected]>
* llvmpipe: support GL_ARB_texture_buffer_object/GL_ARB_texture_buffer_rangeRoland Scheidegger2013-02-254-7/+7
| | | | | | | | | | | | | | | | | | | | This also fixes not honoring first/last_layer view parameters for array textures, plus not honoring last_level view parameter for all textures (neither is really used by OpenGL). This mostly passes piglit arb_texture_buffer_object tests (it needs, however, glsl 140 version override, plus GL 3.1 override, the latter only because mesa does not allow ARB_tbo in non-core contexts). Most arb_texture_buffer_object tests pass, with the exception of arb_texture_buffer_object-formats. With "arb" parameter it passes most weirdo formats before it segfaults in the state tracker, this looks to be some issue with using legacy formats in core context (fails the same in softpipe). With "core" parameter it passes with "fs", however fails with "vs" (for most formats). This will be fixed later (debugging shows we're completely missing the shader recompile depending on format). v2: based on Jose's feedback, fix comments, variable/function names. Reviewed-by: Jose Fonseca <[email protected]>
* draw: fix broken polygon offset stageBrian Paul2013-02-221-3/+37
| | | | | | | | | | | | There were several issues. We weren't handling different front/back polygon fill modes. We weren't checking whether the offset applied to fill mode vs. line mode vs. point mode. Fixes problems found with the Visualization Toolkit (VTK) test suite. Note: This is a candidate for the stable branches. Reviewed-by: Jose Fonseca <[email protected]>
* draw: make sure key size is calculated consistently.Roland Scheidegger2013-02-221-5/+9
| | | | | | | | | | | | | | | | | | | Some parts calculated key size by using shader information, others by using the pipe_vertex_element information. Since it is perfectly valid to have more vertex_elements set than the vertex shader is using those may not be the same, so we weren't copying over all vertex_element state - this caused the tgsi dump to assert (iterates over all vertex elements). More importantly in this situation it would also break vertex texturing completely (since the sampler state derived from the key is at a different position than expected). Fix thix by deriving key->nr_vertex_elements from the shader information instead of the pipe_vertex_element state (unlike dx10, we can't have "holes" in pipe_vertex_element state, so this should be safe). (Note that actual llvm shader generation does not use the pipe_vertex_element state from the key itself in any case (althogh I guess it could) but uses the one from draw.pt (which should be the same though contains all elements) instead.) Reviewed-by: Jose Fonseca <[email protected]>
* draw: fix non-perspective interpolation in interp()Brian Paul2013-02-191-3/+8
| | | | | | | | | | | This fixes a regression from ab74fee5e1a3fc3323b7238278637b232c2d0d95. When we use the clip coordinate to compute the screen-space interpolation factor, we need to first apply the divide-by-W step to the clip coordinate. Fixes http://bugs.freedesktop.org/show_bug.cgi?id=60938 Note: This is a candidate for the 9.1 branch.
* llvmpipe: fix vertex_header mask store in big-endianAdhemerval Zanella2013-02-111-0/+48
| | | | | | | This patch fixes the vertex_header mask bitfield store in big-endian architectures by bit-swap the fields accordingly. Reviewed-by: Adam Jackson <[email protected]>
* gallivm: fix up size queries for dx10 sviewinfo opcodeRoland Scheidegger2013-02-081-0/+2
| | | | | | | | | | | | | | | Need to calculate the number of mip levels (if it would be worthwile could store it in dynamic state). While here, the query code also used chan 2 for the lod value. This worked with mesa state tracker but it seems safer to use chan 0. Still passes piglit textureSize (with some handwaving), though the non-GL parts are (largely) untested. v2: clarify and expect the sviewinfo opcode to return ints, not floats, just like the OpenGL textureSize (dx10 supports dst modifiers with resinfo). Also simplify some code. Reviewed-by: Jose Fonseca <[email protected]>
* draw: fix draw_llvm_variant_key struct padding to avoid recompilesRoland Scheidegger2013-01-293-4/+11
| | | | | | | | | | | | | | The struct padding got broken by c789b981b244333cfc903bcd1e2fefc010500013. This caused serious performance regression because part of the key was uninitialized and hence the shader always recompiled (at least on release builds...). While here also fix key size calculation when the number of samplers and the number of sampler views are different. v2: add comment Reviewed-by: Jose Fonseca <[email protected]> Reviewed-by: Brian Paul <[email protected]>
* gallivm,draw,llvmpipe: mass rename of unit->texture_unit/sampler_unitRoland Scheidegger2013-01-281-16/+16
| | | | | | | | | | | Make it obvious what "unit" this is (no change in functionality). draw still uses "unit" in places where it changes the shader by adding texture sampling itself - it seems like this can't work with shaders using dx10-style sample opcodes (can't mix gl-style and dx10-style sample instructions in a shader). Reviewed-by: Brian Paul <[email protected]> Reviewed-by: Jose Fonseca <[email protected]>
* gallivm: split sampler and texture stateRoland Scheidegger2013-01-285-74/+219
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Split the sampler interface to use separate sampler and texture (sampler_view) state. This is needed to support dx10-style sampling instructions. This is not quite complete since both draw/llvmpipe don't really track textures/samplers independently yet, as well as the gallivm code not quite using the right sampler or texture index respectively (but it should work for the sampling codes used by opengl). We are however losing some optimizations in the process, apply_max_lod will no longer work, and we potentially could end up with more (unnecessary) recompiles (if switching textures with/without mipmaps only so it shouldn't be too bad). v2: don't use different callback structs for sampler/sampler view functions (which just complicates things), fix up sampling code to actually use the right texture or sampler index, and similar for llvmpipe/draw actually distinguish between samplers and sampler views. v3: fix more of PIPE_MAX_SAMPLER / PIPE_MAX_SHADER_SAMPLER_VIEWS mismatches (both in draw and llvmpipe), based on feedback from José get rid of unneeded static sampler derived state.(which also fixes the only 2 piglit regressions due to a forgotten assignment), fix comments based on Brian's feedback. v4: remove some accidental unrelated whitespace changes Reviewed-by: José Fonseca <[email protected]> Reviewed-by: Brian Paul <[email protected]>
* draw: fix MSVC divide-by-zero compilation errorBrian Paul2013-01-221-1/+2
| | | | Kind of lame, but it works.
* draw: fix problem in screen-space interpolation clip codeBrian Paul2013-01-221-3/+3
| | | | | | | | | | | | | | | | | | I don't see how this could have ever worked right. The screen-space interpolation code uses the vertex->data[pos_attr] position which contain window coords. But window coords are only computed for the unclipped vertices; the clipped vertices have undefined window coords (see draw_cliptest_tmp.h). Use the vertex clip coords instead which are always defined. Fixes http://bugs.freedesktop.org/show_bug.cgi?id=55476 (piglit fbo-blit-stretch failure on softpipe) Note: This is a candidate for the 9.0 branch. Reviewed-by: José Fonseca <[email protected]>
* draw: improve the clipper debug/printf codeBrian Paul2013-01-221-1/+20
| | | | Reviewed-by: José Fonseca <[email protected]>
* draw: add new debug code and comments in clip code templateBrian Paul2013-01-221-0/+15
| | | | | | | | In debug builds, set clipped vertex window coordinates to NaN values to help debugging. Otherwise, we're just leaving the coordinate in clip space and it's invalid to use it later expecting it to be a window coord. Reviewed-by: José Fonseca <[email protected]>
* gallium: Remove ppc asm backendAdam Jackson2013-01-202-245/+0
| | | | | | | | | | | | | | | | | | | | | The vs part hasn't been wired up since tgsi_sse2 was disabled in: commit 4eb3225b38ce12cb34ab3d90804c9683bd7b4ed3 Author: José Fonseca <[email protected]> Date: Tue Nov 8 00:10:47 2011 +0000 Remove tgsi_sse2. And it would certainly not work correctly in its current state: draw/draw_vs_ppc.c: In function ‘draw_create_vs_ppc’: draw/draw_vs_ppc.c:190:24: warning: assignment from incompatible pointer type [enabled by default] As with the sse2 backend, this should be done in llvm anyway. Reviewed-by: Brian Paul <[email protected]> Signed-off-by: Adam Jackson <[email protected]>
* draw/llvmpipe: fix transform feedback position + enable other extensionsDave Airlie2012-12-145-7/+26
| | | | | | | | | | | | | | | | This builds on the previous draw/softpipe patch. So llvmpipe does streamout calls after clip/viewport stages, but we have the pre-clip position stored for later use, so when we are doing transform feedback, and its the position vertex grab the vertex from the stored pre clip position. The perfect fix is too probably add a codegen transform feedback stage in between shader and clip stages, but this is good enough for now. Reviewed-by: Roland Scheidegger <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
* draw: add support for later transform feedback extensionsDave Airlie2012-12-142-5/+16
| | | | | | | | | | | | | | | | | This adds support to draw for the new features of transform feedback. a) fix count_from_stream_output, using max_index+1 for now but it looks like it should be valid as its derived from the vertex elements/vbo. b) fix striding and dst offsets in output buffers - was just wrong before. c) fix crash if tfb is suspended (so.num_targets == 0) This also enables the new features on softpipe. It should be possible to enable them on llvmpipe as well after this commit, but would need to schedule piglit runs. Signed-off-by: Dave Airlie <[email protected]>
* draw: fix/improve dirty state validationBrian Paul2012-12-088-23/+68
| | | | | | | | | | | | | | | | | | | | This patch does two things: 1. Constant buffer state changes were broken (but happened to work by dumb luck). The problem is we weren't calling draw_do_flush() in draw_set_mapped_constant_buffer() when we changed that state. All the other draw_set_foo() functions were calling draw_do_flush() already. 2. Use a simpler state validation step when we're changing light-weight parameter state such as constant buffers, viewport dims or clip planes. There's no need to revalidate the whole pipeline when changing state like that. The new validation method is called bind_parameters() and is called instead of the prepare() method. A new DRAW_FLUSH_PARAMETER_CHANGE flag is used to signal these light-weight state changes. This results in a modest but measurable increase in FPS for many Mesa demos. Reviewed-by: Jose Fonseca <[email protected]>
* draw: add reminder comments about similar code in different filesBrian Paul2012-12-082-0/+11
| | | | | | | | When one function is changed, also look at the other. Presently, there are some differences with respect to geometry shaders and instanced drawing... Reviewed-by: Jose Fonseca <[email protected]>
* draw: rearrange code in llvm_middle_end_prepare()Brian Paul2012-12-081-66/+74
| | | | | | | To clean it up and make it look more like the non-LLVM fetch_pipeline_prepare() function. Reviewed-by: Jose Fonseca <[email protected]>
* draw: fix comment typoBrian Paul2012-12-081-1/+1
| | | | Reviewed-by: Jose Fonseca <[email protected]>
* draw: add comment on draw->pt.opt fieldBrian Paul2012-12-081-1/+1
| | | | Reviewed-by: Jose Fonseca <[email protected]>
* draw: update a comment about index buffersBrian Paul2012-12-081-3/+2
| | | | Reviewed-by: Jose Fonseca <[email protected]>
* draw: Dump LLVM shader key.José Fonseca2012-12-072-1/+33
| | | | | | Just like we do in llvmpipe for the fragment shader compilation key. Reviewed-by: Brian Paul <[email protected]>