Add state initialization to context creation.
authorJeremy Kolb <jkolb@freedesktop.org>
Mon, 20 Nov 2006 17:25:54 +0000 (17:25 +0000)
committerJeremy Kolb <jkolb@freedesktop.org>
Mon, 20 Nov 2006 17:25:54 +0000 (17:25 +0000)
src/mesa/drivers/dri/nouveau/nouveau_context.c
src/mesa/drivers/dri/nouveau/nouveau_state.c
src/mesa/drivers/dri/nouveau/nouveau_state.h

index a2b6f1c6740673649c59236641355f23532b6721..a2ac056010d2d2e0fd06bda8a9f662cde4a27ab9 100644 (file)
@@ -159,6 +159,8 @@ GLboolean nouveauCreateContext( const __GLcontextModes *glVisual,
                        break;
        }
 
+        nouveauInitState(ctx);
+
        driContextPriv->driverPrivate = (void *)nmesa;
 
        NOUVEAU_DEBUG = driParseDebugString( getenv( "NOUVEAU_DEBUG" ),
index 94c92aeb8a69244ba5d5c1e9f47e0a25b184fc1f..9811606311fd1254f4bdd88e3de3494c73eba09f 100644 (file)
@@ -154,7 +154,26 @@ static void nouveauDDInvalidateState(GLcontext *ctx, GLuint new_state)
 /* Initialize the context's hardware state. */
 void nouveauDDInitState(nouveauContextPtr nmesa)
 {
-
+    uint32_t type = nmesa->screen->card->type;
+    switch(type)
+    {
+        case NV_03:
+        case NV_04:
+        case NV_05:
+        case NV_10:
+            //nv10InitStateFuncs(&nmesa->glCtx->Driver);
+            break;
+        case NV_20:
+            nv20InitStateFuncs(&nmesa->glCtx->Driver);
+            break;
+        case NV_30:
+        case NV_40:
+        case G_70:
+            nv30InitStateFuncs(&nmesa->glCtx->Driver);
+            break;
+        default:
+            break;
+    }
 }
 
 /* Initialize the driver's state functions */
@@ -211,3 +230,96 @@ void nouveauDDInitStateFuncs(GLcontext *ctx)
    ctx->Driver.CopyConvolutionFilter1D = _swrast_CopyConvolutionFilter1D;
    ctx->Driver.CopyConvolutionFilter2D = _swrast_CopyConvolutionFilter2D;
 }
