summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2008-05-13 12:06:32 +1000
committerBen Skeggs <skeggsb@gmail.com>2008-05-13 12:06:32 +1000
commitc962ad7cd5dbea12d13997b421a44b16af3c6662 (patch)
tree13eca8c68ad3cad2ac989ec19215eb120f303841
parent83e6df12ea31ef48d251fe7b38acd882145f8f14 (diff)
nouveau: create objnull during channel creation
-rw-r--r--src/gallium/drivers/nouveau/nouveau_channel.h1
-rw-r--r--src/gallium/winsys/dri/nouveau/nouveau_channel.c8
-rw-r--r--src/gallium/winsys/dri/nouveau/nouveau_context.c7
-rw-r--r--src/gallium/winsys/dri/nouveau/nouveau_context.h1
-rw-r--r--src/gallium/winsys/dri/nouveau/nouveau_grobj.c2
5 files changed, 10 insertions, 9 deletions
diff --git a/src/gallium/drivers/nouveau/nouveau_channel.h b/src/gallium/drivers/nouveau/nouveau_channel.h
index b99de9add8..cd99a676bd 100644
--- a/src/gallium/drivers/nouveau/nouveau_channel.h
+++ b/src/gallium/drivers/nouveau/nouveau_channel.h
@@ -29,6 +29,7 @@ struct nouveau_channel {
struct nouveau_pushbuf *pushbuf;
+ struct nouveau_grobj *nullobj;
struct nouveau_grobj *vram;
struct nouveau_grobj *gart;
diff --git a/src/gallium/winsys/dri/nouveau/nouveau_channel.c b/src/gallium/winsys/dri/nouveau/nouveau_channel.c
index df80d04add..3b4dcd1ecf 100644
--- a/src/gallium/winsys/dri/nouveau/nouveau_channel.c
+++ b/src/gallium/winsys/dri/nouveau/nouveau_channel.c
@@ -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));
diff --git a/src/gallium/winsys/dri/nouveau/nouveau_context.c b/src/gallium/winsys/dri/nouveau/nouveau_context.c
index e65b057335..d9fc3f6ce1 100644
--- a/src/gallium/winsys/dri/nouveau/nouveau_context.c
+++ b/src/gallium/winsys/dri/nouveau/nouveau_context.c
@@ -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,
diff --git a/src/gallium/winsys/dri/nouveau/nouveau_context.h b/src/gallium/winsys/dri/nouveau/nouveau_context.h
index 9872d6b691..b20107a94c 100644
--- a/src/gallium/winsys/dri/nouveau/nouveau_context.h
+++ b/src/gallium/winsys/dri/nouveau/nouveau_context.h
@@ -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;
diff --git a/src/gallium/winsys/dri/nouveau/nouveau_grobj.c b/src/gallium/winsys/dri/nouveau/nouveau_grobj.c
index 55dfeb99aa..51523897d5 100644
--- a/src/gallium/winsys/dri/nouveau/nouveau_grobj.c
+++ b/src/gallium/winsys/dri/nouveau/nouveau_grobj.c
@@ -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;
}