Add a 'RenderPrimitive' callback to t_vb_render.c. Helps out drivers
authorKeith Whitwell <keith@tungstengraphics.com>
Mon, 8 Jan 2001 04:09:41 +0000 (04:09 +0000)
committerKeith Whitwell <keith@tungstengraphics.com>
Mon, 8 Jan 2001 04:09:41 +0000 (04:09 +0000)
that used to require a 'ReducedPrimitiveChange' callback.

Various compilation fixes for XFree86.

Reverted to the older version of glcore.h used internally in XFree86, and
moved it to 'Mesa/include/GL/internal/glcore.h', for compatibility with
XFree86.

17 files changed:
src/mesa/main/context.c
src/mesa/main/dd.h
src/mesa/main/dispatch.c
src/mesa/main/feedback.c
src/mesa/main/glheader.h
src/mesa/main/imports.c
src/mesa/main/lines.c
src/mesa/main/macros.h
src/mesa/main/mtypes.h
src/mesa/math/m_xform.c
src/mesa/math/mathmod.h
src/mesa/swrast_setup/ss_context.c
src/mesa/swrast_setup/swrast_setup.h
src/mesa/tnl/t_array_import.c
src/mesa/tnl/t_vb_light.c
src/mesa/tnl/t_vb_render.c
src/mesa/tnl/t_vb_rendertmp.h

index 8624cb62e79aebe3dd2c1b8fbef45adaf5ba829b..4b951c89f710543e045b95705ebc354145a57a48 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: context.c,v 1.115 2001/01/05 05:31:42 keithw Exp $ */
+/* $Id: context.c,v 1.116 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -131,7 +131,8 @@ __glCoreCreateContext(__GLimports *imports, __GLcontextModes *modes)
                             modes->accumAlphaBits,
                             0);
 
-    _mesa_initialize_context(ctx, &ctx->Visual, NULL, imports->wscx, GL_FALSE);
+    /* KW: was imports->wscx */
+    _mesa_initialize_context(ctx, &ctx->Visual, NULL, imports->other, GL_FALSE);
 
     ctx->exports.destroyContext = _mesa_DestroyContext;
 
