nouveau: create objnull during channel creation
authorBen Skeggs <skeggsb@gmail.com>
Tue, 13 May 2008 02:06:32 +0000 (12:06 +1000)
committerBen Skeggs <skeggsb@gmail.com>
Tue, 13 May 2008 02:06:32 +0000 (12:06 +1000)
src/gallium/drivers/nouveau/nouveau_channel.h
src/gallium/winsys/dri/nouveau/nouveau_channel.c
src/gallium/winsys/dri/nouveau/nouveau_context.c
src/gallium/winsys/dri/nouveau/nouveau_context.h
src/gallium/winsys/dri/nouveau/nouveau_grobj.c

index b99de9add867aebecb328f08c80dc5f104dfb848..cd99a676bdc600a1b62a7216d8ab32ed9dee92fc 100644 (file)
@@ -29,6 +29,7 @@ struct nouveau_channel {
 
        struct nouveau_pushbuf *pushbuf;
 
+       struct nouveau_grobj *nullobj;
        struct nouveau_grobj *vram;
        struct nouveau_grobj *gart;
 
index df80d04add50bb07d417285c4a8b8074d995f953..3b4dcd1ecf22d25d2df88bffe806ead7589c44e6 100644 (file)
@@ -85,6 +85,13 @@ nouveau_channel_alloc(struct nouveau_device *dev, uint32_t fb_ctxdma,
                return ret;
        }
 
+       ret = nouveau_grobj_alloc(&nvchan->base, 0x00000000, 0x0030,
+                                 &nvchan->base.nullobj);
+       if (ret) {
+               nouveau_channel_free((void *)&nvchan);
+               return ret;
+       }
+
        nouveau_dma_channel_init(&nvchan->base);
        nouveau_pushbuf_init(&nvchan->base);
 
@@ -109,6 +116,7 @@ nouveau_channel_free(struct nouveau_channel **chan)
 
        nouveau_grobj_free(&nvchan->base.vram);
        nouveau_grobj_free(&nvchan->base.gart);
+       nouveau_grobj_free(&nvchan->base.nullobj);
 
        cf.channel = nvchan->drm.channel;
        drmCommandWrite(nvdev->fd, DRM_NOUVEAU_CHANNEL_FREE, &cf, sizeof(cf));
index e65b057335ca8dcf8aedc87083a6da0885be5d30..d9fc3f6ce1f10e26865cc74b9d02d40ccb4ae6a9 100644 (file)
@@ -26,7 +26,6 @@ int __nouveau_debug = 0;
 static void
 nouveau_channel_context_destroy(struct nouveau_channel_context *nvc)
 {
-       nouveau_grobj_free(&nvc->NvNull);
        nouveau_grobj_free(&nvc->NvCtxSurf2D);
        nouveau_grobj_free(&nvc->NvImageBlit);
        nouveau_grobj_free(&nvc->NvGdiRect);
@@ -59,12 +58,6 @@ nouveau_channel_context_create(struct nouveau_device *dev)
                return NULL;
        }
 
-       if ((ret = nouveau_grobj_alloc(nvc->channel, 0x00000000, 0x30,
-                                      &nvc->NvNull))) {
-               NOUVEAU_ERR("Error creating NULL object: %d\n", ret);
-               nouveau_channel_context_destroy(nvc);
-               return NULL;
-       }
        nvc->next_handle = 0x80000000;
 
        if ((ret = nouveau_notifier_alloc(nvc->channel, nvc->next_handle++, 1,
index 9872d6b6914591936d6e20d1dcb2d318feccaa3c..b20107a94c6ef86721a495728ab814e3c65b2c60 100644 (file)
@@ -26,7 +26,6 @@ struct nouveau_channel_context {
        struct nouveau_notifier *sync_notifier;
 
        /* Common */
-       struct nouveau_grobj    *NvNull;
        struct nouveau_grobj    *NvM2MF;
        /* NV04-NV40 */
        struct nouveau_grobj    *NvCtxSurf2D;
index 55dfeb99aa7d128712447a2a5847f80bbda435ee..51523897d5877ea1059a5a7b3fb913154baabb50 100644 (file)
@@ -50,7 +50,7 @@ nouveau_grobj_alloc(struct nouveau_channel *chan, uint32_t handle,
        ret = drmCommandWrite(nvdev->fd, DRM_NOUVEAU_GROBJ_ALLOC,
                              &g, sizeof(g));
        if (ret) {
-               nouveau_grobj_free((void *)&grobj);
+               nouveau_grobj_free((void *)&nvgrobj);
                return ret;
        }