summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dos/dmesa.c4
-rw-r--r--src/mesa/drivers/x11/xm_dd.c11
-rw-r--r--src/mesa/swrast/s_context.c12
-rw-r--r--src/mesa/swrast/s_context.h27
4 files changed, 33 insertions, 21 deletions
diff --git a/src/mesa/drivers/dos/dmesa.c b/src/mesa/drivers/dos/dmesa.c
index 01667150e2..719f4ec54d 100644
--- a/src/mesa/drivers/dos/dmesa.c
+++ b/src/mesa/drivers/dos/dmesa.c
@@ -868,8 +868,8 @@ dmesa_register_swrast_functions (GLcontext *ctx)
swrast->choose_line = dmesa_choose_line;
swrast->choose_triangle = dmesa_choose_tri;
- swrast->invalidate_line |= DMESA_NEW_LINE;
- swrast->invalidate_triangle |= DMESA_NEW_TRIANGLE;
+ swrast->InvalidateLineMask |= DMESA_NEW_LINE;
+ swrast->InvalidateTriangleMask |= DMESA_NEW_TRIANGLE;
}
diff --git a/src/mesa/drivers/x11/xm_dd.c b/src/mesa/drivers/x11/xm_dd.c
index e6f90d35bb..7a519335cc 100644
--- a/src/mesa/drivers/x11/xm_dd.c
+++ b/src/mesa/drivers/x11/xm_dd.c
@@ -1293,8 +1293,10 @@ xmesa_init_driver_functions( XMesaVisual xmvisual,
_SWRAST_NEW_RASTERMASK)
-/* Extend the software rasterizer with our line/point/triangle
+/**
+ * Extend the software rasterizer with our line/point/triangle
* functions.
+ * Called during context creation only.
*/
void xmesa_register_swrast_functions( GLcontext *ctx )
{
@@ -1304,7 +1306,8 @@ void xmesa_register_swrast_functions( GLcontext *ctx )
swrast->choose_line = xmesa_choose_line;
swrast->choose_triangle = xmesa_choose_triangle;
- swrast->invalidate_point |= XMESA_NEW_POINT;
- swrast->invalidate_line |= XMESA_NEW_LINE;
- swrast->invalidate_triangle |= XMESA_NEW_TRIANGLE;
+ /* XXX these lines have no net effect. Remove??? */
+ swrast->InvalidatePointMask |= XMESA_NEW_POINT;
+ swrast->InvalidateLineMask |= XMESA_NEW_LINE;
+ swrast->InvalidateTriangleMask |= XMESA_NEW_TRIANGLE;
}
diff --git a/src/mesa/swrast/s_context.c b/src/mesa/swrast/s_context.c
index 9d283b0589..dc5b92dbf8 100644
--- a/src/mesa/swrast/s_context.c
+++ b/src/mesa/swrast/s_context.c
@@ -392,13 +392,13 @@ _swrast_invalidate_state( GLcontext *ctx, GLbitfield new_state )
new_state = ~0;
}
- if (new_state & swrast->invalidate_triangle)
+ if (new_state & swrast->InvalidateTriangleMask)
swrast->Triangle = _swrast_validate_triangle;
- if (new_state & swrast->invalidate_line)
+ if (new_state & swrast->InvalidateLineMask)
swrast->Line = _swrast_validate_line;
- if (new_state & swrast->invalidate_point)
+ if (new_state & swrast->InvalidatePointMask)
swrast->Point = _swrast_validate_point;
if (new_state & _SWRAST_NEW_BLEND_FUNC)
@@ -570,9 +570,9 @@ _swrast_CreateContext( GLcontext *ctx )
swrast->choose_line = _swrast_choose_line;
swrast->choose_triangle = _swrast_choose_triangle;
- swrast->invalidate_point = _SWRAST_NEW_POINT;
- swrast->invalidate_line = _SWRAST_NEW_LINE;
- swrast->invalidate_triangle = _SWRAST_NEW_TRIANGLE;
+ swrast->InvalidatePointMask = _SWRAST_NEW_POINT;
+ swrast->InvalidateLineMask = _SWRAST_NEW_LINE;
+ swrast->InvalidateTriangleMask = _SWRAST_NEW_TRIANGLE;
swrast->Point = _swrast_validate_point;
swrast->Line = _swrast_validate_line;
diff --git a/src/mesa/swrast/s_context.h b/src/mesa/swrast/s_context.h
index 5cfe7627a5..c1c01df8f5 100644
--- a/src/mesa/swrast/s_context.h
+++ b/src/mesa/swrast/s_context.h
@@ -299,23 +299,32 @@ typedef struct
GLuint StateChanges;
GLenum Primitive; /* current primitive being drawn (ala glBegin) */
- /** Mechanism to allow driver (like X11) to register further
- * software rasterization routines.
+ void (*InvalidateState)( GLcontext *ctx, GLbitfield new_state );
+
+ /**
+ * When the NewState mask intersects these masks, we invalidate the
+ * Point/Line/Triangle function pointers below.
+ */
+ /*@{*/
+ GLbitfield InvalidatePointMask;
+ GLbitfield InvalidateLineMask;
+ GLbitfield InvalidateTriangleMask;
+ /*@}*/
+
+ /**
+ * Device drivers plug in functions for these callbacks.
+ * Will be called when the GL state change mask intersects the above masks.
*/
/*@{*/
void (*choose_point)( GLcontext * );
void (*choose_line)( GLcontext * );
void (*choose_triangle)( GLcontext * );
-
- GLbitfield invalidate_point;
- GLbitfield invalidate_line;
- GLbitfield invalidate_triangle;
/*@}*/
- /** Function pointers for dispatch behind public entrypoints. */
+ /**
+ * Current point, line and triangle drawing functions.
+ */
/*@{*/
- void (*InvalidateState)( GLcontext *ctx, GLbitfield new_state );
-
swrast_point_func Point;
swrast_line_func Line;
swrast_tri_func Triangle;