index 9c600783dc0f8ba860119baeff06eddf2eca00b3..d3cd4f8a6ec0a753cbfbc3d415fe20a39e6e4763 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: dd.h,v 1.45 2001/01/05 02:26:48 keithw Exp $ */
+/* $Id: dd.h,v 1.46 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -746,6 +746,7 @@ struct dd_function_table {
 
 
    void (*RenderStart)( GLcontext *ctx );
+   void (*RenderPrimitive)( GLcontext *ctx, GLenum mode );
    void (*RenderFinish)( GLcontext *ctx );
    /* Wrap around all rendering functions.  Suitable for
     * grabbing/releasing hardware locks.
@@ -895,6 +896,7 @@ struct dd_function_table {
    void (*LogicOpcode)(GLcontext *ctx, GLenum opcode);
    void (*PolygonMode)(GLcontext *ctx, GLenum face, GLenum mode);
    void (*PolygonStipple)(GLcontext *ctx, const GLubyte *mask );
+   void (*RenderMode)(GLcontext *ctx, GLenum mode );
    void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
    void (*ShadeModel)(GLcontext *ctx, GLenum mode);
    void (*StencilFunc)(GLcontext *ctx, GLenum func, GLint ref, GLuint mask);
index e5de63c0ec0e9f090b2e2ecaf884452736496ffe..3c19e562e5013844e8e25aaf99862442cbf1ff1e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: dispatch.c,v 1.18 2001/01/02 10:07:34 joukj Exp $ */
+/* $Id: dispatch.c,v 1.19 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -98,8 +98,6 @@ trace(void)
 
 #else
 
-#ifdef THREADS
-
 #define DISPATCH(FUNC, ARGS, MESSAGE)                                  \
    const struct _glapi_table *dispatch;                                        \
    dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\
@@ -110,19 +108,6 @@ trace(void)
    dispatch = _glapi_Dispatch ? _glapi_Dispatch : _glapi_get_dispatch();\
    return (dispatch->FUNC) ARGS
 
-#else
-
-
-#define DISPATCH(FUNC, ARGS, MESSAGE) \
-__asm__  ("jmp    *(%%eax) ;" : : "a" (&(_glapi_Dispatch->FUNC)) )
-
-#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)                           \
-   const struct _glapi_table *dispatch;                                        \
-   dispatch = _glapi_Dispatch;\
-   return (dispatch->FUNC) ARGS
-
-#endif
-
 #endif
 
 
index 4a1ebe0b97e0c609f81382d46c1cebcbd38a628b..4d6941a57668d5daf9bdb3b9fcb4078df774ea2e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: feedback.c,v 1.18 2000/12/26 05:09:28 keithw Exp $ */
+/* $Id: feedback.c,v 1.19 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -406,6 +406,9 @@ _mesa_RenderMode( GLenum mode )
    }
 
    ctx->RenderMode = mode;
+   if (ctx->Driver.RenderMode) 
+      ctx->Driver.RenderMode( ctx, mode );
+
    return result;
 }
 
index f98e9885bb978c58ee3537ca745d4dfa6833c91e..bd8f39dba2c6df97afad2310a08063ed480053e4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: glheader.h,v 1.15 2000/09/26 20:53:53 brianp Exp $ */
+/* $Id: glheader.h,v 1.16 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -177,7 +177,7 @@ typedef struct tagPIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESC
 #ifndef CAPI
 #define CAPI
 #endif
-#include "glcore.h"
+#include <GL/internal/glcore.h>
 
 
 
index bb3c49376c8c592bc4cddb437f11eeb80ed74b07..93fb906f35f15d1ed6fed387fecb7d32f657abfb 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: imports.c,v 1.3 2000/11/22 07:32:17 joukj Exp $ */
+/* $Id: imports.c,v 1.4 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -76,6 +76,11 @@ _mesa_warning(__GLcontext *gc, char *str)
 #ifdef DEBUG
    debug = GL_TRUE;
 #else
+/* Whacko XFree86 macro:
+ */
+#ifdef getenv
+#undef getenv                  
+#endif
    if (gc->imports.getenv(gc, "MESA_DEBUG")) {
       debug = GL_TRUE;
    }
@@ -99,7 +104,7 @@ static char *
 _mesa_getenv(__GLcontext *gc, const char *var)
 {
    (void) gc;
-   return getenv(var);
+   return gc->imports.getenv(gc, var);
 }
 
 static int
@@ -153,12 +158,12 @@ _mesa_InitDefaultImports(__GLimports *imports, void *driverCtx, void *other)
    imports->warning = _mesa_warning;
    imports->fatal = _mesa_fatal;
    imports->getenv = _mesa_getenv;
-   imports->atoi = _mesa_atoi;
+/*     imports->atoi = _mesa_atoi; */
    imports->sprintf = _mesa_sprintf;
    imports->fopen = _mesa_fopen;
    imports->fclose = _mesa_fclose;
    imports->fprintf = _mesa_fprintf;
    imports->getDrawablePrivate = _mesa_GetDrawablePrivate;
-   imports->wscx = driverCtx;
-   imports->other = other;
+/*     imports->wscx = driverCtx; */
+   imports->other = driverCtx;
 }
