cleanup and some WGL PIXELFORMAT issues

This commit is contained in:
Daniel Borca 2004-02-16 07:32:27 +00:00
parent a49a08d014
commit 45f4c5ec3b
7 changed files with 103 additions and 119 deletions

View File

@ -262,7 +262,7 @@ fxMesaCreateContext(GLuint win,
int i;
const char *str;
int sliaa, numSLI, samplesPerChip, tmuRam, fbRam;
int sliaa, numSLI, samplesPerChip;
struct SstCard_St *voodoo;
struct tdfx_glide *Glide;
@ -273,8 +273,6 @@ fxMesaCreateContext(GLuint win,
GLuint redBits, greenBits, blueBits, alphaBits;
GrPixelFormat_t pixFmt;
GLboolean useBGR;
if (TDFX_DEBUG & VERBOSE_DRIVER) {
fprintf(stderr, "fxMesaCreateContext(...)\n");
}
@ -312,11 +310,7 @@ fxMesaCreateContext(GLuint win,
break;
/* XXX ugly hack here for sharing display lists */
case FXMESA_SHARE_CONTEXT:
{
const void *vPtr = &attribList[++i];
GLcontext **ctx = (GLcontext **)vPtr;
shareCtx = *ctx;
}
shareCtx = (GLcontext *)attribList[++i];
break;
default:
fprintf(stderr, "fxMesaCreateContext: ERROR: wrong parameter (%d) passed\n", attribList[i]);
@ -373,11 +367,11 @@ fxMesaCreateContext(GLuint win,
switch (voodoo->type) {
case GR_SSTTYPE_VOODOO:
case GR_SSTTYPE_Banshee:
useBGR = GL_TRUE;
fxMesa->bgrOrder = GL_TRUE;
fxMesa->snapVertices = GL_TRUE;
break;
case GR_SSTTYPE_Voodoo2:
useBGR = GL_TRUE;
fxMesa->bgrOrder = GL_TRUE;
fxMesa->snapVertices = GL_FALSE;
break;
case GR_SSTTYPE_Voodoo4:
@ -387,7 +381,7 @@ fxMesaCreateContext(GLuint win,
}
case GR_SSTTYPE_Voodoo3:
default:
useBGR = GL_FALSE;
fxMesa->bgrOrder = GL_FALSE;
fxMesa->snapVertices = GL_FALSE;
break;
}
@ -579,29 +573,6 @@ fxMesaCreateContext(GLuint win,
goto errorhandler;
}
/* Not that it matters, but tmuRam and fbRam change after grSstWinOpen. */
tmuRam = voodoo->tmuConfig[GR_TMU0].tmuRam;
fbRam = voodoo->fbRam;
BEGIN_BOARD_LOCK();
{
FxI32 result;
grGet(GR_MEMORY_TMU, 4, &result);
tmuRam = result / (1024 * 1024);
grGet(GR_MEMORY_FB, 4, &result);
fbRam = result / (1024 * 1024);
}
END_BOARD_LOCK();
sprintf(fxMesa->rendererString, "Mesa %s v0.60 %s %dMB FB, %dMB TM, %d TMU, %s",
grGetString(GR_RENDERER),
grGetString(GR_HARDWARE),
fbRam,
tmuRam * voodoo->nTexelfx,
voodoo->nTexelfx,
(voodoo->numChips > 1) ? "SLI" : "NOSLI");
fxMesa->bgrOrder = useBGR;
/* screen */
fxMesa->screen_width = FX_grSstScreenWidth();
fxMesa->screen_height = FX_grSstScreenHeight();
@ -617,22 +588,38 @@ fxMesaCreateContext(GLuint win,
fxMesa->clipMaxY = fxMesa->height;
if (fxMesa->verbose) {
char buf[80];
FxI32 tmuRam, fbRam;
strcpy(buf, grGetString(GR_VERSION));
fprintf(stderr, "Voodoo Using Glide %s\n", buf);
fprintf(stderr, "Voodoo Number of boards: %d\n", glbHWConfig.num_sst);
fprintf(stderr, "Voodoo Number of TMUs: %d\n", voodoo->nTexelfx);
fprintf(stderr, "Voodoo fbRam: %d\n", voodoo->fbRam);
fprintf(stderr, "Voodoo fbiRev: %d\n", voodoo->fbiRev);
fprintf(stderr, "Voodoo chips detected: %d\n", voodoo->numChips);
fprintf(stderr, "Voodoo pixel order = %s, vertex snapping = %d\n",
useBGR ? "BGR" : "RGB",
fxMesa->snapVertices);
fprintf(stderr, "Voodoo screen: %dx%d:%d\n",
fxMesa->screen_width, fxMesa->screen_height, colDepth);
/* Not that it matters, but tmuRam and fbRam change after grSstWinOpen. */
tmuRam = voodoo->tmuConfig[GR_TMU0].tmuRam;
fbRam = voodoo->fbRam;
BEGIN_BOARD_LOCK();
grGet(GR_MEMORY_TMU, 4, &tmuRam);
grGet(GR_MEMORY_FB, 4, &fbRam);
END_BOARD_LOCK();
fprintf(stderr, "Voodoo Using Glide %s\n", grGetString(GR_VERSION));
fprintf(stderr, "Voodoo Board: %d/%d, %s, %d GPU\n",
fxMesa->board + 1,
glbHWConfig.num_sst,
grGetString(GR_HARDWARE),
voodoo->numChips);
fprintf(stderr, "Voodoo Memory: FB = %ld, TM = %d x %ld\n",
fbRam,
voodoo->nTexelfx,
tmuRam);
fprintf(stderr, "Voodoo Screen: %dx%d:%d %s, %svertex snapping\n",
fxMesa->screen_width,
fxMesa->screen_height,
colDepth,
fxMesa->bgrOrder ? "BGR" : "RGB",
fxMesa->snapVertices ? "" : "no ");
}
sprintf(fxMesa->rendererString, "Mesa %s v0.60 %s",
grGetString(GR_RENDERER),
grGetString(GR_HARDWARE));
fxMesa->glVis = _mesa_create_visual(GL_TRUE, /* RGB mode */
doubleBuffer,
GL_FALSE, /* stereo */
@ -759,10 +746,10 @@ fxMesaDestroyContext(fxMesaContext fxMesa)
fxMesa->stats.swapBuffer = 1;
fprintf(stderr, "Textures Stats:\n");
fprintf(stderr, " Free texture memory on TMU0: %d:\n",
fprintf(stderr, " Free texture memory on TMU0: %d\n",
fxMesa->freeTexMem[FX_TMU0]);
if (fxMesa->haveTwoTMUs)
fprintf(stderr, " Free texture memory on TMU1: %d:\n",
fprintf(stderr, " Free texture memory on TMU1: %d\n",
fxMesa->freeTexMem[FX_TMU1]);
fprintf(stderr, " # request to TMM to upload a texture objects: %u\n",
fxMesa->stats.reqTexUpload);
@ -872,6 +859,7 @@ fxMesaSwapBuffers(void)
grBufferSwap(fxMesaCurrentCtx->swapInterval);
#if 0
/*
* Don't allow swap buffer commands to build up!
*/
@ -883,6 +871,7 @@ fxMesaSwapBuffers(void)
in order to enable this option) */
/* usleep(10000); */
;
#endif
fxMesaCurrentCtx->stats.swapBuffer++;
}
@ -897,7 +886,7 @@ void GLAPIENTRY
fxCloseHardware(void)
{
if (glbGlideInitialized) {
if (fxMesaCurrentCtx && fxMesaCurrentCtx->verbose) {
if (getenv("MESA_FX_INFO")) {
GrSstPerfStats_t st;
FX_grSstPerfStats(&st);

View File

@ -1338,6 +1338,10 @@ fxDDInitFxMesaContext(fxMesaContext fxMesa)
grLfbWriteColorFormat(GR_COLORFORMAT_ABGR);
}
if (fxMesa->Glide.grSetNumPendingBuffers != NULL) {
fxMesa->Glide.grSetNumPendingBuffers(fxMesa->maxPendingSwapBuffers);
}
fxMesa->textureAlign = FX_grGetInteger(GR_TEXTURE_ALIGN);
/* [koolsmoky] */
{
@ -1499,6 +1503,10 @@ fxDDInitExtensions(GLcontext * ctx)
}
/* core-level extensions */
#if 0
/* not until texel fetchers are right */
_mesa_enable_extension(ctx, "GL_SGIS_generate_mipmaps");
#endif
#if 1
_mesa_enable_extension(ctx, "GL_ARB_vertex_buffer_object");
#endif
@ -1507,10 +1515,6 @@ fxDDInitExtensions(GLcontext * ctx)
_mesa_enable_extension(ctx, "GL_ARB_fragment_program");
_mesa_enable_extension(ctx, "GL_ARB_vertex_program");
#endif
#if 0
/* not until texel fetchers are right */
_mesa_enable_extension(ctx, "GL_SGIS_generate_mipmaps");
#endif
}

View File

@ -539,7 +539,7 @@ struct tfxMesaContext
FxBool HaveTexUma; /* TEXUMA */
FxBool HaveTexus2; /* Texus 2 - FXT1 */
struct tdfx_glide Glide;
char rendererString[100];
char rendererString[64];
};

View File

@ -814,6 +814,7 @@ const char *TRP_TXCOMPRESS (FxU32 compress)
/*
** glide extensions
*/
void (FX_CALL *real_grSetNumPendingBuffers) (FxI32 NumPendingBuffers);
char * (FX_CALL *real_grGetRegistryOrEnvironmentStringExt) (char *theEntry);
void (FX_CALL *real_grGetGammaTableExt) (FxU32 nentries, FxU32 *red, FxU32 *green, FxU32 *blue);
void (FX_CALL *real_grChromaRangeModeExt) (GrChromakeyMode_t mode);
@ -1024,14 +1025,6 @@ FxBool FX_CALL trap_grSstWinClose (GrContext_t context)
#undef FN_NAME
}
void FX_CALL trap_grSetNumPendingBuffers (FxI32 NumPendingBuffers)
{
#define FN_NAME "grSetNumPendingBuffers"
TRAP_LOG("%s(%ld)\n", FN_NAME, NumPendingBuffers);
grSetNumPendingBuffers(NumPendingBuffers);
#undef FN_NAME
}
FxBool FX_CALL trap_grSelectContext (GrContext_t context)
{
#define FN_NAME "grSelectContext"
@ -1821,6 +1814,15 @@ void FX_CALL trap_guFogGenerateLinear (GrFog_t *fogtable,
/*
** glide extensions
*/
void FX_CALL trap_grSetNumPendingBuffers (FxI32 NumPendingBuffers)
{
#define FN_NAME "grSetNumPendingBuffers"
TRAP_LOG("%s(%ld)\n", FN_NAME, NumPendingBuffers);
assert(real_grSetNumPendingBuffers);
(*real_grSetNumPendingBuffers)(NumPendingBuffers);
#undef FN_NAME
}
char *FX_CALL trap_grGetRegistryOrEnvironmentStringExt (char *theEntry)
{
#define FN_NAME "grGetRegistryOrEnvironmentStringExt"
@ -2243,14 +2245,17 @@ void tdfx_hook_glide (struct tdfx_glide *Glide)
#if DEBUG_TRAP
#define GET_EXT_ADDR(name) *(GrProc *)&real_##name = grGetProcAddress(#name), Glide->name = trap_##name
#define GET_EXT_FAKE(name) GET_EXT_ADDR(name); if (real_##name == NULL) real_##name = fake_##name
#define GET_EXT_NULL(name) GET_EXT_ADDR(name); if (real_##name == NULL) Glide->name = NULL
#else /* DEBUG_TRAP */
#define GET_EXT_ADDR(name) *(GrProc *)&Glide->name = grGetProcAddress(#name)
#define GET_EXT_FAKE(name) GET_EXT_ADDR(name); if (Glide->name == NULL) Glide->name = fake_##name
#define GET_EXT_NULL(name) GET_EXT_ADDR(name)
#endif /* DEBUG_TRAP */
/*
** glide extensions
*/
GET_EXT_NULL(grSetNumPendingBuffers);
GET_EXT_FAKE(grGetRegistryOrEnvironmentStringExt);
GET_EXT_ADDR(grGetGammaTableExt);
GET_EXT_ADDR(grChromaRangeModeExt);
@ -2284,9 +2289,9 @@ void tdfx_hook_glide (struct tdfx_glide *Glide)
/*
** texus
*/
GET_EXT_ADDR(txImgQuantize);
GET_EXT_ADDR(txMipQuantize);
GET_EXT_ADDR(txPalToNcc);
GET_EXT_NULL(txImgQuantize);
GET_EXT_NULL(txMipQuantize);
GET_EXT_NULL(txPalToNcc);
#undef GET_EXT_ADDR
}

View File

@ -74,7 +74,6 @@ void FX_CALL trap_grFinish (void);
void FX_CALL trap_grFlush (void);
GrContext_t FX_CALL trap_grSstWinOpen (FxU32 hWnd, GrScreenResolution_t screen_resolution, GrScreenRefresh_t refresh_rate, GrColorFormat_t color_format, GrOriginLocation_t origin_location, int nColBuffers, int nAuxBuffers);
FxBool FX_CALL trap_grSstWinClose (GrContext_t context);
void FX_CALL trap_grSetNumPendingBuffers (FxI32 NumPendingBuffers);
FxBool FX_CALL trap_grSelectContext (GrContext_t context);
void FX_CALL trap_grSstOrigin (GrOriginLocation_t origin);
void FX_CALL trap_grSstSelect (int which_sst);
@ -207,7 +206,6 @@ void FX_CALL trap_guFogGenerateLinear (GrFog_t *fogtable, float nearZ, float far
#define grFlush trap_grFlush
#define grSstWinOpen trap_grSstWinOpen
#define grSstWinClose trap_grSstWinClose
#define grSetNumPendingBuffers trap_grSetNumPendingBuffers
#define grSelectContext trap_grSelectContext
#define grSstOrigin trap_grSstOrigin
#define grSstSelect trap_grSstSelect
@ -335,6 +333,7 @@ struct tdfx_glide {
/*
** glide extensions
*/
void (FX_CALL *grSetNumPendingBuffers) (FxI32 NumPendingBuffers);
char * (FX_CALL *grGetRegistryOrEnvironmentStringExt) (char *theEntry);
void (FX_CALL *grGetGammaTableExt) (FxU32 nentries, FxU32 *red, FxU32 *green, FxU32 *blue);
void (FX_CALL *grChromaRangeModeExt) (GrChromakeyMode_t mode);

View File

@ -152,13 +152,7 @@ fxTMUInit(fxMesaContext fxMesa, int tmu)
chunk = (fxMesa->type >= GR_SSTTYPE_Banshee) ? (end - start) : FX_2MB_SPLIT;
if (fxMesa->verbose) {
fprintf(stderr, "Voodoo %s configuration:\n",
(tmu == FX_TMU0) ? "TMU0" : "TMU1");
fprintf(stderr, "Voodoo Lower texture memory address (%u)\n",
(unsigned int) start);
fprintf(stderr, "Voodoo Higher texture memory address (%u)\n",
(unsigned int) end);
fprintf(stderr, "Voodoo Splitting Texture memory in %luMB blocks:\n", chunk >> 20);
fprintf(stderr, "Voodoo TMU%d configuration:\n", tmu);
}
fxMesa->freeTexMem[tmu] = end - start;
@ -173,7 +167,7 @@ fxTMUInit(fxMesaContext fxMesa, int tmu)
blockend = blockstart + chunk;
if (fxMesa->verbose)
fprintf(stderr, "Voodoo %07u-%07u\n",
fprintf(stderr, "Voodoo %08u-%08u\n",
(unsigned int) blockstart, (unsigned int) blockend);
tmn = fxTMNewRangeNode(fxMesa, blockstart, blockend);

View File

@ -334,9 +334,7 @@ wglCreateContext(HDC hdc)
{
char *env;
/* always log when debugging, or if user demands */
#if !FX_DEBUG
if ((env = getenv("MESA_FX_INFO")) && env[0] == 'r')
#endif
if (TDFX_DEBUG || ((env = getenv("MESA_FX_INFO")) && env[0] == 'r'))
freopen("MESA.LOG", "w", stderr);
}
@ -702,47 +700,12 @@ wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR * ppfd)
int i, best = -1, qt_valid_pix;
PIXELFORMATDESCRIPTOR pfd = *ppfd;
#if 0
FILE *pix_file;
pix_file = fopen("pix_log.txt", "a");
if (pix_file) {
fprintf(pix_file, "wglChoosePixelFormat\n");
fprintf(pix_file, "nSize = %d\n",pfd.nSize);
fprintf(pix_file, "nVersion = %d\n",pfd.nVersion);
fprintf(pix_file, "dwFlags = %d\n",pfd.dwFlags);
fprintf(pix_file, "iPixelType = %d\n",pfd.iPixelType);
fprintf(pix_file, "cColorBits = %d\n",pfd.cColorBits);
fprintf(pix_file, "cRedBits = %d\n",pfd.cRedBits);
fprintf(pix_file, "cRedShift = %d\n",pfd.cRedShift);
fprintf(pix_file, "cGreenBits = %d\n",pfd.cGreenBits);
fprintf(pix_file, "cGreenShift = %d\n",pfd.cGreenShift);
fprintf(pix_file, "cBlueBits = %d\n",pfd.cBlueBits);
fprintf(pix_file, "cBlueShift = %d\n",pfd.cBlueShift);
fprintf(pix_file, "cAlphaBits = %d\n",pfd.cAlphaBits);
fprintf(pix_file, "cAlphaShift = %d\n",pfd.cAlphaShift);
fprintf(pix_file, "cAccumBits = %d\n",pfd.cAccumBits);
fprintf(pix_file, "cAccumRedBits = %d\n",pfd.cAccumRedBits);
fprintf(pix_file, "cAccumGreenBits = %d\n",pfd.cAccumGreenBits);
fprintf(pix_file, "cAccumBlueBits = %d\n",pfd.cAccumBlueBits);
fprintf(pix_file, "cAccumAlphaBits = %d\n",pfd.cAccumAlphaBits);
fprintf(pix_file, "cDepthBits = %d\n",pfd.cDepthBits);
fprintf(pix_file, "cStencilBits = %d\n",pfd.cStencilBits);
fprintf(pix_file, "cAuxBuffers = %d\n",pfd.cAuxBuffers);
fprintf(pix_file, "iLayerType = %d\n",pfd.iLayerType);
fprintf(pix_file, "bReserved = %d\n",pfd.bReserved);
fprintf(pix_file, "dwLayerMask = %d\n",pfd.dwLayerMask);
fprintf(pix_file, "dwVisibleMask = %d\n",pfd.dwVisibleMask);
fprintf(pix_file, "dwDamageMask = %d\n",pfd.dwDamageMask);
fclose(pix_file);
}
#endif
qt_valid_pix = pfd_tablen();
#if 1 || QUAKE2 || GORE
/* QUAKE2: 24+32 */
/* GORE : 24+16 */
if (pfd.cColorBits == 24) {
if ((pfd.cColorBits == 24) || (pfd.cColorBits == 32)) {
/* the first 2 entries are 16bit */
pfd.cColorBits = (qt_valid_pix > 2) ? 32 : 16;
}
@ -783,10 +746,8 @@ wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR * ppfd)
if (pfd.cAlphaBits > 0 && pix[i].pfd.cAlphaBits == 0)
continue; /* need alpha buffer */
#if 0
if ((pfd.cColorBits == 32) && (pfd.cStencilBits > 0 && pix[i].pfd.cStencilBits == 0))
continue; /* need stencil */
#endif
if (pfd.cStencilBits > 0 && pix[i].pfd.cStencilBits == 0)
continue; /* need stencil buffer */
if (pfd.iPixelType == pix[i].pfd.iPixelType) {
best = i + 1;
@ -795,6 +756,38 @@ wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR * ppfd)
}
if (best == -1) {
FILE *err = fopen("MESA.LOG", "w");
if (err != NULL) {
fprintf(err, "wglChoosePixelFormat failed\n");
fprintf(err, "\tnSize = %d\n", ppfd->nSize);
fprintf(err, "\tnVersion = %d\n", ppfd->nVersion);
fprintf(err, "\tdwFlags = %d\n", ppfd->dwFlags);
fprintf(err, "\tiPixelType = %d\n", ppfd->iPixelType);
fprintf(err, "\tcColorBits = %d\n", ppfd->cColorBits);
fprintf(err, "\tcRedBits = %d\n", ppfd->cRedBits);
fprintf(err, "\tcRedShift = %d\n", ppfd->cRedShift);
fprintf(err, "\tcGreenBits = %d\n", ppfd->cGreenBits);
fprintf(err, "\tcGreenShift = %d\n", ppfd->cGreenShift);
fprintf(err, "\tcBlueBits = %d\n", ppfd->cBlueBits);
fprintf(err, "\tcBlueShift = %d\n", ppfd->cBlueShift);
fprintf(err, "\tcAlphaBits = %d\n", ppfd->cAlphaBits);
fprintf(err, "\tcAlphaShift = %d\n", ppfd->cAlphaShift);
fprintf(err, "\tcAccumBits = %d\n", ppfd->cAccumBits);
fprintf(err, "\tcAccumRedBits = %d\n", ppfd->cAccumRedBits);
fprintf(err, "\tcAccumGreenBits = %d\n", ppfd->cAccumGreenBits);
fprintf(err, "\tcAccumBlueBits = %d\n", ppfd->cAccumBlueBits);
fprintf(err, "\tcAccumAlphaBits = %d\n", ppfd->cAccumAlphaBits);
fprintf(err, "\tcDepthBits = %d\n", ppfd->cDepthBits);
fprintf(err, "\tcStencilBits = %d\n", ppfd->cStencilBits);
fprintf(err, "\tcAuxBuffers = %d\n", ppfd->cAuxBuffers);
fprintf(err, "\tiLayerType = %d\n", ppfd->iLayerType);
fprintf(err, "\tbReserved = %d\n", ppfd->bReserved);
fprintf(err, "\tdwLayerMask = %d\n", ppfd->dwLayerMask);
fprintf(err, "\tdwVisibleMask = %d\n", ppfd->dwVisibleMask);
fprintf(err, "\tdwDamageMask = %d\n", ppfd->dwDamageMask);
fclose(err);
}
SetLastError(0);
return (0);
}