xf86-video-intel: 2 commits - src/sna/kgem.c
Chris Wilson
ickle at kemper.freedesktop.org
Sun Apr 12 08:22:07 PDT 2015
src/sna/kgem.c | 36 ++++++++++++++++++++++--------------
1 file changed, 22 insertions(+), 14 deletions(-)
New commits:
commit aff63c65bb61e1373bcf477f8d223cb2ab4e84b9
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Apr 12 15:01:47 2015 +0100
sna: Fix self-relocations fixups for 64-bit addressing
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index ff83507..b217c19 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1433,6 +1433,7 @@ static void kgem_fixup_relocs(struct kgem *kgem, struct kgem_bo *bo, int shrink)
bo->handle, (long long)bo->presumed_offset));
for (n = 0; n < kgem->nreloc__self; n++) {
int i = kgem->reloc__self[n];
+ uint64_t addr;
assert(kgem->reloc[i].target_handle == ~0U);
kgem->reloc[i].target_handle = bo->target_handle;
@@ -1446,13 +1447,17 @@ static void kgem_fixup_relocs(struct kgem *kgem, struct kgem_bo *bo, int shrink)
kgem->reloc[i].delta -= shrink;
}
- kgem->batch[kgem->reloc[i].offset/sizeof(uint32_t)] =
- kgem->reloc[i].delta + bo->presumed_offset;
+ addr = (int)kgem->reloc[i].delta + bo->presumed_offset;
+ kgem->batch[kgem->reloc[i].offset/sizeof(uint32_t)] = addr;
+ if (kgem->gen >= 0100)
+ kgem->batch[kgem->reloc[i].offset/sizeof(uint32_t) + 1] = addr >> 32;
}
if (n == 256) {
for (n = kgem->reloc__self[255]; n < kgem->nreloc; n++) {
if (kgem->reloc[n].target_handle == ~0U) {
+ uint64_t addr;
+
kgem->reloc[n].target_handle = bo->target_handle;
kgem->reloc[n].presumed_offset = bo->presumed_offset;
@@ -1463,8 +1468,9 @@ static void kgem_fixup_relocs(struct kgem *kgem, struct kgem_bo *bo, int shrink)
kgem->reloc[n].delta - shrink));
kgem->reloc[n].delta -= shrink;
}
- kgem->batch[kgem->reloc[n].offset/sizeof(uint32_t)] =
- kgem->reloc[n].delta + bo->presumed_offset;
+ kgem->batch[kgem->reloc[n].offset/sizeof(uint32_t)] = addr;
+ if (kgem->gen >= 0100)
+ kgem->batch[kgem->reloc[n].offset/sizeof(uint32_t) + 1] = addr >> 32;
}
}
}
@@ -3151,10 +3157,13 @@ static void kgem_finish_buffers(struct kgem *kgem)
kgem->has_handle_lut ? bo->base.target_handle : shrink->handle;
for (n = 0; n < kgem->nreloc; n++) {
if (kgem->reloc[n].target_handle == bo->base.target_handle) {
+ uint64_t addr = (int)kgem->reloc[n].delta + shrink->presumed_offset;
+ kgem->batch[kgem->reloc[n].offset/sizeof(kgem->batch[0])] = addr;
+ if (kgem->gen >= 0100)
+ kgem->batch[kgem->reloc[n].offset/sizeof(kgem->batch[0]) + 1] = addr >> 32;
+
kgem->reloc[n].target_handle = shrink->target_handle;
kgem->reloc[n].presumed_offset = shrink->presumed_offset;
- kgem->batch[kgem->reloc[n].offset/sizeof(kgem->batch[0])] =
- kgem->reloc[n].delta + shrink->presumed_offset;
}
}
@@ -3196,10 +3205,13 @@ static void kgem_finish_buffers(struct kgem *kgem)
kgem->has_handle_lut ? bo->base.target_handle : shrink->handle;
for (n = 0; n < kgem->nreloc; n++) {
if (kgem->reloc[n].target_handle == bo->base.target_handle) {
+ uint64_t addr = (int)kgem->reloc[n].delta + shrink->presumed_offset;
+ kgem->batch[kgem->reloc[n].offset/sizeof(kgem->batch[0])] = addr;
+ if (kgem->gen >= 0100)
+ kgem->batch[kgem->reloc[n].offset/sizeof(kgem->batch[0]) + 1] = addr >> 32;
+
kgem->reloc[n].target_handle = shrink->target_handle;
kgem->reloc[n].presumed_offset = shrink->presumed_offset;
- kgem->batch[kgem->reloc[n].offset/sizeof(kgem->batch[0])] =
- kgem->reloc[n].delta + shrink->presumed_offset;
}
}
commit 8350f1e07386d9a7a5078ae5993622112d8f52d7
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Apr 12 15:07:15 2015 +0100
sna: Tidy DBG_NO_SHRINK_BATCHES code
We can combine the llc-path with the DBG path and trim a little of the
ifdeffery.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 79e2238..ff83507 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -3535,7 +3535,6 @@ out_16384:
}
}
- bo = NULL;
if (!kgem->has_llc) {
bo = kgem_create_linear(kgem, size, CREATE_NO_THROTTLE);
if (bo) {
@@ -3545,14 +3544,11 @@ write:
kgem_bo_destroy(kgem, bo);
return NULL;
}
+ return bo;
}
}
- if (bo == NULL)
- bo = kgem_new_batch(kgem);
- return bo;
-#else
- return kgem_new_batch(kgem);
#endif
+ return kgem_new_batch(kgem);
}
#if !NDEBUG
More information about the xorg-commit
mailing list