xf86-video-intel: src/sna/kgem.c
Chris Wilson
ickle at kemper.freedesktop.org
Thu Mar 14 15:13:14 PDT 2013
src/sna/kgem.c | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
New commits:
commit 45d20e9a65bec8d962a4ec20ee35079935f71b91
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Mar 14 22:09:38 2013 +0000
sna: Add an LLC path for creating snoopable buffers
As with LLC we do not actually need to track snoopable as a separate
cache state.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 34ea212..31e110e 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -5005,6 +5005,42 @@ create_snoopable_buffer(struct kgem *kgem, unsigned alloc)
struct kgem_buffer *bo;
uint32_t handle;
+ if (kgem->has_llc) {
+ struct kgem_bo *old;
+
+ bo = buffer_alloc();
+ if (bo == NULL)
+ return NULL;
+
+ old = search_linear_cache(kgem, alloc,
+ CREATE_INACTIVE | CREATE_CPU_MAP | CREATE_EXACT);
+ if (old) {
+ init_buffer_from_bo(bo, old);
+ } else {
+ handle = gem_create(kgem->fd, alloc);
+ if (handle == 0) {
+ free(bo);
+ return NULL;
+ }
+
+ debug_alloc(kgem, alloc);
+ __kgem_bo_init(&bo->base, handle, alloc);
+ DBG(("%s: created CPU (LLC) handle=%d for buffer, size %d\n",
+ __FUNCTION__, bo->base.handle, alloc));
+ }
+
+ assert(bo->base.refcnt == 1);
+ assert(bo->mmapped == true);
+ assert(bo->need_io == false);
+
+ bo->mem = kgem_bo_map__cpu(kgem, &bo->base);
+ if (bo->mem != NULL)
+ return bo;
+
+ bo->base.refcnt = 0; /* for valgrind */
+ kgem_bo_free(kgem, &bo->base);
+ }
+
if (kgem->has_cacheing) {
struct kgem_bo *old;
More information about the xorg-commit
mailing list