index c54f108b237a438909dd280a65d274399b125094..730e3f572f91f2de2e666eb12b0d67b34e418207 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: lines.c,v 1.24 2000/12/26 05:09:29 keithw Exp $ */
+/* $Id: lines.c,v 1.25 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -57,6 +57,10 @@ _mesa_LineWidth( GLfloat width )
 
    FLUSH_VERTICES(ctx, _NEW_LINE);
    ctx->Line.Width = width;
+   ctx->Line._Width = CLAMP(width, 
+                           ctx->Const.MinLineWidth,
+                           ctx->Const.MaxLineWidth);
+
 
    if (width != 1.0) 
       ctx->_TriangleCaps |= DD_LINE_WIDTH;
index a77e2fc65b251bd9ea02f4dac4cf9fa8702ba3cb..a8694a96c3995d3e75874f05f129769aafaf773c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: macros.h,v 1.16 2000/12/26 05:09:29 keithw Exp $ */
+/* $Id: macros.h,v 1.17 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -73,7 +73,7 @@
 #define STRIDE_F(p, i)  (p = (GLfloat *)((GLubyte *)p + i))
 #define STRIDE_UI(p, i)  (p = (GLuint *)((GLubyte *)p + i))
 #define STRIDE_4UB(p, i)  (p = (GLubyte (*)[4])((GLubyte *)p + i))
-#define STRIDE_T(p, t, i)  (p = (t *)((GLubyte *)p + i))
+#define STRIDE_T(p, t, i)  (p = (t)((GLubyte *)p + i))
 
 
 #define ZERO_2V( DST ) (DST)[0] = (DST)[1] = 0
index ee46c6d88896fdde559777a853060dc58250b6b7..4cb966f7d2fffd8a90dd1dfabf718408ea42d926 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mtypes.h,v 1.11 2001/01/06 22:46:13 gareth Exp $ */
+/* $Id: mtypes.h,v 1.12 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -516,6 +516,7 @@ struct gl_line_attrib {
    GLushort StipplePattern;    /* Stipple pattern */
    GLint StippleFactor;                /* Stipple repeat factor */
    GLfloat Width;              /* Line width */
+   GLfloat _Width;             /* Clamped Line width */
 };
 
 
