Some more voodoo to get 3D going with a minimal initial context.
authorBen Skeggs <darktama@iinet.net.au>
Thu, 14 Dec 2006 03:24:57 +0000 (03:24 +0000)
committerBen Skeggs <darktama@iinet.net.au>
Thu, 14 Dec 2006 03:24:57 +0000 (03:24 +0000)
src/mesa/drivers/dri/nouveau/nouveau_object.c
src/mesa/drivers/dri/nouveau/nv30_state.c

index ef8a428c2200bc521b902704229b4b46db10ebb7..dda547c916eaee52ec3d56413a5527ac76a29e06 100644 (file)
@@ -73,6 +73,8 @@ void nouveauObjectInit(nouveauContextPtr nmesa)
        nouveauObjectOnSubchannel(nmesa, NvSubImageBlit, NvImageBlit);
        BEGIN_RING_SIZE(NvSubImageBlit, NV10_IMAGE_BLIT_SET_CONTEXT_SURFACES_2D, 1);
        OUT_RING(NvCtxSurf2D);
+       BEGIN_RING_SIZE(NvSubImageBlit, NV10_IMAGE_BLIT_SET_OPERATION, 1);
+       OUT_RING(3); /* SRCCOPY */
 #endif
 
        nouveauObjectOnSubchannel(nmesa, NvSub3D, Nv3D);
index e30dc8a37c360e6849a7e71b335b4b40d5cb818a..eb3606b6e1c7a07622991a26559ae8245e61383b 100644 (file)
@@ -736,9 +736,28 @@ static GLboolean nv40InitCard(nouveauContextPtr nmesa)
        OUT_RING(NvDmaFB);
        BEGIN_RING_SIZE(NvSub3D, 0x0220, 1);
        OUT_RING(1);
+
+       BEGIN_RING_SIZE(NvSub3D, 0x1ea4, 3);
+       OUT_RING(0x00000010);
+       OUT_RING(0x01000100);
+       OUT_RING(0xff800006);
+       BEGIN_RING_SIZE(NvSub3D, 0x1fc4, 1);
+       OUT_RING(0x06144321);
        BEGIN_RING_SIZE(NvSub3D, 0x1fc8, 2);
        OUT_RING(0xedcba987);
        OUT_RING(0x00000021);
+       BEGIN_RING_SIZE(NvSub3D, 0x1fd0, 1);
+       OUT_RING(0x00171615);
+       BEGIN_RING_SIZE(NvSub3D, 0x1fd4, 1);
+       OUT_RING(0x001b1a19);
+
+       BEGIN_RING_SIZE(NvSub3D, 0x1ef8, 1);
+       OUT_RING(0x0020ffff);
+       BEGIN_RING_SIZE(NvSub3D, 0x1d64, 1);
+       OUT_RING(0x00d30000);
+       BEGIN_RING_SIZE(NvSub3D, 0x1e94, 1);
+       OUT_RING(0x00000001);
+
        BEGIN_RING_SIZE(NvSub3D, 0x1d60, 1);
        OUT_RING(0x03008000);