Mesa (nvc0): nouveau: create linear gart/vram mman in common screen init

Ben Skeggs darktama at kemper.freedesktop.org
Tue Mar 1 07:25:13 UTC 2011


Module: Mesa
Branch: nvc0
Commit: cd24fcedecfc41d77047fb827a88db528ed292ca
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=cd24fcedecfc41d77047fb827a88db528ed292ca

Author: Ben Skeggs <bskeggs at redhat.com>
Date:   Tue Mar  1 10:49:36 2011 +1000

nouveau: create linear gart/vram mman in common screen init

Signed-off-by: Ben Skeggs <bskeggs at redhat.com>

---

 src/gallium/drivers/nouveau/nouveau_screen.c |    9 +++++++++
 src/gallium/drivers/nouveau/nouveau_screen.h |    3 +++
 src/gallium/drivers/nv50/nv50_buffer.c       |   12 ++++++------
 src/gallium/drivers/nv50/nv50_query.c        |    2 +-
 src/gallium/drivers/nv50/nv50_screen.c       |    5 -----
 src/gallium/drivers/nv50/nv50_screen.h       |    2 --
 6 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/src/gallium/drivers/nouveau/nouveau_screen.c b/src/gallium/drivers/nouveau/nouveau_screen.c
index e14f234..e6cd306 100644
--- a/src/gallium/drivers/nouveau/nouveau_screen.c
+++ b/src/gallium/drivers/nouveau/nouveau_screen.c
@@ -251,6 +251,10 @@ nouveau_screen_init(struct nouveau_screen *screen, struct nouveau_device *dev)
 
 	util_format_s3tc_init();
 
+	screen->mm_GART = nouveau_mm_create(dev,
+					    NOUVEAU_BO_GART | NOUVEAU_BO_MAP,
+					    0x000);
+	screen->mm_VRAM = nouveau_mm_create(dev, NOUVEAU_BO_VRAM, 0x000);
 	return 0;
 }
 
@@ -258,7 +262,12 @@ void
 nouveau_screen_fini(struct nouveau_screen *screen)
 {
 	struct pipe_winsys *ws = screen->base.winsys;
+
+	nouveau_mm_destroy(screen->mm_GART);
+	nouveau_mm_destroy(screen->mm_VRAM);
+
 	nouveau_channel_free(&screen->channel);
+
 	if (ws)
 		ws->destroy(ws);
 }
diff --git a/src/gallium/drivers/nouveau/nouveau_screen.h b/src/gallium/drivers/nouveau/nouveau_screen.h
index e4a460e..173592d 100644
--- a/src/gallium/drivers/nouveau/nouveau_screen.h
+++ b/src/gallium/drivers/nouveau/nouveau_screen.h
@@ -24,6 +24,9 @@ struct nouveau_screen {
 		void (*emit)(struct pipe_screen *, u32 sequence);
 		u32  (*update)(struct pipe_screen *);
 	} fence;
+
+	struct nouveau_mman *mm_VRAM;
+	struct nouveau_mman *mm_GART;
 };
 
 static INLINE struct nouveau_screen *