+
+void nouveauInitState(GLcontext *ctx)
+{
+    /*
+     * Mesa should do this for us:
+     */
+    ctx->Driver.AlphaFunc( ctx, 
+            ctx->Color.AlphaFunc,
+            ctx->Color.AlphaRef);
+
+    ctx->Driver.BlendColor( ctx,
+            ctx->Color.BlendColor );
+
+    ctx->Driver.BlendEquationSeparate( ctx, 
+            ctx->Color.BlendEquationRGB,
+            ctx->Color.BlendEquationA);
+
+    ctx->Driver.BlendFuncSeparate( ctx,
+            ctx->Color.BlendSrcRGB,
+            ctx->Color.BlendDstRGB,
+            ctx->Color.BlendSrcA,
+            ctx->Color.BlendDstA);
+
+    ctx->Driver.ColorMask( ctx, 
+            ctx->Color.ColorMask[RCOMP],
+            ctx->Color.ColorMask[GCOMP],
+            ctx->Color.ColorMask[BCOMP],
+            ctx->Color.ColorMask[ACOMP]);
+
+    ctx->Driver.CullFace( ctx, ctx->Polygon.CullFaceMode );
+    ctx->Driver.DepthFunc( ctx, ctx->Depth.Func );
+    ctx->Driver.DepthMask( ctx, ctx->Depth.Mask );
+
+    ctx->Driver.Enable( ctx, GL_ALPHA_TEST, ctx->Color.AlphaEnabled );
+    ctx->Driver.Enable( ctx, GL_BLEND, ctx->Color.BlendEnabled );
+    ctx->Driver.Enable( ctx, GL_COLOR_LOGIC_OP, ctx->Color.ColorLogicOpEnabled );
+    ctx->Driver.Enable( ctx, GL_COLOR_SUM, ctx->Fog.ColorSumEnabled );
+    ctx->Driver.Enable( ctx, GL_CULL_FACE, ctx->Polygon.CullFlag );
+    ctx->Driver.Enable( ctx, GL_DEPTH_TEST, ctx->Depth.Test );
+    ctx->Driver.Enable( ctx, GL_DITHER, ctx->Color.DitherFlag );
+    ctx->Driver.Enable( ctx, GL_FOG, ctx->Fog.Enabled );
+    ctx->Driver.Enable( ctx, GL_LIGHTING, ctx->Light.Enabled );
+    ctx->Driver.Enable( ctx, GL_LINE_SMOOTH, ctx->Line.SmoothFlag );
+    ctx->Driver.Enable( ctx, GL_POLYGON_STIPPLE, ctx->Polygon.StippleFlag );
+    ctx->Driver.Enable( ctx, GL_SCISSOR_TEST, ctx->Scissor.Enabled );
+    ctx->Driver.Enable( ctx, GL_STENCIL_TEST, ctx->Stencil.Enabled );
+    ctx->Driver.Enable( ctx, GL_TEXTURE_1D, GL_FALSE );
+    ctx->Driver.Enable( ctx, GL_TEXTURE_2D, GL_FALSE );
+    ctx->Driver.Enable( ctx, GL_TEXTURE_RECTANGLE_NV, GL_FALSE );
+    ctx->Driver.Enable( ctx, GL_TEXTURE_3D, GL_FALSE );
+    ctx->Driver.Enable( ctx, GL_TEXTURE_CUBE_MAP, GL_FALSE );
+
+    ctx->Driver.Fogfv( ctx, GL_FOG_COLOR, ctx->Fog.Color );
+    ctx->Driver.Fogfv( ctx, GL_FOG_MODE, 0 );
+    ctx->Driver.Fogfv( ctx, GL_FOG_DENSITY, &ctx->Fog.Density );
+    ctx->Driver.Fogfv( ctx, GL_FOG_START, &ctx->Fog.Start );
+    ctx->Driver.Fogfv( ctx, GL_FOG_END, &ctx->Fog.End );
+
+    ctx->Driver.FrontFace( ctx, ctx->Polygon.FrontFace );
+
+    {
+        GLfloat f = (GLfloat)ctx->Light.Model.ColorControl;
+        ctx->Driver.LightModelfv( ctx, GL_LIGHT_MODEL_COLOR_CONTROL, &f );
+    }
+
+    ctx->Driver.LineWidth( ctx, ctx->Line.Width );
+    ctx->Driver.LogicOpcode( ctx, ctx->Color.LogicOp );
+    ctx->Driver.PointSize( ctx, ctx->Point.Size );
+    ctx->Driver.PolygonStipple( ctx, (const GLubyte *)ctx->PolygonStipple );
+    ctx->Driver.Scissor( ctx, ctx->Scissor.X, ctx->Scissor.Y,
+            ctx->Scissor.Width, ctx->Scissor.Height );
+    ctx->Driver.ShadeModel( ctx, ctx->Light.ShadeModel );
+    ctx->Driver.StencilFuncSeparate( ctx, GL_FRONT,
+            ctx->Stencil.Function[0],
+            ctx->Stencil.Ref[0],
+            ctx->Stencil.ValueMask[0] );
+    ctx->Driver.StencilFuncSeparate( ctx, GL_BACK,
+            ctx->Stencil.Function[1],
+            ctx->Stencil.Ref[1],
+            ctx->Stencil.ValueMask[1] );
+    ctx->Driver.StencilMaskSeparate( ctx, GL_FRONT, ctx->Stencil.WriteMask[0] );
+    ctx->Driver.StencilMaskSeparate( ctx, GL_BACK, ctx->Stencil.WriteMask[1] );
+    ctx->Driver.StencilOpSeparate( ctx, GL_FRONT,
+            ctx->Stencil.FailFunc[0],
+            ctx->Stencil.ZFailFunc[0],
+            ctx->Stencil.ZPassFunc[0]);
+    ctx->Driver.StencilOpSeparate( ctx, GL_BACK,
+            ctx->Stencil.FailFunc[1],
+            ctx->Stencil.ZFailFunc[1],
+            ctx->Stencil.ZPassFunc[1]);
+
+    ctx->Driver.DrawBuffer( ctx, ctx->Color.DrawBuffer[0] );
+}
index 4e8eda83e1295bebc1b7f83b61d55008da6dbce2..f8fd0cea5043666beedcbe44785c455802d93b49 100644 (file)
@@ -32,8 +32,11 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 extern void nouveauDDInitState(nouveauContextPtr nmesa);
 extern void nouveauDDInitStateFuncs(GLcontext *ctx);
 
+extern void nv10InitStateFuncs(struct dd_function_table *func);
+extern void nv20InitStateFuncs(struct dd_function_table *func);
 extern void nv30InitStateFuncs(struct dd_function_table *func);
 
+extern void nouveauInitState(GLcontext *ctx);
 /*
 extern void nouveauDDUpdateState(GLcontext *ctx);
 extern void nouveauDDUpdateHWState(GLcontext *ctx);