index 72aec3a06ad57c9b73c9d8828ab6103d2bc26f4a..77acce922e4758adf647954dac5dd2ea0aa0b309 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: m_xform.c,v 1.5 2000/12/26 05:09:31 keithw Exp $ */
+/* $Id: m_xform.c,v 1.6 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -45,6 +45,7 @@
 #include "m_matrix.h"
 #include "m_translate.h"
 #include "m_xform.h"
+#include "mathmod.h"
 
 
 #ifdef DEBUG
index 35091a7aae80fcdcd06729cefc474922b385b3d1..f27427d81b4bb87eb854a020ce9355f028264477 100644 (file)
@@ -1,8 +1,6 @@
 #ifndef _MESA_MATH_H_
 #define _MESA_MATH_H_
 
-#include <math.h>
-
 extern void _math_init( void );
 
 #endif
index 408438ca0b7546a7e82ef054fd1a296d3217bcfb..de3f36288a756c15f1cc46e0531a583367dfa201 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: ss_context.c,v 1.6 2001/01/05 02:26:49 keithw Exp $ */
+/* $Id: ss_context.c,v 1.7 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -211,3 +211,9 @@ _swsetup_DestroyContext( GLcontext *ctx )
 }
 
 
+void
+_swsetup_RenderPrimNoop( GLcontext *ctx, GLenum mode )
+{
+   (void) ctx;
+   (void) mode;
+}
index fd9c94d4e5b9a9ac9155fa5483c79d385cabc1bc..70b1113c909cce35b0d69fbb2bb6361ff5b1fe50 100644 (file)
@@ -58,5 +58,7 @@ _swsetup_Line( GLcontext *ctx, GLuint v0, GLuint v1 );
 extern void 
 _swsetup_Points( GLcontext *ctx, GLuint first, GLuint last );
 
+extern void
+_swsetup_RenderPrimNoop( GLcontext *ctx, GLenum mode );
 
 #endif
index 008cc23c64e1fdb234ceaa98a75d2b2612f3b211..087852febef336344498b21a13f73fbe2e609359 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_array_import.c,v 1.4 2001/01/05 02:26:49 keithw Exp $ */
+/* $Id: t_array_import.c,v 1.5 2001/01/08 04:09:41 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -267,31 +267,37 @@ static void _tnl_upgrade_client_data( GLcontext *ctx,
    if ((required & VERT_OBJ) && (VB->ObjPtr->flags & flags)) {
       ASSERT(VB->ObjPtr == &inputs->Obj);
       _tnl_import_vertex( ctx, writeable, stride );
+      VB->importable_data &= ~(VERT_OBJ|VERT_CLIP);
    }
 
    if ((required & VERT_NORM) && (VB->NormalPtr->flags & flags)) {
       ASSERT(VB->NormalPtr == &inputs->Normal);
       _tnl_import_normal( ctx, writeable, stride );
+      VB->importable_data &= ~VERT_NORM;
    }
 
    if ((required & VERT_RGBA) && (VB->ColorPtr[0]->flags & flags)) {
       ASSERT(VB->ColorPtr[0] == &inputs->Color);
       _tnl_import_color( ctx, writeable, stride );
+      VB->importable_data &= ~VERT_RGBA;
    }
 
    if ((required & VERT_SPEC_RGB) && (VB->SecondaryColorPtr[0]->flags&flags)) {
       ASSERT(VB->SecondaryColorPtr[0] == &inputs->SecondaryColor);
       _tnl_import_secondarycolor( ctx, writeable, stride );
+      VB->importable_data &= ~VERT_SPEC_RGB;
    }
 
    if ((required & VERT_FOG_COORD) && (VB->FogCoordPtr->flags & flags)) {
       ASSERT(VB->FogCoordPtr == &inputs->FogCoord);
       _tnl_import_fogcoord( ctx, writeable, stride );
+      VB->importable_data &= ~VERT_FOG_COORD;
    }
 
    if ((required & VERT_INDEX) && (VB->IndexPtr[0]->flags & flags)) {
       ASSERT(VB->IndexPtr[0] == &inputs->Index);
       _tnl_import_index( ctx, writeable, stride );
+      VB->importable_data &= ~VERT_INDEX;
    }
 
    if (required & VERT_TEX_ANY)
@@ -299,9 +305,9 @@ static void _tnl_upgrade_client_data( GLcontext *ctx,
         if ((required & VERT_TEX(i)) && (VB->TexCoordPtr[i]->flags & flags)) {
            ASSERT(VB->TexCoordPtr[i] == &inputs->TexCoord[i]);
            _tnl_import_texcoord( ctx, i, writeable, stride );
+           VB->importable_data &= ~VERT_TEX(i);
         }
    
-   VB->importable_data &= ~required;
 }
 
 
index 043eb7302fcb98bb4e79f41b7483d4811a04c419..48c8e093137aba55b07f471def813a0b32704bbd 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_vb_light.c,v 1.2 2000/12/27 19:57:37 keithw Exp $ */
+/* $Id: t_vb_light.c,v 1.3 2001/01/08 04:09:42 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -246,6 +246,10 @@ static void check_lighting( GLcontext *ctx, struct gl_pipeline_stage *stage )
         stage->inputs |= VERT_EYE; /* effectively, even when lighting in obj */
       if (ctx->Light.ColorMaterialEnabled) 
         stage->inputs |= VERT_RGBA;
+
+      stage->outputs = VERT_RGBA;
+      if (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
+        stage->outputs |= VERT_SPEC_RGB;
    }
 }
 
@@ -273,7 +277,7 @@ const struct gl_pipeline_stage _tnl_lighting_stage =
    _NEW_LIGHT|_NEW_MODELVIEW,  /* recalc -- modelview dependency
                                 * otherwise not captured by inputs
                                 * (which may be VERT_OBJ) */
-   0,0,VERT_RGBA,              /* active, inputs, outputs */
+   0,0,0,                      /* active, inputs, outputs */
    0,0,                                /* changed_inputs, private_data */
    dtr,                                /* destroy */
    check_lighting,             /* check */
