diff options
Diffstat (limited to 'src/mesa/swrast_setup/ss_context.c')
-rw-r--r-- | src/mesa/swrast_setup/ss_context.c | 103 |
1 files changed, 36 insertions, 67 deletions
diff --git a/src/mesa/swrast_setup/ss_context.c b/src/mesa/swrast_setup/ss_context.c index def9e4f43c..2e92342e07 100644 --- a/src/mesa/swrast_setup/ss_context.c +++ b/src/mesa/swrast_setup/ss_context.c @@ -1,4 +1,4 @@ -/* $Id: ss_context.c,v 1.13 2001/03/12 00:48:43 gareth Exp $ */ +/* $Id: ss_context.c,v 1.14 2001/07/12 22:09:21 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -32,12 +32,14 @@ #include "ss_context.h" #include "ss_triangle.h" #include "ss_vb.h" -#include "ss_interp.h" #include "swrast_setup.h" +#include "tnl/tnl.h" #include "tnl/t_context.h" +#include "tnl/t_pipeline.h" #define _SWSETUP_NEW_VERTS (_NEW_RENDERMODE| \ + _NEW_POLYGON| \ _NEW_LIGHT| \ _NEW_TEXTURE| \ _NEW_COLOR| \ @@ -47,47 +49,6 @@ #define _SWSETUP_NEW_RENDERINDEX (_NEW_POLYGON|_NEW_LIGHT) -/* Dispatch from these fixed entrypoints to the state-dependent - * functions. - * - * The design of swsetup suggests that we could really program - * ctx->Driver.TriangleFunc directly from _swsetup_RenderStart, and - * avoid this second level of indirection. However, this is more - * convient for fallback cases in hardware rasterization drivers. - */ -void -_swsetup_Quad( GLcontext *ctx, GLuint v0, GLuint v1, - GLuint v2, GLuint v3 ) -{ - SWSETUP_CONTEXT(ctx)->Quad( ctx, v0, v1, v2, v3 ); -} - -void -_swsetup_Triangle( GLcontext *ctx, GLuint v0, GLuint v1, - GLuint v2 ) -{ - SWSETUP_CONTEXT(ctx)->Triangle( ctx, v0, v1, v2 ); -} - -void -_swsetup_Line( GLcontext *ctx, GLuint v0, GLuint v1 ) -{ - SWSETUP_CONTEXT(ctx)->Line( ctx, v0, v1 ); -} - -void -_swsetup_Points( GLcontext *ctx, GLuint first, GLuint last ) -{ - SWSETUP_CONTEXT(ctx)->Points( ctx, first, last ); -} - -void -_swsetup_BuildProjectedVertices( GLcontext *ctx, GLuint start, GLuint end, - GLuint new_inputs ) -{ - SWSETUP_CONTEXT(ctx)->BuildProjVerts( ctx, start, end, new_inputs ); -} - GLboolean _swsetup_CreateContext( GLcontext *ctx ) @@ -98,7 +59,8 @@ _swsetup_CreateContext( GLcontext *ctx ) if (!swsetup) return GL_FALSE; - swsetup->verts = (SWvertex *) ALIGN_MALLOC( sizeof(SWvertex) * tnl->vb.Size, 32); + swsetup->verts = (SWvertex *) ALIGN_MALLOC( sizeof(SWvertex) * tnl->vb.Size, + 32); if (!swsetup->verts) { FREE(swsetup); return GL_FALSE; @@ -108,7 +70,6 @@ _swsetup_CreateContext( GLcontext *ctx ) swsetup->NewState = ~0; _swsetup_vb_init( ctx ); - _swsetup_interp_init( ctx ); _swsetup_trifuncs_init( ctx ); return GL_TRUE; @@ -126,17 +87,16 @@ _swsetup_DestroyContext( GLcontext *ctx ) } } -void +static void _swsetup_RenderPrimitive( GLcontext *ctx, GLenum mode ) { SWSETUP_CONTEXT(ctx)->render_prim = mode; } -void +static void _swsetup_RenderStart( GLcontext *ctx ) { SScontext *swsetup = SWSETUP_CONTEXT(ctx); - struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; GLuint new_state = swsetup->NewState; if (new_state & _SWSETUP_NEW_RENDERINDEX) { @@ -149,16 +109,19 @@ _swsetup_RenderStart( GLcontext *ctx ) swsetup->NewState = 0; - if (VB->ClipMask && VB->importable_data) - VB->import_data( ctx, - VB->importable_data, - VEC_NOT_WRITEABLE|VEC_BAD_STRIDE); + if (swsetup->Driver.Start) + swsetup->Driver.Start( ctx ); } -void +static void _swsetup_RenderFinish( GLcontext *ctx ) { + SScontext *swsetup = SWSETUP_CONTEXT(ctx); + _swrast_flush( ctx ); + + if (swsetup->Driver.Finish) + swsetup->Driver.Finish( ctx ); } void @@ -166,23 +129,29 @@ _swsetup_InvalidateState( GLcontext *ctx, GLuint new_state ) { SScontext *swsetup = SWSETUP_CONTEXT(ctx); swsetup->NewState |= new_state; - - if (new_state & _SWSETUP_NEW_INTERP) { - swsetup->RenderInterp = _swsetup_validate_interp; - swsetup->RenderCopyPV = _swsetup_validate_copypv; - } } -void -_swsetup_RenderInterp( GLcontext *ctx, GLfloat t, - GLuint dst, GLuint out, GLuint in, - GLboolean force_boundary ) -{ - SWSETUP_CONTEXT(ctx)->RenderInterp( ctx, t, dst, out, in, force_boundary ); -} void -_swsetup_RenderCopyPV( GLcontext *ctx, GLuint dst, GLuint src ) +_swsetup_Wakeup( GLcontext *ctx ) { - SWSETUP_CONTEXT(ctx)->RenderCopyPV( ctx, dst, src ); + TNLcontext *tnl = TNL_CONTEXT(ctx); + tnl->Driver.Render.Start = _swsetup_RenderStart; + tnl->Driver.Render.Finish = _swsetup_RenderFinish; + tnl->Driver.Render.PrimitiveNotify = _swsetup_RenderPrimitive; + /* interp */ + /* copypv */ + tnl->Driver.Render.ClippedPolygon = _tnl_RenderClippedPolygon; /* new */ + tnl->Driver.Render.ClippedLine = _tnl_RenderClippedLine; /* new */ + /* points */ + /* line */ + /* triangle */ + /* quad */ + tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts; + tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts; + tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple; + /* buildvertices */ + tnl->Driver.Render.Multipass = 0; + _tnl_need_projected_coords( ctx, GL_TRUE ); + _swsetup_InvalidateState( ctx, ~0 ); } |