summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland Scheidegger <rscheidegger@gmx.ch>2006-09-08 00:54:55 +0000
committerRoland Scheidegger <rscheidegger@gmx.ch>2006-09-08 00:54:55 +0000
commita5e73e68878ebed7347532285019befc8c7b1106 (patch)
treecb0c2bf7d1bcba155c98d6aca6bc8741e76aa092
parent3e05902d304e71493d05edef4c31c6ed1a22bf17 (diff)
cause a vtxfmt fallback directly when hitting NewList for radeon and r200 drivers, otherwise we'll mix up tcl and vtxfmt path for some reason. This fixes a warzone2100 asssertion failure.
-rw-r--r--src/mesa/drivers/dri/r200/r200_vtxfmt.c10
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_vtxfmt.c10
2 files changed, 20 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/r200/r200_vtxfmt.c b/src/mesa/drivers/dri/r200/r200_vtxfmt.c
index 8480ce73e8..d73fbbafd5 100644
--- a/src/mesa/drivers/dri/r200/r200_vtxfmt.c
+++ b/src/mesa/drivers/dri/r200/r200_vtxfmt.c
@@ -57,6 +57,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "tnl/tnl.h"
#include "tnl/t_context.h"
#include "tnl/t_array_api.h"
+#include "tnl/t_save_api.h"
#include "dispatch.h"
@@ -106,6 +107,12 @@ static void count_funcs( r200ContextPtr rmesa )
count_func( "FogCoordfvEXT", &rmesa->vb.dfn_cache.FogCoordfvEXT );*/
}
+static void r200NewList( GLcontext *ctx, GLuint list, GLenum mode )
+{
+ VFMT_FALLBACK( __FUNCTION__ );
+ _tnl_NewList( ctx, list, mode );
+ return;
+}
void r200_copy_to_current( GLcontext *ctx )
{
@@ -395,6 +402,7 @@ static void VFMT_FALLBACK_OUTSIDE_BEGIN_END( const char *caller )
_tnl_wakeup_exec( ctx );
ctx->Driver.FlushVertices = r200FlushVertices;
+ ctx->Driver.NewList = _tnl_NewList;
assert( rmesa->dma.flush == 0 );
rmesa->vb.fell_back = GL_TRUE;
@@ -853,6 +861,7 @@ static void r200VtxfmtValidate( GLcontext *ctx )
_mesa_install_exec_vtxfmt( ctx, &rmesa->vb.vtxfmt );
ctx->Driver.FlushVertices = r200VtxFmtFlushVertices;
+ ctx->Driver.NewList = r200NewList;
rmesa->vb.installed = GL_TRUE;
}
else if (R200_DEBUG & DEBUG_VFMT)
@@ -867,6 +876,7 @@ static void r200VtxfmtValidate( GLcontext *ctx )
rmesa->dma.flush( rmesa );
_tnl_wakeup_exec( ctx );
ctx->Driver.FlushVertices = r200FlushVertices;
+ ctx->Driver.NewList =_tnl_NewList;
rmesa->vb.installed = GL_FALSE;
}
}
diff --git a/src/mesa/drivers/dri/radeon/radeon_vtxfmt.c b/src/mesa/drivers/dri/radeon/radeon_vtxfmt.c
index e9a76dc92e..a5a9eb144b 100644
--- a/src/mesa/drivers/dri/radeon/radeon_vtxfmt.c
+++ b/src/mesa/drivers/dri/radeon/radeon_vtxfmt.c
@@ -48,6 +48,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "tnl/tnl.h"
#include "tnl/t_context.h"
#include "tnl/t_array_api.h"
+#include "tnl/t_save_api.h"
#include "radeon_context.h"
#include "radeon_state.h"
@@ -343,6 +344,7 @@ static void VFMT_FALLBACK_OUTSIDE_BEGIN_END( const char *caller )
_tnl_wakeup_exec( ctx );
ctx->Driver.FlushVertices = radeonFlushVertices;
+ ctx->Driver.NewList =_tnl_NewList;
assert( rmesa->dma.flush == 0 );
rmesa->vb.fell_back = GL_TRUE;
@@ -464,6 +466,12 @@ static void VFMT_FALLBACK( const char *caller )
}
}
+static void radeonNewList( GLcontext *ctx, GLuint list, GLenum mode )
+{
+ VFMT_FALLBACK( __FUNCTION__ );
+ _tnl_NewList( ctx, list, mode );
+ return;
+}
static void wrap_buffer( void )
@@ -717,6 +725,7 @@ static void radeonVtxfmtValidate( GLcontext *ctx )
_mesa_install_exec_vtxfmt( ctx, &rmesa->vb.vtxfmt );
ctx->Driver.FlushVertices = radeonVtxfmtFlushVertices;
+ ctx->Driver.NewList = radeonNewList;
rmesa->vb.installed = GL_TRUE;
}
else if (RADEON_DEBUG & DEBUG_VFMT)
@@ -731,6 +740,7 @@ static void radeonVtxfmtValidate( GLcontext *ctx )
rmesa->dma.flush( rmesa );
_tnl_wakeup_exec( ctx );
ctx->Driver.FlushVertices = radeonFlushVertices;
+ ctx->Driver.NewList =_tnl_NewList;
rmesa->vb.installed = GL_FALSE;
}
}