index 2616d294d3b902225cc0a98e5b81c81b7ad39c68..7279dc17ba2d7ca6709dc059ed668c11e309d7dd 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_vb_render.c,v 1.6 2001/01/05 02:26:49 keithw Exp $ */
+/* $Id: t_vb_render.c,v 1.7 2001/01/08 04:09:42 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -487,6 +487,7 @@ do {                                                        \
     (void) elt; (void) mask; (void) sz;
 
 #define TAG(x) clip_##x##_verts
+#define INIT(x) ctx->Driver.RenderPrimitive( ctx, x )
 #define RESET_STIPPLE ctx->Driver.ResetLineStipple( ctx )
 #define RESET_OCCLUSION ctx->OcclusionResult = GL_TRUE;
 #define PRESERVE_VB_DEFS
index 9c9271ff226b90952b58392aa6452bbca0a9ae9e..194dd85190cf22ddb0bf1cc74d4a0a0dd2da4040 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_vb_rendertmp.h,v 1.4 2001/01/05 02:26:49 keithw Exp $ */
+/* $Id: t_vb_rendertmp.h,v 1.5 2001/01/08 04:09:42 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -107,7 +107,7 @@ static void TAG(render_line_strip)( GLcontext *ctx,
    (void) flags;
 
    RESET_OCCLUSION;
-   INIT(GL_LINES);
+   INIT(GL_LINE_STRIP);
 
    for (j=start+1; j<count; j++ ) 
       RENDER_LINE( ELT(j-1), ELT(j) );
@@ -130,7 +130,7 @@ static void TAG(render_line_loop)( GLcontext *ctx,
    (void) flags;
 
    RESET_OCCLUSION;
-   INIT(GL_LINES);
+   INIT(GL_LINE_LOOP);
 
    if (start+1 < count) {
       if (TEST_PRIM_BEGIN(flags)) {
@@ -160,7 +160,7 @@ static void TAG(render_triangles)( GLcontext *ctx,
    LOCAL_VARS;
    (void) flags;
 
-   INIT(GL_POLYGON);
+   INIT(GL_TRIANGLES);
    if (NEED_EDGEFLAG_SETUP) {
       for (j=start+2; j<count; j+=3) {
         /* Leave the edgeflags as supplied by the user.
@@ -190,7 +190,7 @@ static void TAG(render_tri_strip)( GLcontext *ctx,
    if (TEST_PRIM_PARITY(flags))
       parity = 1;
    
-   INIT(GL_POLYGON);
+   INIT(GL_TRIANGLE_STRIP);
    if (NEED_EDGEFLAG_SETUP) {
       for (j=start+2;j<count;j++,parity^=1) {
         GLuint ej2 = ELT(j-2+parity);
@@ -226,7 +226,7 @@ static void TAG(render_tri_fan)( GLcontext *ctx,
    LOCAL_VARS;
    (void) flags;
 
-   INIT(GL_POLYGON);
+   INIT(GL_TRIANGLE_FAN);
    if (NEED_EDGEFLAG_SETUP) {
       for (j=start+2;j<count;j++) {
         /* For trifans, all edges are boundary.
@@ -334,7 +334,7 @@ static void TAG(render_quads)( GLcontext *ctx,
    LOCAL_VARS;
    (void) flags;
 
-   INIT(GL_POLYGON);
+   INIT(GL_QUADS);
    if (NEED_EDGEFLAG_SETUP) {
       for (j=start+3; j<count; j+=4) {
         /* Use user-specified edgeflags for quads.
@@ -359,7 +359,7 @@ static void TAG(render_quad_strip)( GLcontext *ctx,
    LOCAL_VARS;
    (void) flags;
 
-   INIT(GL_POLYGON);
+   INIT(GL_QUAD_STRIP);
    if (NEED_EDGEFLAG_SETUP) {
       for (j=start+3;j<count;j+=2) {
         /* All edges are boundary.  Set edgeflags to 1, draw the