various pipeline bugs
This commit is contained in:
@@ -948,6 +948,7 @@ fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win,GrScreenResolution_t res
|
||||
fxMesa->haveTwoTMUs=GL_FALSE;
|
||||
|
||||
if (getenv("FX_EMULATE_SINGLE_TMU")) {
|
||||
fprint(stderr, "stadnnadna;lskdjf");
|
||||
if (MESA_VERBOSE&VERBOSE_DRIVER)
|
||||
fprintf(stderr, "\n\nEmulating single tmu\n\n");
|
||||
fxMesa->haveTwoTMUs = GL_FALSE;
|
||||
|
@@ -513,6 +513,10 @@ static void fxDDUpdateDDPointers(GLcontext *ctx)
|
||||
if(new_state & INTERESTED) {
|
||||
fxDDChooseRenderState( ctx );
|
||||
fxMesa->RenderVBTables=fxDDChooseRenderVBTables(ctx);
|
||||
fxMesa->RenderVBClippedTab=fxMesa->RenderVBTables[0];
|
||||
fxMesa->RenderVBCulledTab=fxMesa->RenderVBTables[1];
|
||||
fxMesa->RenderVBRawTab=fxMesa->RenderVBTables[2];
|
||||
|
||||
ctx->Driver.RasterSetup=fxDDChooseSetupFunction(ctx);
|
||||
}
|
||||
|
||||
@@ -520,10 +524,6 @@ static void fxDDUpdateDDPointers(GLcontext *ctx)
|
||||
ctx->Driver.LineFunc=fxMesa->LineFunc;
|
||||
ctx->Driver.TriangleFunc=fxMesa->TriangleFunc;
|
||||
ctx->Driver.QuadFunc=fxMesa->QuadFunc;
|
||||
ctx->Driver.RenderVBClippedTab=fxMesa->RenderVBTables[0];
|
||||
ctx->Driver.RenderVBCulledTab=fxMesa->RenderVBTables[1];
|
||||
ctx->Driver.RenderVBRawTab=fxMesa->RenderVBTables[2];
|
||||
|
||||
}
|
||||
|
||||
ctx->Driver.AllocDepthBuffer=fxAllocDepthBuffer;
|
||||
|
@@ -420,6 +420,11 @@ struct tfxMesaContext {
|
||||
|
||||
render_func **RenderVBTables;
|
||||
|
||||
render_func *RenderVBClippedTab;
|
||||
render_func *RenderVBCulledTab;
|
||||
render_func *RenderVBRawTab;
|
||||
|
||||
|
||||
tfxStats stats;
|
||||
|
||||
void *state;
|
||||
@@ -570,7 +575,10 @@ extern void fxDDShadeModel(GLcontext *ctx, GLenum mode);
|
||||
extern void fxDDCullFace(GLcontext *ctx, GLenum mode);
|
||||
extern void fxDDFrontFace(GLcontext *ctx, GLenum mode);
|
||||
|
||||
extern void fxPrintRenderState( const char *msg, GLuint state );
|
||||
extern void fxPrintHintState( const char *msg, GLuint state );
|
||||
|
||||
extern void fxDDDoRenderVB( struct vertex_buffer *VB );
|
||||
|
||||
|
||||
#endif
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: context.c,v 1.1 1999/08/19 00:55:41 jtg Exp $ */
|
||||
/* $Id: context.c,v 1.2 1999/08/26 14:50:49 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -764,7 +764,7 @@ static void initialize_context( GLcontext *ctx )
|
||||
/* Extensions */
|
||||
gl_extensions_ctr( ctx );
|
||||
|
||||
ctx->AllowVertexCull = 0;
|
||||
ctx->AllowVertexCull = CLIP_CULLED_BIT;
|
||||
|
||||
/* Lighting group */
|
||||
for (i=0;i<MAX_LIGHTS;i++) {
|
||||
@@ -1919,6 +1919,8 @@ static void update_pixel_masking( GLcontext *ctx )
|
||||
|
||||
static void update_fog_mode( GLcontext *ctx )
|
||||
{
|
||||
int old_mode = ctx->FogMode;
|
||||
|
||||
if (ctx->Fog.Enabled) {
|
||||
if (ctx->Texture.Enabled)
|
||||
ctx->FogMode = FOG_FRAGMENT;
|
||||
@@ -1934,6 +1936,9 @@ static void update_fog_mode( GLcontext *ctx )
|
||||
else {
|
||||
ctx->FogMode = FOG_NONE;
|
||||
}
|
||||
|
||||
if (old_mode != ctx->FogMode)
|
||||
ctx->NewState |= NEW_FOG;
|
||||
}
|
||||
|
||||
|
||||
@@ -2121,7 +2126,9 @@ void gl_update_state( GLcontext *ctx )
|
||||
ctx->NeedNormals = (ctx->Light.Enabled || ctx->Texture.NeedNormals);
|
||||
}
|
||||
|
||||
if (ctx->NewState & (NEW_RASTER_OPS | NEW_LIGHTING)) {
|
||||
if (ctx->NewState & (NEW_RASTER_OPS | NEW_LIGHTING | NEW_FOG)) {
|
||||
|
||||
|
||||
if (ctx->NewState & NEW_RASTER_OPS) {
|
||||
update_pixel_logic(ctx);
|
||||
update_pixel_masking(ctx);
|
||||
@@ -2192,10 +2199,10 @@ void gl_update_state( GLcontext *ctx )
|
||||
}
|
||||
|
||||
if (ctx->NewState & NEW_LIGHTING) {
|
||||
ctx->TriangleCaps &= ~(DD_TRI_LIGHT_TWOSIDE|DD_EARLY_CULL);
|
||||
ctx->TriangleCaps &= ~(DD_TRI_LIGHT_TWOSIDE|DD_LIGHTING_CULL);
|
||||
if (ctx->Light.Enabled) {
|
||||
if (ctx->Light.Model.TwoSide)
|
||||
ctx->TriangleCaps |= (DD_TRI_LIGHT_TWOSIDE|DD_EARLY_CULL);
|
||||
ctx->TriangleCaps |= (DD_TRI_LIGHT_TWOSIDE|DD_LIGHTING_CULL);
|
||||
gl_update_lighting(ctx);
|
||||
}
|
||||
}
|
||||
@@ -2207,21 +2214,29 @@ void gl_update_state( GLcontext *ctx )
|
||||
if (ctx->NewState & NEW_POLYGON) {
|
||||
/* Setup CullBits bitmask */
|
||||
if (ctx->Polygon.CullFlag) {
|
||||
ctx->backface_sign = 1;
|
||||
switch(ctx->Polygon.CullFaceMode) {
|
||||
case GL_FRONT:
|
||||
ctx->Polygon.CullBits = 2;
|
||||
break;
|
||||
case GL_BACK:
|
||||
if(ctx->Polygon.FrontFace==GL_CCW)
|
||||
ctx->backface_sign = -1;
|
||||
ctx->Polygon.CullBits = 1;
|
||||
break;
|
||||
case GL_FRONT:
|
||||
if(ctx->Polygon.FrontFace!=GL_CCW)
|
||||
ctx->backface_sign = -1;
|
||||
ctx->Polygon.CullBits = 2;
|
||||
break;
|
||||
default:
|
||||
case GL_FRONT_AND_BACK:
|
||||
ctx->backface_sign = 0;
|
||||
ctx->Polygon.CullBits = 3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
else {
|
||||
ctx->Polygon.CullBits = 3;
|
||||
ctx->backface_sign = 0;
|
||||
}
|
||||
|
||||
/* Any Polygon offsets enabled? */
|
||||
ctx->TriangleCaps &= ~DD_TRI_OFFSET;
|
||||
@@ -2257,6 +2272,9 @@ void gl_update_state( GLcontext *ctx )
|
||||
ctx->IndirectTriangles = ctx->TriangleCaps & ~ctx->Driver.TriangleCaps;
|
||||
ctx->IndirectTriangles |= DD_SW_RASTERIZE;
|
||||
|
||||
if (MESA_VERBOSE&VERBOSE_CULL)
|
||||
gl_print_tri_caps("initial indirect tris", ctx->IndirectTriangles);
|
||||
|
||||
ctx->Driver.PointsFunc = NULL;
|
||||
ctx->Driver.LineFunc = NULL;
|
||||
ctx->Driver.TriangleFunc = NULL;
|
||||
@@ -2272,6 +2290,9 @@ void gl_update_state( GLcontext *ctx )
|
||||
*/
|
||||
ctx->Driver.UpdateState(ctx);
|
||||
|
||||
if (MESA_VERBOSE&VERBOSE_CULL)
|
||||
gl_print_tri_caps("indirect tris", ctx->IndirectTriangles);
|
||||
|
||||
/*
|
||||
* In case the driver didn't hook in an optimized point, line or
|
||||
* triangle function we'll now select "core/fallback" point, line
|
||||
@@ -2282,8 +2303,16 @@ void gl_update_state( GLcontext *ctx )
|
||||
gl_set_line_function(ctx);
|
||||
gl_set_triangle_function(ctx);
|
||||
gl_set_quad_function(ctx);
|
||||
|
||||
if ((ctx->IndirectTriangles &
|
||||
(DD_TRI_SW_RASTERIZE|DD_QUAD_SW_RASTERIZE|DD_TRI_CULL)) ==
|
||||
(DD_TRI_SW_RASTERIZE|DD_QUAD_SW_RASTERIZE|DD_TRI_CULL))
|
||||
ctx->IndirectTriangles &= ~DD_TRI_CULL;
|
||||
}
|
||||
|
||||
if (MESA_VERBOSE&VERBOSE_CULL)
|
||||
gl_print_tri_caps("indirect tris 2", ctx->IndirectTriangles);
|
||||
|
||||
gl_set_render_vb_function(ctx);
|
||||
}
|
||||
|
||||
@@ -2311,9 +2340,10 @@ void gl_update_state( GLcontext *ctx )
|
||||
/* Figure out whether we can light in object space or not. If we
|
||||
* can, find the current positions of the lights in object space
|
||||
*/
|
||||
if ((ctx->Enabled & (ENABLE_POINT_ATTEN | ENABLE_LIGHT |
|
||||
if ((ctx->Enabled & (ENABLE_POINT_ATTEN | ENABLE_LIGHT | ENABLE_FOG |
|
||||
ENABLE_TEXGEN0 | ENABLE_TEXGEN1)) &&
|
||||
(ctx->NewState & (NEW_LIGHTING |
|
||||
NEW_FOG |
|
||||
NEW_MODELVIEW |
|
||||
NEW_PROJECTION |
|
||||
NEW_TEXTURING |
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: dlist.c,v 1.1 1999/08/19 00:55:41 jtg Exp $ */
|
||||
/* $Id: dlist.c,v 1.2 1999/08/26 14:50:49 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -2454,6 +2454,10 @@ static void execute_list( GLcontext *ctx, GLuint list )
|
||||
case OPCODE_VERTEX_CASSETTE:
|
||||
if (ctx->NewState)
|
||||
gl_update_state(ctx);
|
||||
if (ctx->CompileCVAFlag) {
|
||||
ctx->CompileCVAFlag = 0;
|
||||
ctx->CVA.elt.pipeline_valid = 0;
|
||||
}
|
||||
if (!ctx->CVA.elt.pipeline_valid)
|
||||
gl_build_immediate_pipeline( ctx );
|
||||
gl_fixup_cassette( ctx, (struct immediate *) n[1].data );
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: enable.c,v 1.2 1999/08/19 13:24:27 brianp Exp $ */
|
||||
/* $Id: enable.c,v 1.3 1999/08/26 14:50:49 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -56,7 +56,7 @@ void gl_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
|
||||
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx, "gl_enable/disable" );
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
fprintf(stderr, "%s %s (%x)\n",
|
||||
fprintf(stderr, "%s %s (newstate is %x)\n",
|
||||
state ? "glEnable" : "glDisable",
|
||||
gl_lookup_enum_by_nr(cap),
|
||||
ctx->NewState);
|
||||
@@ -153,7 +153,7 @@ void gl_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
|
||||
if (ctx->Fog.Enabled!=state) {
|
||||
ctx->Fog.Enabled = state;
|
||||
ctx->Enabled ^= ENABLE_FOG;
|
||||
ctx->NewState |= NEW_FOG;
|
||||
ctx->NewState |= NEW_FOG|NEW_RASTER_OPS;
|
||||
}
|
||||
break;
|
||||
case GL_LIGHT0:
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: polygon.c,v 1.1 1999/08/19 00:55:41 jtg Exp $ */
|
||||
/* $Id: polygon.c,v 1.2 1999/08/26 14:50:49 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -119,9 +119,6 @@ void gl_PolygonMode( GLcontext *ctx, GLenum face, GLenum mode )
|
||||
ctx->Polygon.Unfilled = GL_TRUE;
|
||||
ctx->TriangleCaps |= DD_TRI_UNFILLED;
|
||||
}
|
||||
else {
|
||||
ctx->Polygon.Unfilled = GL_FALSE;
|
||||
}
|
||||
|
||||
ctx->NewState |= (NEW_POLYGON | NEW_RASTER_OPS);
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: varray.c,v 1.1 1999/08/19 00:55:41 jtg Exp $ */
|
||||
/* $Id: varray.c,v 1.2 1999/08/26 14:50:49 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -407,7 +407,7 @@ void gl_exec_array_elements( GLcontext *ctx, struct immediate *IM )
|
||||
if (translate & VERT_OBJ_ANY)
|
||||
(ctx->Array.VertexEltFunc)( IM->Obj,
|
||||
&ctx->Array.Vertex,
|
||||
flags, elts, VERT_ELT,
|
||||
flags, elts, (VERT_ELT|VERT_OBJ_ANY),
|
||||
start, count);
|
||||
|
||||
if (translate & VERT_NORM)
|
||||
@@ -830,11 +830,10 @@ static void FUNC( GLcontext *ctx, GLenum mode, \
|
||||
GLuint nr = MIN2( VB_MAX, count - j + VB_START ); \
|
||||
struct immediate *IM = ctx->input; \
|
||||
GLuint sf = IM->Flag[VB_START]; \
|
||||
GLuint flags = IM->ArrayOrFlags; \
|
||||
\
|
||||
for (i = VB_START ; i < nr ; i++) { \
|
||||
IM->Elt[i] = (GLuint) *indices++; \
|
||||
IM->Flag[i] = flags; \
|
||||
IM->Flag[i] = VERT_ELT; \
|
||||
} \
|
||||
\
|
||||
if (j == 0) IM->Flag[VB_START] |= sf; \
|
||||
@@ -1251,8 +1250,6 @@ void gl_update_client_state( GLcontext *ctx )
|
||||
/* Not really important any more:
|
||||
*/
|
||||
ctx->Array.Summary = ctx->Array.Flags & VERT_DATA;
|
||||
|
||||
ctx->input->ArrayOrFlags = (ctx->Array.Flags & VERT_OBJ_234) | VERT_ELT;
|
||||
ctx->input->ArrayAndFlags = ~ctx->Array.Flags;
|
||||
ctx->input->ArrayEltFlush = !(ctx->CompileCVAFlag);
|
||||
}
|
||||
|
@@ -32,6 +32,7 @@
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "common_x86asm.h"
|
||||
|
||||
int gl_x86_cpu_features = 0;
|
||||
@@ -43,7 +44,7 @@ void gl_init_all_x86_asm (void)
|
||||
gl_x86_cpu_features = gl_identify_x86_cpu_features ();
|
||||
|
||||
if (gl_x86_cpu_features & GL_CPU_GenuineIntel) {
|
||||
printf ("GenuineIntel cpu detected.\n");
|
||||
fprintf (stderr, "GenuineIntel cpu detected.\n");
|
||||
}
|
||||
gl_init_x86_asm_transforms ();
|
||||
|
||||
@@ -52,7 +53,7 @@ void gl_init_all_x86_asm (void)
|
||||
if (gl_x86_cpu_features & GL_CPU_MMX) {
|
||||
char *s = getenv( "MESA_NO_MMX" );
|
||||
if (s == NULL) {
|
||||
printf ("MMX cpu detected.\n");
|
||||
fprintf (stderr, "MMX cpu detected.\n");
|
||||
} else {
|
||||
gl_x86_cpu_features &= (!GL_CPU_MMX);
|
||||
}
|
||||
@@ -64,7 +65,7 @@ void gl_init_all_x86_asm (void)
|
||||
if (gl_x86_cpu_features & GL_CPU_3Dnow) {
|
||||
char *s = getenv( "MESA_NO_3DNOW" );
|
||||
if (s == NULL) {
|
||||
printf ("3Dnow cpu detected.\n");
|
||||
fprintf (stderr, "3Dnow cpu detected.\n");
|
||||
gl_init_3dnow_asm_transforms ();
|
||||
} else {
|
||||
gl_x86_cpu_features &= (!GL_CPU_3Dnow);
|
||||
|
Reference in New Issue
Block a user