nouveau: some fixes to the nv04 state code.
authorStephane Marchesin <marchesin@icps.u-strasbg.fr>
Sat, 10 Mar 2007 00:23:40 +0000 (01:23 +0100)
committerStephane Marchesin <marchesin@icps.u-strasbg.fr>
Sat, 10 Mar 2007 00:30:33 +0000 (01:30 +0100)
src/mesa/drivers/dri/nouveau/nv04_state.c

index 4129ecc..25df3d2 100644 (file)
@@ -455,35 +455,37 @@ static GLboolean nv04BindBuffers(nouveauContextPtr nmesa, int num_color,
                nouveau_renderbuffer *depth)
 {
        GLuint x, y, w, h;
+       uint32_t depth_pitch=(depth?depth->pitch:0+15)&~15+16;
+       if (depth_pitch<256) depth_pitch=256;
 
        w = color[0]->mesa.Width;
        h = color[0]->mesa.Height;
        x = nmesa->drawX;
        y = nmesa->drawY;
 
+       BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_FORMAT, 1);
+       if (color[0]->mesa._ActualFormat == GL_RGBA8)
+               OUT_RING(0x108/*A8R8G8B8*/);
+       else
+               OUT_RING(0x103/*R5G6B5*/);
+
        /* FIXME pitches have to be aligned ! */
        BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_PITCH, 2);
-       OUT_RING(color[0]->pitch|(depth?(depth->pitch<<16):0));
+       OUT_RING(color[0]->pitch|(depth_pitch<<16));
        OUT_RING(color[0]->offset);
-
        if (depth) {
                BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_OFFSET_ZETA, 1);
                OUT_RING(depth->offset);
        }
 
-       BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL, 2);
-       OUT_RING((w<<16)|x);
-       OUT_RING((h<<16)|y);
+//     BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_CLIP_HORIZONTAL, 2);
+//     OUT_RING((w<<16)|x);
+//     OUT_RING((h<<16)|y);
 
-       /* FIXME not sure... */
-       BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_CLIP_SIZE, 1);
-       OUT_RING((h<<16)|w);
 
-       BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_FORMAT, 1);
-       if (color[0]->mesa._ActualFormat == GL_RGBA8)
-               OUT_RING(108/*A8R8G8B8*/);
-       else
-               OUT_RING(103/*R5G6B5*/);
+       /* FIXME not sure... */
+/*     BEGIN_RING_SIZE(NvSubCtxSurf3D, NV04_CONTEXT_SURFACES_3D_CLIP_SIZE, 1);
+       OUT_RING((h<<16)|w);*/
 
        return GL_TRUE;
 }