diff options
| author | Jeremy Kolb <jkolb@freedesktop.org> | 2006-11-20 17:25:54 +0000 | 
|---|---|---|
| committer | Jeremy Kolb <jkolb@freedesktop.org> | 2006-11-20 17:25:54 +0000 | 
| commit | afb49fef9033d84d989d62928a03615ec5dbda04 (patch) | |
| tree | 9152e1ec8f888d17fc4da75cc6d2e4e5c2895ea7 /src | |
| parent | 50c85daf02b90fcee239172d7067b582680d2169 (diff) | |
Add state initialization to context creation.
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/dri/nouveau/nouveau_context.c | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/nouveau/nouveau_state.c | 114 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/nouveau/nouveau_state.h | 3 | 
3 files changed, 118 insertions, 1 deletions
| diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c index a2b6f1c674..a2ac056010 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_context.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c @@ -159,6 +159,8 @@ GLboolean nouveauCreateContext( const __GLcontextModes *glVisual,  			break;  	} +        nouveauInitState(ctx); +  	driContextPriv->driverPrivate = (void *)nmesa;  	NOUVEAU_DEBUG = driParseDebugString( getenv( "NOUVEAU_DEBUG" ), diff --git a/src/mesa/drivers/dri/nouveau/nouveau_state.c b/src/mesa/drivers/dri/nouveau/nouveau_state.c index 94c92aeb8a..9811606311 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_state.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_state.c @@ -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] ); +} diff --git a/src/mesa/drivers/dri/nouveau/nouveau_state.h b/src/mesa/drivers/dri/nouveau/nouveau_state.h index 4e8eda83e1..f8fd0cea50 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_state.h +++ b/src/mesa/drivers/dri/nouveau/nouveau_state.h @@ -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); | 
