* 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
This commit is contained in:
Felix Kuehling 2005-01-20 15:18:10 +00:00
parent 14dee36fa7
commit 677d1d07c4
5 changed files with 42 additions and 15 deletions

View file

@ -57,6 +57,19 @@
#include "xmlpool.h" #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 /* Configuration
*/ */
PUBLIC const char __driConfigOptions[] = PUBLIC const char __driConfigOptions[] =
@ -68,12 +81,14 @@ DRI_CONF_BEGIN
DRI_CONF_SECTION_END DRI_CONF_SECTION_END
DRI_CONF_SECTION_PERFORMANCE DRI_CONF_SECTION_PERFORMANCE
DRI_CONF_MAX_TEXTURE_UNITS(2,1,2) DRI_CONF_MAX_TEXTURE_UNITS(2,1,2)
SAVAGE_ENABLE_VDMA(true)
SAVAGE_ENABLE_FASTPATH(true)
DRI_CONF_SECTION_END DRI_CONF_SECTION_END
DRI_CONF_SECTION_DEBUG DRI_CONF_SECTION_DEBUG
DRI_CONF_NO_RAST(false) DRI_CONF_NO_RAST(false)
DRI_CONF_SECTION_END DRI_CONF_SECTION_END
DRI_CONF_END; DRI_CONF_END;
static const GLuint __driNConfigOptions = 5; static const GLuint __driNConfigOptions = 7;
#ifdef USE_NEW_INTERFACE #ifdef USE_NEW_INTERFACE
static PFNGLXCREATECONTEXTMODES create_context_modes = NULL; 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 /* DRM versions before 2.1.3 would only render triangle lists. ELTS
* support was added in 2.2.0. */ * support was added in 2.2.0. */
if (sPriv->drmMinor < 2) { if (sPriv->drmMinor < 2) {
_savage_render_stage.active = GL_FALSE; imesa->enable_fastpath = GL_FALSE;
fprintf (stderr, fprintf (stderr,
"*** Disabling fast path because your DRM version is buggy " "*** Disabling fast path because your DRM version is buggy "
"or doesn't\n*** support ELTS. You need at least Savage DRM " "or doesn't\n*** support ELTS. You need at least Savage DRM "
"version 2.2.\n"); "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: /* Configure swrast to match hardware characteristics:
*/ */
@ -520,6 +537,7 @@ savageDestroyContext(__DRIcontextPrivate *driContextPriv)
savageFlushVertices(imesa); savageFlushVertices(imesa);
savageReleaseIndexedVerts(imesa); savageReleaseIndexedVerts(imesa);
savageFlushCmdBuf(imesa, GL_TRUE); /* release DMA buffer */ savageFlushCmdBuf(imesa, GL_TRUE); /* release DMA buffer */
WAIT_IDLE_EMPTY;
/* update for multi-tex*/ /* update for multi-tex*/
{ {

View file

@ -304,6 +304,8 @@ struct savage_context_t {
GLint texture_depth; GLint texture_depth;
GLboolean no_rast; GLboolean no_rast;
GLboolean float_depth; GLboolean float_depth;
GLboolean enable_fastpath;
GLboolean enable_vdma;
}; };
#define SAVAGE_CONTEXT(ctx) ((savageContextPtr)(ctx->DriverCtx)) #define SAVAGE_CONTEXT(ctx) ((savageContextPtr)(ctx->DriverCtx))

View file

@ -41,7 +41,7 @@
#include "utils.h" #include "utils.h"
#define DRIVER_DATE "20050110" #define DRIVER_DATE "20050120"
/*************************************** /***************************************
* Mesa's Driver Functions * Mesa's Driver Functions

View file

@ -215,6 +215,7 @@ static void savage_check_render( GLcontext *ctx,
struct tnl_pipeline_stage *stage ) struct tnl_pipeline_stage *stage )
{ {
stage->inputs = TNL_CONTEXT(ctx)->render_inputs; stage->inputs = TNL_CONTEXT(ctx)->render_inputs;
stage->active = SAVAGE_CONTEXT(ctx)->enable_fastpath;
} }
static void dtr( struct tnl_pipeline_stage *stage ) static void dtr( struct tnl_pipeline_stage *stage )

View file

@ -738,6 +738,10 @@ static void savageChooseRenderState(GLcontext *ctx)
if (flags & LINE_FALLBACK) imesa->draw_line = savage_fallback_line; if (flags & LINE_FALLBACK) imesa->draw_line = savage_fallback_line;
if (flags & TRI_FALLBACK) imesa->draw_tri = savage_fallback_tri; if (flags & TRI_FALLBACK) imesa->draw_tri = savage_fallback_tri;
index |= SAVAGE_FALLBACK_BIT; index |= SAVAGE_FALLBACK_BIT;
if (SAVAGE_DEBUG & DEBUG_FALLBACKS) {
fprintf (stderr, "Per-primitive fallback, TriangleCaps=0x%x\n",
ctx->_TriangleCaps);
}
} }
} }
@ -1032,6 +1036,7 @@ static __inline__ GLuint savageChooseVertexFormat_s4( GLcontext *ctx )
if (setupIndex == imesa->SetupIndex && imesa->vertex_size != 0) if (setupIndex == imesa->SetupIndex && imesa->vertex_size != 0)
return setupIndex; return setupIndex;
if (imesa->enable_vdma) {
mask = SAVAGE_SKIP_W; mask = SAVAGE_SKIP_W;
size = 10 - (skip & 1) - (skip >> 1 & 1) - size = 10 - (skip & 1) - (skip >> 1 & 1) -
(skip >> 2 & 1) - (skip >> 3 & 1) - (skip >> 4 & 1) - (skip >> 2 & 1) - (skip >> 3 & 1) - (skip >> 4 & 1) -
@ -1044,6 +1049,7 @@ static __inline__ GLuint savageChooseVertexFormat_s4( GLcontext *ctx )
} }
mask <<= 1; mask <<= 1;
} }
}
imesa->vertex_attr_count = 0; imesa->vertex_attr_count = 0;
@ -1167,7 +1173,7 @@ static void savageRenderStart( GLcontext *ctx )
* discard the DMA buffer, if we were using one. */ * discard the DMA buffer, if we were using one. */
savageFlushVertices(imesa); savageFlushVertices(imesa);
savageFlushCmdBuf(imesa, GL_TRUE); savageFlushCmdBuf(imesa, GL_TRUE);
if (hwVertexSize == 8) { if (hwVertexSize == 8 && imesa->enable_vdma) {
if (SAVAGE_DEBUG & DEBUG_DMA) if (SAVAGE_DEBUG & DEBUG_DMA)
fprintf (stderr, "Using DMA, skip=0x%02x\n", imesa->skip); fprintf (stderr, "Using DMA, skip=0x%02x\n", imesa->skip);
/* we can use vertex dma */ /* we can use vertex dma */