From 677d1d07c41050e7474f44c592641b14ffd73e8c Mon Sep 17 00:00:00 2001 From: Felix Kuehling Date: Thu, 20 Jan 2005 15:18:10 +0000 Subject: * Added options for disabling the fast path (render stage) and vertex DMA * Fixed disabling of the render stage * Added debug output for per-primitive fallbacks * Bumped driver date --- src/mesa/drivers/dri/savage/savage_xmesa.c | 26 ++++++++++++++++++++++---- src/mesa/drivers/dri/savage/savagecontext.h | 2 ++ src/mesa/drivers/dri/savage/savagedd.c | 2 +- src/mesa/drivers/dri/savage/savagerender.c | 1 + src/mesa/drivers/dri/savage/savagetris.c | 26 ++++++++++++++++---------- 5 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/mesa/drivers/dri/savage/savage_xmesa.c b/src/mesa/drivers/dri/savage/savage_xmesa.c index 742c6e89a9..34f334817c 100644 --- a/src/mesa/drivers/dri/savage/savage_xmesa.c +++ b/src/mesa/drivers/dri/savage/savage_xmesa.c @@ -57,6 +57,19 @@ #include "xmlpool.h" +/* Driver-specific options + */ +#define SAVAGE_ENABLE_VDMA(def) \ +DRI_CONF_OPT_BEGIN(enable_vdma,bool,def) \ + DRI_CONF_DESC(en,"Use DMA for vertex transfers") \ + DRI_CONF_DESC(de,"Benutze DMA für Vertextransfers") \ +DRI_CONF_OPT_END +#define SAVAGE_ENABLE_FASTPATH(def) \ +DRI_CONF_OPT_BEGIN(enable_fastpath,bool,def) \ + DRI_CONF_DESC(en,"Use fast path for unclipped primitives") \ + DRI_CONF_DESC(de,"Schneller Codepfad für ungeschnittene Polygone") \ +DRI_CONF_OPT_END + /* Configuration */ PUBLIC const char __driConfigOptions[] = @@ -68,12 +81,14 @@ DRI_CONF_BEGIN DRI_CONF_SECTION_END DRI_CONF_SECTION_PERFORMANCE DRI_CONF_MAX_TEXTURE_UNITS(2,1,2) + SAVAGE_ENABLE_VDMA(true) + SAVAGE_ENABLE_FASTPATH(true) DRI_CONF_SECTION_END DRI_CONF_SECTION_DEBUG DRI_CONF_NO_RAST(false) DRI_CONF_SECTION_END DRI_CONF_END; -static const GLuint __driNConfigOptions = 5; +static const GLuint __driNConfigOptions = 7; #ifdef USE_NEW_INTERFACE static PFNGLXCREATECONTEXTMODES create_context_modes = NULL; @@ -470,13 +485,15 @@ savageCreateContext( const __GLcontextModes *mesaVis, /* DRM versions before 2.1.3 would only render triangle lists. ELTS * support was added in 2.2.0. */ if (sPriv->drmMinor < 2) { - _savage_render_stage.active = GL_FALSE; + imesa->enable_fastpath = GL_FALSE; fprintf (stderr, "*** Disabling fast path because your DRM version is buggy " "or doesn't\n*** support ELTS. You need at least Savage DRM " "version 2.2.\n"); - } - + } else + imesa->enable_fastpath = driQueryOptionb(&imesa->optionCache, + "enable_fastpath"); + imesa->enable_vdma = driQueryOptionb(&imesa->optionCache, "enable_vdma"); /* Configure swrast to match hardware characteristics: */ @@ -520,6 +537,7 @@ savageDestroyContext(__DRIcontextPrivate *driContextPriv) savageFlushVertices(imesa); savageReleaseIndexedVerts(imesa); savageFlushCmdBuf(imesa, GL_TRUE); /* release DMA buffer */ + WAIT_IDLE_EMPTY; /* update for multi-tex*/ { diff --git a/src/mesa/drivers/dri/savage/savagecontext.h b/src/mesa/drivers/dri/savage/savagecontext.h index 37aa7d3348..a1ed14031f 100644 --- a/src/mesa/drivers/dri/savage/savagecontext.h +++ b/src/mesa/drivers/dri/savage/savagecontext.h @@ -304,6 +304,8 @@ struct savage_context_t { GLint texture_depth; GLboolean no_rast; GLboolean float_depth; + GLboolean enable_fastpath; + GLboolean enable_vdma; }; #define SAVAGE_CONTEXT(ctx) ((savageContextPtr)(ctx->DriverCtx)) diff --git a/src/mesa/drivers/dri/savage/savagedd.c b/src/mesa/drivers/dri/savage/savagedd.c index 1878bef524..b0478169a9 100644 --- a/src/mesa/drivers/dri/savage/savagedd.c +++ b/src/mesa/drivers/dri/savage/savagedd.c @@ -41,7 +41,7 @@ #include "utils.h" -#define DRIVER_DATE "20050110" +#define DRIVER_DATE "20050120" /*************************************** * Mesa's Driver Functions diff --git a/src/mesa/drivers/dri/savage/savagerender.c b/src/mesa/drivers/dri/savage/savagerender.c index cdc82c7be8..46871f964c 100644 --- a/src/mesa/drivers/dri/savage/savagerender.c +++ b/src/mesa/drivers/dri/savage/savagerender.c @@ -215,6 +215,7 @@ static void savage_check_render( GLcontext *ctx, struct tnl_pipeline_stage *stage ) { stage->inputs = TNL_CONTEXT(ctx)->render_inputs; + stage->active = SAVAGE_CONTEXT(ctx)->enable_fastpath; } static void dtr( struct tnl_pipeline_stage *stage ) diff --git a/src/mesa/drivers/dri/savage/savagetris.c b/src/mesa/drivers/dri/savage/savagetris.c index 0092f3ea77..4e0ad469a8 100644 --- a/src/mesa/drivers/dri/savage/savagetris.c +++ b/src/mesa/drivers/dri/savage/savagetris.c @@ -738,6 +738,10 @@ static void savageChooseRenderState(GLcontext *ctx) if (flags & LINE_FALLBACK) imesa->draw_line = savage_fallback_line; if (flags & TRI_FALLBACK) imesa->draw_tri = savage_fallback_tri; index |= SAVAGE_FALLBACK_BIT; + if (SAVAGE_DEBUG & DEBUG_FALLBACKS) { + fprintf (stderr, "Per-primitive fallback, TriangleCaps=0x%x\n", + ctx->_TriangleCaps); + } } } @@ -1032,17 +1036,19 @@ static __inline__ GLuint savageChooseVertexFormat_s4( GLcontext *ctx ) if (setupIndex == imesa->SetupIndex && imesa->vertex_size != 0) return setupIndex; - mask = SAVAGE_SKIP_W; - size = 10 - (skip & 1) - (skip >> 1 & 1) - - (skip >> 2 & 1) - (skip >> 3 & 1) - (skip >> 4 & 1) - - (skip >> 5 & 1) - (skip >> 6 & 1) - (skip >> 7 & 1); + if (imesa->enable_vdma) { + mask = SAVAGE_SKIP_W; + size = 10 - (skip & 1) - (skip >> 1 & 1) - + (skip >> 2 & 1) - (skip >> 3 & 1) - (skip >> 4 & 1) - + (skip >> 5 & 1) - (skip >> 6 & 1) - (skip >> 7 & 1); - while (size < 8) { - if (skip & mask) { - skip &= ~mask; - size++; + while (size < 8) { + if (skip & mask) { + skip &= ~mask; + size++; + } + mask <<= 1; } - mask <<= 1; } imesa->vertex_attr_count = 0; @@ -1167,7 +1173,7 @@ static void savageRenderStart( GLcontext *ctx ) * discard the DMA buffer, if we were using one. */ savageFlushVertices(imesa); savageFlushCmdBuf(imesa, GL_TRUE); - if (hwVertexSize == 8) { + if (hwVertexSize == 8 && imesa->enable_vdma) { if (SAVAGE_DEBUG & DEBUG_DMA) fprintf (stderr, "Using DMA, skip=0x%02x\n", imesa->skip); /* we can use vertex dma */ -- cgit v1.2.3