diff options
author | Eric Anholt <eric@anholt.net> | 2009-05-18 18:01:05 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2009-05-19 10:09:41 -0700 |
commit | 09beee378cecd1079e7a9fa6eee8f084d680d37e (patch) | |
tree | 079c53d1e96e60e89f496bd98871145dbfb84e8f /src/i830.h | |
parent | 34660fd2df5d61b77ed7041d32ac29053fc94f5a (diff) |
Don't do GTT maps on objects bigger than half the available aperture size.
The basic problem is that software fallbacks will do single instructions that
copy from one GTT-mapped BO into another GTT-mapped BO. If we can't get both
of them bound simultanously, we fault one in, retry the instruction, fault the
other in (kicking out #1), retry the instruction, fault #1 back in
(kicking out #2), etc.
Note that we'll still get into a nasty spot if you do a composite operation
with a mask where all 3 are big-but-less-than-half-available-aperture, where
you'll thrash. It at least means you'll make progress, though, since each
instruction will only be operating on two BOs at at time, and the situation
seems unlikely.
Bug #20152 (3/3)
Diffstat (limited to 'src/i830.h')
-rw-r--r-- | src/i830.h | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -437,6 +437,7 @@ typedef struct _I830Rec { int accel_pixmap_offset_alignment; int accel_max_x; int accel_max_y; + int max_gtt_map_size; I830WriteIndexedByteFunc writeControl; I830ReadIndexedByteFunc readControl; @@ -748,6 +749,7 @@ Bool i830_bind_all_memory(ScrnInfoPtr pScrn); Bool i830_unbind_all_memory(ScrnInfoPtr pScrn); unsigned long i830_get_fence_size(I830Ptr pI830, unsigned long size); unsigned long i830_get_fence_pitch(I830Ptr pI830, unsigned long pitch, int format); +void i830_set_max_gtt_map_size(ScrnInfoPtr pScrn); Bool I830BindAGPMemory(ScrnInfoPtr pScrn); Bool I830UnbindAGPMemory(ScrnInfoPtr pScrn); |