diff options
author | Keith Whitwell <[email protected]> | 2001-07-12 22:09:21 +0000 |
---|---|---|
committer | Keith Whitwell <[email protected]> | 2001-07-12 22:09:21 +0000 |
commit | 1182ffeec39bf419928ba862c225e80a439fee7a (patch) | |
tree | af9e3f9019e3c59cb73d770eb60e94c5c77bdd25 /src/mesa/swrast_setup/ss_context.c | |
parent | fae7b778b81b686ef419f971064b5fe12fb4ead3 (diff) |
Rename some of the tnl->Driver.* functions to tnl->Driver.Render.*, to make it
clear that these are owned by t_vb_render.c.
Make swrast_setup opaque - it now hooks itself directly into
tnl->Driver.Render.*. Add a _swsetup_Wakeup() call that does this.
Update X11 (tested), osmesa and FX drivers for this change.
FX compiles but is probably broken as the changes there are large. It was the
only remaining driver that used the internal _swsetup_ functions for
interp and copy_pv. This usage has been replaced with code from the DRI
tdfx driver.
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 def9e4f43c8..2e92342e079 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 ); } |