summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/r300
AgeCommit message (Collapse)Author
2011-01-10r300g: add debug option for buffer upload loggingMarek Olšák
2011-01-09r300g: do not upload the same user buffer several timesMarek Olšák
Performance++.
2011-01-09r300g: fix crash when flushing ZMASKMarek Olšák
https://bugs.freedesktop.org/show_bug.cgi?id=32912 The fix is to call update_derived_state before user buffer uploads. I've also moved some code around. Unfortunately, there are still some ZMASK-related bugs which cause misrendering, i.e. flushing doesn't always work and glean/fbo fails.
2011-01-08r300g: fix a surface leak when flushing ZMASKMarek Olšák
2011-01-08r300g: rework command submission and resource space checkingMarek Olšák
The motivation behind this rework is to get some speed by reducing CPU overhead. The performance increase depends on many factors, but it's measurable (I think it's about 10% increase in Torcs). This commit replaces libdrm's radeon_cs_gem with our own implemention. It's optimized specifically for r300g, but r600g could use it as well. Reloc writes and space checking are faster and simpler than their counterparts in libdrm (the time complexity of all the functions is O(1) in nearly all scenarios, thanks to hashing). (libdrm's radeon_bo_gem is still being used in the driver.) It works like this: cs_add_reloc(cs, buf, read_domain, write_domain) adds a new relocation and also adds the size of 'buf' to the used_gart and used_vram winsys variables based on the domains, which are simply or'd for the accounting purposes. The adding is skipped if the reloc is already present in the list, but it accounts any newly-referenced domains. cs_validate is then called, which just checks: used_vram/gart < vram/gart_size * 0.8 The 0.8 number allows for some memory fragmentation. If the validation fails, the pipe driver flushes CS and tries do the validation again, i.e. it validates only that one operation. If it fails again, it drops the operation on the floor and prints some nasty message to stderr. cs_write_reloc(cs, buf) just writes a reloc that has been added using cs_add_reloc. The read_domain and write_domain parameters have been removed, because we already specify them in cs_add_reloc. The space checking has been tested by putting small values in vram/gart_size variables.
2011-01-08r300g: Remove invalid assertion.Łukasz Krotowski
Invalid after be1af4394e060677b7db6bbb8e3301e38a3363da (user buffer creation with width0 == ~0). Signed-off-by: Marek Olšák <maraeo@gmail.com>
2011-01-07r300g: derive user buffer sizes at draw timeMarek Olšák
This only uploads the [min_index, max_index] range instead of [0, userbuf size], which greatly speeds up user buffer uploads. This is also a prerequisite for atomizing vertex arrays in st/mesa.
2011-01-06r300g: fix corruption when nr_cbufs==0 and multiwrites enabledMarek Olšák
https://bugs.freedesktop.org/show_bug.cgi?id=32634
2011-01-06r300g: remove the buffer range checkingMarek Olšák
It's no longer needed because the upload buffer remains mapped while the CS is being filled (openarena, ut2004 and others that this code was for do not use VBOs by default).
2011-01-06r300g: skip buffer validation of upload buffers when appropriateMarek Olšák
because the upload buffers are reused for subsequent draw operations.
2011-01-06u_upload_mgr: new featuresMarek Olšák
- Added a parameter to specify a minimum offset that should be returned. r300g needs this to better implement user buffer uploads. This weird requirement comes from the fact that the Radeon DRM doesn't support negative offsets. - Added a parameter to notify a driver that the upload flush occured. A driver may skip buffer validation if there was no flush, resulting in a better performance. - Added a new upload function that returns a pointer to the upload buffer directly, so that the buffer can be filled e.g. by the translate module.
2010-12-29r300g: support user buffers as constant buffersMarek Olšák
2010-12-28r300g: rename aos to vertex arraysMarek Olšák
2010-12-28r300g: mark vertex arrays as dirty after a buffer_offset changeMarek Olšák
We shouldn't hit this bug in theory. NOTE: This is a candidate for the 7.10 branch.
2010-12-25r300g: simplify buffer_transfer_inline_writeMarek Olšák
2010-12-25r300g: simplify the code for buffer uploadsMarek Olšák
2010-12-25r300g: user index buffers are always alignedMarek Olšák
2010-12-25r300g: increase the size of upload buffersMarek Olšák
2010-12-24r300g/swtcl: re-enable LLVMMarek Olšák
Based on a patch from Drill <drill87@gmail.com>. NOTE: This is a candidate for the 7.10 branch.
2010-12-24r300g: turn back on rv530 hiz.Dave Airlie
still needs RADEON_HYPERZ=y env var. Signed-off-by: Dave Airlie <airlied@redhat.com>
2010-12-24r300g: hyperz fixing typo.Dave Airlie
Really no idea why I didn't see this before, but these values were opposite the register spec. this seems to fix rv530 HiZ on my laptop, will reenable in next commit. Signed-off-by: Dave Airlie <airlied@redhat.com>
2010-12-24r300g: add support for color0 writes to all bound color buffers.Dave Airlie
Thanks to Marek Olšák for making my initial attempt actually work. Signed-off-by: Dave Airlie <airlied@redhat.com>
2010-12-23r300g: use a simpler fallback for misaligned ushort indices with trianglesMarek Olšák
If 'start' is odd, render the first triangle with indices embedded in the command stream, which adds 3 to 'start' and makes it even. Then continue with the fast path.
2010-12-23r300g: add support for B2G3R3 texturingMarek Olšák
2010-12-22r300g: Remove unnecessary headers.Vinson Lee
2010-12-22r300g: fix precision issues with B10G10R10A2Marek Olšák
2010-12-22r300g: support B10G10R10A2 render targets only with DRM 2.8.0 or later versionsMarek Olšák
2010-12-20gallium: remove unused 'buf' parameter in pipe_buffer_unmapMarek Olšák
2010-12-19r300g: optimize the fallback for misaligned ushort indicesMarek Olšák
2010-12-17r300g: finally fix the texture corruption on r3xx-r4xxMarek Olšák
Even though a bound texture stays bound when calling set_fragment_sampler_views, it must be assigned a new cache region depending on the occupancy of other texture units. This fixes: https://bugs.freedesktop.org/show_bug.cgi?id=28800 Thanks to Álmos <aaalmosss@gmail.com> for finding the bug in the code. NOTE: This is a candidate for both the 7.9 and 7.10 branches.
2010-12-13r300g: fixup rs690 tiling stride alignment calculations.Dave Airlie
The RS690 memory controller prefers things to be on a different boundary than the discrete GPUs, we had an attempt to fix this, but it still failed, this consolidates the stride calculation into one place and removes the really special case check. This fixes gnome-shell and 16 piglit tests on my rs690 system. NOTE: This is a candidate for both the 7.9 and 7.10 branches. Signed-off-by: Dave Airlie <airlied@redhat.com>
2010-12-11r300g: fix rendering with a vertex attrib having a zero strideMarek Olšák
The hardware apparently does support a zero stride, so let's use it. This fixes missing objects in ETQW, but might also fix a ton of other similar-looking bugs. NOTE: This is a candidate for both the 7.9 and 7.10 branches.
2010-12-07r300g: also revalidate the SWTCL vertex buffer after its reallocationMarek Olšák
2010-12-07r300g: validate buffers only if any of bound buffers is changedMarek Olšák
This prevents needless buffer validation (CS space checking).
2010-12-07r300g: cache packet dwords of 3D_LOAD_VBPNTR in a command buffer if possibleMarek Olšák
It's not always possible to preprocess the content of 3D_LOAD_VBPNTR in a command buffer, because the offset to all vertex buffers (which the packet depends on) is derived from the "start" parameter of draw_arrays and the "indexBias" parameter of draw_elements, but we can at least lazily make a command buffer for the case when offset == 0, which should occur most of the time.
2010-12-05r300g: optimize looping over atomsMarek Olšák
This also removes DBG_STATS (the stats can be obtained with valgrind instead).
2010-12-05r300g: cleanup winsysMarek Olšák
2010-12-05r300g: try and use all of vertex constant spaceDave Airlie
Finished up by Marek Olšák. We can set the constant space to use a different area per-call to the shader, we can avoid flushing the PVS as often as we do by spreading out the constants across the whole constant space. Signed-off-by: Marek Olšák <maraeo@gmail.com>
2010-12-05r300g: do not use the index parameter in set_constant_bufferMarek Olšák
It appears to be a constant buffer index (in case there are more constant buffers explicitly used by a shader), i.e. something that Gallium currently does not use. We treated it incorrectly as the offset to a constant buffer.
2010-12-03r300g: one more r500_index_bias_supported leftoverMarek Olšák
2010-12-03r300g: add capability bit index_bias_supportedMarek Olšák
.. instead of calling r500_index_bias_supported(..) every draw call.
2010-12-03r300g: do not remove unused constants if we are not near the limitMarek Olšák
2010-12-03r300g: fix pointer arithmetic with void* in transfer_inline_writeMarek Olšák
2010-12-03r300g: implement simple transfer_inline_write for buffersMarek Olšák
r600g might need something like that as well. This speeds up constant buffer upload a bit.
2010-12-03r300g: use internal BO handle for add_buffer and write_relocMarek Olšák
Small perf improvement in ipers. radeon_drm_get_cs_handle is exactly what this commit tries to avoid in every write_reloc.
2010-12-03r300g: fix buildMarek Olšák
2010-12-03r300g: Drop unnecessary castnobled
2010-12-03r300g: Abort if draw_create() failsnobled
The other drivers need to be updated to do this, too.
2010-12-03r300g: Abort if atom allocations failnobled
2010-12-02r300g: fix up cubemap texture offset computationMarek Olšák
Broken since 4c7001462607e6e99e474d6271dd481d3f8f201c.