summaryrefslogtreecommitdiff
path: root/src/i830.h
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2009-05-18 18:01:05 -0700
committerEric Anholt <eric@anholt.net>2009-05-19 10:09:41 -0700
commit09beee378cecd1079e7a9fa6eee8f084d680d37e (patch)
tree079c53d1e96e60e89f496bd98871145dbfb84e8f /src/i830.h
parent34660fd2df5d61b77ed7041d32ac29053fc94f5a (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.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/i830.h b/src/i830.h
index 0969c485..7c260dec 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -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);