summaryrefslogtreecommitdiffstats
path: root/src/mesa/swrast_setup/ss_context.c
diff options
context:
space:
mode:
authorKeith Whitwell <[email protected]>2001-07-12 22:09:21 +0000
committerKeith Whitwell <[email protected]>2001-07-12 22:09:21 +0000
commit1182ffeec39bf419928ba862c225e80a439fee7a (patch)
treeaf9e3f9019e3c59cb73d770eb60e94c5c77bdd25 /src/mesa/swrast_setup/ss_context.c
parentfae7b778b81b686ef419f971064b5fe12fb4ead3 (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.c103
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 );
}