aboutsummaryrefslogtreecommitdiffstats
path: root/src/mesa/swrast_setup/ss_context.c
diff options
context:
space:
mode:
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 );
}