xf86-video-intel: 2 commits - src/sna/kgem.c
Chris Wilson
ickle at kemper.freedesktop.org
Tue Aug 28 14:27:16 PDT 2012
src/sna/kgem.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
New commits:
commit deaa1cac269be03f4ec44092f70349ff466d59de
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Aug 28 22:23:22 2012 +0100
sna: Align active upload buffers to the next page for reuse
If we write to the same page as it already active on the GPU then
despite the invalidation performed at the beginning of each batch, we do
not seem to correctly sample the new data.
References: https://bugs.freedesktop.org/show_bug.cgi?id=51422
References: https://bugs.freedesktop.org/show_bug.cgi?id=52299
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index e51bbc0..ed5e342 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1910,13 +1910,18 @@ static void kgem_finish_buffers(struct kgem *kgem)
}
if (bo->mmapped) {
+ int used;
+
assert(!bo->need_io);
+
+ used = ALIGN(bo->used + PAGE_SIZE-1, PAGE_SIZE);
if (!DBG_NO_UPLOAD_ACTIVE &&
- bo->used + PAGE_SIZE <= bytes(&bo->base) &&
+ used + PAGE_SIZE <= bytes(&bo->base) &&
(kgem->has_llc || !IS_CPU_MAP(bo->base.map))) {
DBG(("%s: retaining upload buffer (%d/%d)\n",
__FUNCTION__, bo->used, bytes(&bo->base)));
assert(!bo->base.snoop);
+ bo->used = used;
list_move(&bo->base.list,
&kgem->active_buffers);
continue;
commit 9e0305a3928f253ded6c8e141a4dd42be3952eb9
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Aug 28 20:49:20 2012 +0100
sna: Discard inplace flag if we create a CPU map for the upload buffer
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index ba8b0b9..e51bbc0 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -4300,6 +4300,7 @@ struct kgem_bo *kgem_create_buffer(struct kgem *kgem,
assert(bo->base.refcnt >= 1);
assert(bo->mmapped);
assert(!bo->base.snoop);
+ assert(!IS_CPU_MAP(bo->base.map) || kgem->has_llc);
if ((bo->write & ~flags) & KGEM_BUFFER_INPLACE) {
DBG(("%s: skip write %x buffer, need %x\n",
@@ -4435,9 +4436,11 @@ struct kgem_bo *kgem_create_buffer(struct kgem *kgem,
assert(bo->mmapped);
assert(bo->base.refcnt == 1);
- bo->mem = kgem_bo_map__gtt(kgem, &bo->base);
+ bo->mem = kgem_bo_map(kgem, &bo->base);
if (bo->mem) {
alloc = num_pages(&bo->base);
+ if (IS_CPU_MAP(bo->base.map))
+ flags &= ~KGEM_BUFFER_INPLACE;
goto init;
} else {
bo->base.refcnt = 0;
More information about the xorg-commit
mailing list