Mesa (master): nv50: raise constant buffers size to maximum

Christoph Bumiller chrisbmr at kemper.freedesktop.org
Fri Apr 30 21:03:39 UTC 2010


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

Author: Christoph Bumiller <e0425955 at student.tuwien.ac.at>
Date:   Fri Apr 30 22:57:23 2010 +0200

nv50: raise constant buffers size to maximum

Removed the param heaps, haven't been using them for a long
time now.

---

 src/gallium/drivers/nv50/nv50_program.c |    4 ++--
 src/gallium/drivers/nv50/nv50_screen.c  |   18 +++++++-----------
 src/gallium/drivers/nv50/nv50_screen.h  |    3 +--
 3 files changed, 10 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c
index 98f6082..0156ff9 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -4163,7 +4163,7 @@ nv50_program_validate_data(struct nv50_context *nv50, struct nv50_program *p)
 	struct pipe_transfer *transfer;
 
 	if (!p->data[0] && p->immd_nr) {
-		struct nouveau_resource *heap = nv50->screen->immd_heap[0];
+		struct nouveau_resource *heap = nv50->screen->immd_heap;
 
 		if (nouveau_resource_alloc(heap, p->immd_nr, p, &p->data[0])) {
 			while (heap->next && heap->size < p->immd_nr) {
@@ -4181,7 +4181,7 @@ nv50_program_validate_data(struct nv50_context *nv50, struct nv50_program *p)
 					 p->immd_nr, NV50_CB_PMISC);
 	}
 
-	assert(p->param_nr <= 512);
+	assert(p->param_nr <= 16384);
 
 	if (p->param_nr) {
 		unsigned cb;
diff --git a/src/gallium/drivers/nv50/nv50_screen.c b/src/gallium/drivers/nv50/nv50_screen.c
index ad17991..2dd1042 100644
--- a/src/gallium/drivers/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nv50/nv50_screen.c
@@ -190,9 +190,7 @@ nv50_screen_destroy(struct pipe_screen *pscreen)
 	nouveau_grobj_free(&screen->tesla);
 	nouveau_grobj_free(&screen->eng2d);
 	nouveau_grobj_free(&screen->m2mf);
-	nouveau_resource_destroy(&screen->immd_heap[0]);
-	nouveau_resource_destroy(&screen->parm_heap[0]);
-	nouveau_resource_destroy(&screen->parm_heap[1]);
+	nouveau_resource_destroy(&screen->immd_heap);
 	nouveau_screen_fini(&screen->base);
 	FREE(screen);
 }
@@ -242,7 +240,7 @@ nv50_screen_relocs(struct nv50_screen *screen)
 		OUT_RELOCh(chan, screen->constbuf_parm[i], 0, rl);
 		OUT_RELOCl(chan, screen->constbuf_parm[i], 0, rl);
 		OUT_RELOC (chan, screen->constbuf_parm[i],
-			   ((NV50_CB_PVP + i) << 16) | 0x0800, rl, 0, 0);
+			   ((NV50_CB_PVP + i) << 16) | 0x0000, rl, 0, 0);
 	}
 }
 
@@ -411,7 +409,7 @@ nv50_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
 	OUT_RING  (chan, (NV50_CB_AUX << 16) | 0x0200);
 
 	for (i = 0; i < 3; i++) {
-		ret = nouveau_bo_new(dev, NOUVEAU_BO_VRAM, 0, (256 * 4) * 4,
+		ret = nouveau_bo_new(dev, NOUVEAU_BO_VRAM, 0, (4096 * 4) * 4,
 				     &screen->constbuf_parm[i]);
 		if (ret) {
 			nv50_screen_destroy(pscreen);
@@ -420,14 +418,12 @@ nv50_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
 		BEGIN_RING(chan, screen->tesla, NV50TCL_CB_DEF_ADDRESS_HIGH, 3);
 		OUT_RELOCh(chan, screen->constbuf_parm[i], 0, rl);
 		OUT_RELOCl(chan, screen->constbuf_parm[i], 0, rl);
-		OUT_RING  (chan, ((NV50_CB_PVP + i) << 16) | 0x0800);
+		/* CB_DEF_SET_SIZE value of 0x0000 means 65536 */
+		OUT_RING  (chan, ((NV50_CB_PVP + i) << 16) | 0x0000);
 	}
 
-	if (nouveau_resource_init(&screen->immd_heap[0], 0, 128) ||
-	    nouveau_resource_init(&screen->parm_heap[0], 0, 512) ||
-	    nouveau_resource_init(&screen->parm_heap[1], 0, 512))
-	{
-		NOUVEAU_ERR("Error initialising constant buffers.\n");
+	if (nouveau_resource_init(&screen->immd_heap, 0, 128)) {
+		NOUVEAU_ERR("Error initialising shader immediates heap.\n");
 		nv50_screen_destroy(pscreen);
 		return NULL;
 	}
diff --git a/src/gallium/drivers/nv50/nv50_screen.h b/src/gallium/drivers/nv50/nv50_screen.h
index 40ebbee..fbf15a7 100644
--- a/src/gallium/drivers/nv50/nv50_screen.h
+++ b/src/gallium/drivers/nv50/nv50_screen.h
@@ -20,8 +20,7 @@ struct nv50_screen {
 	struct nouveau_bo *constbuf_misc[1];
 	struct nouveau_bo *constbuf_parm[PIPE_SHADER_TYPES];
 
-	struct nouveau_resource *immd_heap[1];
-	struct nouveau_resource *parm_heap[PIPE_SHADER_TYPES];
+	struct nouveau_resource *immd_heap;
 
 	struct pipe_resource *strm_vbuf[16];
 




More information about the mesa-commit mailing list