summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-07-08 13:06:47 -0700
committerKeith Packard <keithp@keithp.com>2009-07-10 18:26:59 -0700
commit704b88dd50a7e7e3f362264b86d0401bee8603aa (patch)
tree935a0b265368e07cef0ed151abe53f6f513eaf80
parent7b273732f70e91df8b41d5c48e1379271557dd8e (diff)
i830_bind_memory: Under UMS: Bind GEM bos with dri_bo_pin, else through the GART
We only need to get static offsets for objects when not running KMS, otherwise the kernel will manage those as needed for us. Binding objects is done in one of two ways. For GEM buffer objects, we use dri_bo_pin. For GART allocated memory, we bind that to the GART.
-rw-r--r--src/i830_memory.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/i830_memory.c b/src/i830_memory.c
index 556b5119..f2f39660 100644
--- a/src/i830_memory.c
+++ b/src/i830_memory.c
@@ -199,10 +199,11 @@ i830_bind_memory(ScrnInfoPtr pScrn, i830_memory *mem)
{
I830Ptr pI830 = I830PTR(pScrn);
- if (mem == NULL || mem->bound)
+ if (mem == NULL || mem->bound || pI830->use_drm_mode)
return TRUE;
- if (mem->bo != NULL && !pI830->use_drm_mode) {
+ if (pI830->have_gem && mem->bo != NULL) {
+
if (dri_bo_pin(mem->bo, mem->alignment) != 0) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Failed to pin %s: %s\n",
@@ -213,9 +214,7 @@ i830_bind_memory(ScrnInfoPtr pScrn, i830_memory *mem)
mem->bound = TRUE;
mem->offset = mem->bo->offset;
mem->end = mem->offset + mem->size;
- }
-
- if (!mem->bound) {
+ } else {
if (!pI830->gtt_acquired)
return TRUE;
@@ -228,8 +227,7 @@ i830_bind_memory(ScrnInfoPtr pScrn, i830_memory *mem)
mem->bound = TRUE;
}
- if (mem->tiling != TILE_NONE && !pI830->use_drm_mode &&
- !pI830->kernel_exec_fencing) {
+ if (mem->tiling != TILE_NONE && !pI830->kernel_exec_fencing) {
mem->fence_nr = i830_set_tiling(pScrn, mem->offset, mem->pitch,
mem->allocated_size, mem->tiling);
}
@@ -1114,7 +1112,7 @@ i830_allocate_framebuffer(ScrnInfoPtr pScrn)
return NULL;
}
- if (!pI830->use_drm_mode && pI830->FbBase && front_buffer->bound)
+ if (pI830->FbBase && front_buffer->bound)
memset (pI830->FbBase + front_buffer->offset, 0, size);
i830_set_max_gtt_map_size(pScrn);