diff --git a/src/gallium/drivers/nv50/nv50_buffer.c b/src/gallium/drivers/nv50/nv50_buffer.c
index 7b2b47a..ae65591 100644
--- a/src/gallium/drivers/nv50/nv50_buffer.c
+++ b/src/gallium/drivers/nv50/nv50_buffer.c
@@ -27,14 +27,14 @@ nv50_buffer_allocate(struct nv50_screen *screen, struct nv50_resource *buf,
                      unsigned domain)
 {
    if (domain == NOUVEAU_BO_VRAM) {
-      buf->mm = nouveau_mm_allocate(screen->mm_VRAM, buf->base.width0, &buf->bo,
-                                    &buf->offset);
+      buf->mm = nouveau_mm_allocate(screen->base.mm_VRAM, buf->base.width0,
+                                    &buf->bo, &buf->offset);
       if (!buf->bo)
          return nv50_buffer_allocate(screen, buf, NOUVEAU_BO_GART);
    } else
    if (domain == NOUVEAU_BO_GART) {
-      buf->mm = nouveau_mm_allocate(screen->mm_GART, buf->base.width0, &buf->bo,
-                                    &buf->offset);
+      buf->mm = nouveau_mm_allocate(screen->base.mm_GART, buf->base.width0,
+                                    &buf->bo, &buf->offset);
       if (!buf->bo)
          return FALSE;
    }
@@ -101,7 +101,7 @@ nv50_buffer_download(struct nv50_context *nv50, struct nv50_resource *buf,
 
    assert(buf->domain == NOUVEAU_BO_VRAM);
 
-   mm = nouveau_mm_allocate(nv50->screen->mm_GART, size, &bounce, &offset);
+   mm = nouveau_mm_allocate(nv50->screen->base.mm_GART, size, &bounce, &offset);
    if (!bounce)
       return FALSE;
 
@@ -136,7 +136,7 @@ nv50_buffer_upload(struct nv50_context *nv50, struct nv50_resource *buf,
       return TRUE;
    }
 
-   mm = nouveau_mm_allocate(nv50->screen->mm_GART, size, &bounce, &offset);
+   mm = nouveau_mm_allocate(nv50->screen->base.mm_GART, size, &bounce, &offset);
    if (!bounce)
       return FALSE;
 
diff --git a/src/gallium/drivers/nv50/nv50_query.c b/src/gallium/drivers/nv50/nv50_query.c
index 2803626..2e65c54 100644
--- a/src/gallium/drivers/nv50/nv50_query.c
+++ b/src/gallium/drivers/nv50/nv50_query.c
@@ -68,7 +68,7 @@ nv50_query_allocate(struct nv50_context *nv50, struct nv50_query *q, int size)
       }
    }
    if (size) {
-      q->mm = nouveau_mm_allocate(screen->mm_GART, size, &q->bo, &q->base);
+      q->mm = nouveau_mm_allocate(screen->base.mm_GART, size, &q->bo, &q->base);
       if (!q->bo)
          return FALSE;
       q->offset = q->base;
diff --git a/src/gallium/drivers/nv50/nv50_screen.c b/src/gallium/drivers/nv50/nv50_screen.c
index bd645b8..f2b03e8 100644
--- a/src/gallium/drivers/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nv50/nv50_screen.c
@@ -229,8 +229,6 @@ nv50_screen_destroy(struct pipe_screen *pscreen)
    if (screen->tic.entries)
       FREE(screen->tic.entries);
 
-   nouveau_mm_destroy(screen->mm_GART);
-   nouveau_mm_destroy(screen->mm_VRAM);
    nouveau_mm_destroy(screen->mm_VRAM_fe0);
 
    nouveau_grobj_free(&screen->tesla);
@@ -586,9 +584,6 @@ nv50_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    screen->tic.entries = CALLOC(4096, sizeof(void *));
    screen->tsc.entries = screen->tic.entries + 2048;
 
-   screen->mm_GART = nouveau_mm_create(dev, NOUVEAU_BO_GART | NOUVEAU_BO_MAP,
-                                       0x000);
-   screen->mm_VRAM = nouveau_mm_create(dev, NOUVEAU_BO_VRAM, 0x000);
    screen->mm_VRAM_fe0 = nouveau_mm_create(dev, NOUVEAU_BO_VRAM, 0xfe0);
 
    nouveau_fence_new(&screen->base, &screen->base.fence.current, FALSE);
diff --git a/src/gallium/drivers/nv50/nv50_screen.h b/src/gallium/drivers/nv50/nv50_screen.h
index 672891b..3bf67eb 100644
--- a/src/gallium/drivers/nv50/nv50_screen.h
+++ b/src/gallium/drivers/nv50/nv50_screen.h
@@ -54,8 +54,6 @@ struct nv50_screen {
 
    struct nouveau_notifier *sync;
 
-   struct nouveau_mman *mm_GART;
-   struct nouveau_mman *mm_VRAM;
    struct nouveau_mman *mm_VRAM_fe0;
 
    struct nouveau_grobj *tesla;




More information about the mesa-commit mailing list