summaryrefslogtreecommitdiffstats
path: root/src/gallium/winsys/radeon
Commit message (Collapse)AuthorAgeFilesLines
* r300g: rework command submission and resource space checkingMarek Olšák2011-01-088-163/+409
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* r300g: Remove unnecessary header.Vinson Lee2010-12-231-2/+0
|
* r300g: support B10G10R10A2 render targets only with DRM 2.8.0 or later versionsMarek Olšák2010-12-223-1/+9
|
* r300g: cleanup winsysMarek Olšák2010-12-0511-628/+443
|
* r300g: use internal BO handle for add_buffer and write_relocMarek Olšák2010-12-033-14/+28
| | | | | | | Small perf improvement in ipers. radeon_drm_get_cs_handle is exactly what this commit tries to avoid in every write_reloc.
* r300g/r600g: bump cache manager timeouts to 1sDave Airlie2010-11-251-1/+1
| | | | On lightsmark on my r500 this drop the bufmgr allocations of the sysprof.
* gallium/egl: fix r300 vs r600 loadingAlex Deucher2010-11-231-1/+208
| | | | | Should fix: https://bugs.freedesktop.org/show_bug.cgi?id=31841
* radeong: fix leaksJoakim Sindholt2010-09-261-0/+3
|
* r300g: make accessing map_list and buffer_handles thread-safeMarek Olšák2010-09-241-6/+58
| | | | NOTE: This is a candidate for the 7.9 branch.
* r300g: fixup long-lived BO maps being incorrectly unmapped when flushingMarek Olšák2010-09-241-4/+10
| | | | | | Based on commit 3ddc714b20ac4e28b80c6f88d1993445fff2262c by Dave Airlie. NOTE: This is a candidate for the 7.9 branch.
* r300g: fix buffer reuse issue caused by previous commitDave Airlie2010-09-151-3/+6
| | | | | | caused by 0b9eb5c9bb03e5134d9a41786178100109e80c5a test run glxgears, resize.
* r300g: prevent creating multiple winsys BOs for the same handleMarek Olšák2010-09-151-0/+26
| | | | | | | This fixes a DRM deadlock in the cubestorm xscreensaver, because somehow there must not be 2 different BOs relocated in one CS if both BOs back the same handle. I was told it is impossible to happen, but apparently it is not, or there is something else wrong.
* r300g: fix map_bufferMarek Olšák2010-09-131-4/+17
| | | | https://bugs.freedesktop.org/show_bug.cgi?id=30145
* pb: add void * for flush ctx to mapping functionsDave Airlie2010-09-121-7/+3
| | | | | | | | | | If the buffer we are attempting to map is referenced by the unsubmitted command stream for this context, we need to flush the command stream, however to do that we need to be able to access the context at the lowest level map function, currently we set the buffer in the toplevel map, but this racy between context. (we probably have a lot more issues than that.) I'll look into a proper solution as suggested by jrfonseca when I get some time.
* r300g: Remove unnecessary header.Vinson Lee2010-08-141-1/+0
|
* r300g: generalize the way we ask for hyperzMarek Olšák2010-08-081-9/+26
| | | | | | | This makes it compatible with the modified DRM interface in drm-radeon-testing. Also, now you need to set RADEON_HYPERZ=1 to be able to use hyperz. It's not bug-free yet.
* r300g: do not emit GB_Z_PEQ_CONFIG on non-r500 if DRM < 2.6.0Marek Olšák2010-08-063-0/+12
|
* r300g: debug_print on startup whether we can use hyper-zMarek Olšák2010-08-051-2/+4
|
* r300g: implement hyper-z support. (v4)Dave Airlie2010-08-053-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | This implements fast Z clear, Z compression, and HiZ support for r300->r500 GPUs. It also allows cbzb clears when fast Z clears are being used for the ZB. It requires a kernel with hyper-z support. Thanks to Marek Olšák <[email protected]>, who started this off, and Alex Deucher at AMD for providing lots of hints. v2: squashed zmask ram size fix] squashed r300g/blitter: fix Z readback when compressed] v3: rebase around texture changes in master - .1 fix more bits v4: migrated to using u_mm in r300_texture to manage hiz/zmask rams consistently disabled HiZ when using OQ flush z-cache before turning hyper-z off update hyper-z state on dsa state change store depthclearvalue across cbzb clears and replace it afterwards. Signed-off-by: Dave Airlie <[email protected]>
* r300g: reject resources from handles which are not large enoughMarek Olšák2010-07-252-4/+9
| | | | | | | | The driver gets a buffer and its size in resource_from_handle. It computes the required minimum buffer size from given texture properties, and compares the two sizes. This is to early detect DDX bugs.
* r300g: do not make copies of constant buffers, emit them directlyMarek Olšák2010-07-162-12/+1
|
* r300g: rebuild winsys and command submission to support multiple contextsMarek Olšák2010-07-164-258/+275
|
* r300g: do not print a rejected CS if RADEON_DUMP_CS is not setMarek Olšák2010-07-102-4/+9
| | | | Also print relocation failures on non-debug builds too.
* r300g: store/return the stride for winsys_handle in winsysMarek Olšák2010-07-081-3/+8
|
* r300g: move one flush from winsys to the contextMarek Olšák2010-06-301-14/+1
| | | | | | | This flush happens when changing the tiling flags, and it should really be done in the context. I hope this fixes FDO bug #28630.
* Merge branch 'gallium-drm-driver-drescriptor'Jakob Bornecrantz2010-06-284-24/+14
|\ | | | | | | | | | | | | | | | | Conflicts: src/gallium/state_trackers/egl/x11/native_dri2.c src/gallium/state_trackers/egl/x11/native_x11.c src/gallium/state_trackers/egl/x11/native_x11.h src/gallium/state_trackers/xorg/xorg_driver.c src/gallium/winsys/radeon/drm/radeon_drm.c
| * r300g: Move bootstrap code to targetsJakob Bornecrantz2010-06-064-22/+14
| |
* | glhd: Use an environment variable (GALAHAD) to enable. Off by default.Corbin Simpson2010-06-231-2/+1
| |
* | radeong: Disable Galahad for now; breaks texturing.Corbin Simpson2010-06-231-1/+2
| |
* | targets, radeong: Add Galahad.Corbin Simpson2010-06-221-1/+3
| | | | | | | | Currently unconditional and causes segfaults.
* | r300g: optimize the immediate mode emission path a bitMarek Olšák2010-06-221-0/+12
| |
* | r300g: cleanup buffer_{from, get}_handleMarek Olšák2010-06-202-16/+6
| |
* | r300g: drop begin_cs/end_csMarek Olšák2010-06-141-21/+0
| | | | | | | | | | | | | | | | | | | | I have had a look at the libdrm sources and they just contain more or less the same checking we do in macros, and begin_cs may realloc the CS buffer if we overflow it, which never happens with r300g. So these are pretty much useless. There is a small but measurable performance increase by dropping the two functions.
* | r300g: replace r300_cs_info with simplier get_cs_free_dwordsMarek Olšák2010-06-131-6/+3
|/
* r300g: use r300_buffer_domain everywhereMarek Olšák2010-06-023-11/+31
|
* r300g: let the driver determine the GEM domain for buffer_createMarek Olšák2010-06-023-26/+16
|
* r300g: add get_cs_info winsys entrypoint, abandon check_csMarek Olšák2010-05-261-3/+6
|
* drm_api: Remove type argument from create screen callbackJakob Bornecrantz2010-05-252-6/+2
| | | | | With the removal of DRI1 support there where no use of this argument, some drivers didn't even properly check it.
* r300g: expose radeon_bo_wait to the driverMarek Olšák2010-05-163-0/+18
|
* r300g: fix texture transfersMarek Olšák2010-05-131-1/+1
| | | | | | | The regression has first shown up after this state tracker change: b0427bedde80e3189524651a327235bdfddbc613. FDO bug #28082.
* r300g: do not validate buffers in check_csMarek Olšák2010-05-021-1/+1
| | | | | It's already done in r300_emit_buffer_validate. This also fixes Total Annihilation 3D on debug builds at least.
* r300g: cache tiling flags to reduce the number of DRM callsMarek Olšák2010-05-021-6/+9
|
* radeong: fix scons buildJoakim Sindholt2010-04-281-0/+1
|
* r300g: fix warnings by using the const qualifierMarek Olšák2010-04-261-1/+1
| | | | See also the libdrm commit af98ccf4dd5dcb1b904ec32b9bd1521e6bf7dda5.
* r300g: Add CS table writing.Corbin Simpson2010-04-261-0/+8
|
* r300g: emit MSPOS regsMarek Olšák2010-04-263-6/+10
|
* gallium: Fix copy typoJakob Bornecrantz2010-04-201-1/+1
|
* radeong: Minor clean up of winsysJakob Bornecrantz2010-04-201-12/+3
| | | | Also try to wrap trace around driver on non-debug builds, its free.
* r300g: do not tell st that a buffer is referenced by hwMarek Olšák2010-04-183-7/+21
| | | | It saves a few libdrm calls and unnecessary flushes.
* r300g: fix mipmapped 3D texturesMarek Olšák2010-04-113-0/+8
| | | | This is a bug in the CS checker causing CS being rejected.