summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/nouveau/nouveau_object.c
diff options
context:
space:
mode:
authorBen Skeggs <darktama@iinet.net.au>2006-12-08 03:01:33 +0000
committerBen Skeggs <darktama@iinet.net.au>2006-12-08 03:01:33 +0000
commit4cfb762c3eb2ea9a764c7ba0811c338ef5fba8fe (patch)
tree1fd9ce0a7a22e2bed4b4c83a374b78cf78c4b0f7 /src/mesa/drivers/dri/nouveau/nouveau_object.c
parent3867bc97800ef3072a70565559c11badba3ed55a (diff)
Some work on buffer handling, most likely not entirely correct and
incomplete. But, it works well enough that windows can be moved/resized.
Diffstat (limited to 'src/mesa/drivers/dri/nouveau/nouveau_object.c')
-rw-r--r--src/mesa/drivers/dri/nouveau/nouveau_object.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_object.c b/src/mesa/drivers/dri/nouveau/nouveau_object.c
index 032cdee2f7..ef8a428c22 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_object.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_object.c
@@ -1,6 +1,7 @@
#include "nouveau_fifo.h"
#include "nouveau_object.h"
+#include "nouveau_reg.h"
static GLboolean nouveauCreateContextObject(nouveauContextPtr nmesa, int handle, int class, uint32_t flags, uint32_t dma_in, uint32_t dma_out, uint32_t dma_notifier)
@@ -51,14 +52,30 @@ void nouveauObjectInit(nouveauContextPtr nmesa)
return;
#endif
- nouveauCreateContextObject(nmesa, Nv3D, nmesa->screen->card->class_3d, 0, 0, 0, 0);
- nouveauObjectOnSubchannel(nmesa, NvSub3D, Nv3D);
/* We need to know vram size.. */
-#if 0
nouveauCreateDmaObject( nmesa, NvDmaFB,
0, (256*1024*1024),
0 /*NV_DMA_TARGET_FB*/, 0 /*NV_DMA_ACCESS_RW*/);
+
+ nouveauCreateContextObject(nmesa, Nv3D, nmesa->screen->card->class_3d,
+ 0, 0, 0, 0);
+ nouveauCreateContextObject(nmesa, NvCtxSurf2D, NV10_CONTEXT_SURFACES_2D,
+ 0, 0, 0, 0);
+ nouveauCreateContextObject(nmesa, NvImageBlit, NV10_IMAGE_BLIT,
+ NV_DMA_CONTEXT_FLAGS_PATCH_SRCCOPY, 0, 0, 0);
+
+#ifdef ALLOW_MULTI_SUBCHANNEL
+ nouveauObjectOnSubchannel(nmesa, NvSubCtxSurf2D, NvCtxSurf2D);
+ BEGIN_RING_SIZE(NvSubCtxSurf2D, NV10_CONTEXT_SURFACES_2D_SET_DMA_IN_MEMORY0, 2);
+ OUT_RING(NvDmaFB);
+ OUT_RING(NvDmaFB);
+
+ nouveauObjectOnSubchannel(nmesa, NvSubImageBlit, NvImageBlit);
+ BEGIN_RING_SIZE(NvSubImageBlit, NV10_IMAGE_BLIT_SET_CONTEXT_SURFACES_2D, 1);
+ OUT_RING(NvCtxSurf2D);
#endif
+
+ nouveauObjectOnSubchannel(nmesa, NvSub3D, Nv3D);
}