summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorDaniel Borca <[email protected]>2004-03-02 08:15:24 +0000
committerDaniel Borca <[email protected]>2004-03-02 08:15:24 +0000
commitfa21787b52d85a7aeaf5de64a39e019f39fcfa07 (patch)
tree5465c5008210bef81266b91acc4988fcf01c33bf /src/mesa/drivers
parent725a56f157506a0122912da9f8df92b275da5b98 (diff)
workaround for crash-upon-exit in verbose mode
fxMesa now uses grQueryResolution minor fixes to X11 and DOS drivers
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dos/dmesa.c39
-rw-r--r--src/mesa/drivers/glide/fxapi.c113
-rw-r--r--src/mesa/drivers/glide/fxwgl.c2
-rw-r--r--src/mesa/drivers/x11/xm_api.c23
4 files changed, 88 insertions, 89 deletions
diff --git a/src/mesa/drivers/dos/dmesa.c b/src/mesa/drivers/dos/dmesa.c
index 752f13e909d..f6ff5eb50bb 100644
--- a/src/mesa/drivers/dos/dmesa.c
+++ b/src/mesa/drivers/dos/dmesa.c
@@ -1360,44 +1360,7 @@ int DMesaGetIntegerv (GLenum pname, GLint *params)
#ifndef FX
return vl_get(VL_GET_VIDEO_MODES, params);
#else
- {
- /* `vmode' struct must be sync'ed with `internal.h' (vl_mode)
- * `vmode' list must be sync'ed with `fxapi.c'
- * `hw >= 6' means Napalm and can do 32bit rendering
- * TODO: we should take an envvar for `fxMesaSelectCurrentBoard'
- */
- static struct {
- int width, height;
- int bpp;
- } vmode[] = {
- { 320, 200, 16 },
- { 320, 240, 16 },
- { 512, 384, 16 },
- { 640, 400, 16 },
- { 640, 480, 16 },
- { 800, 600, 16 },
- {1024, 768, 16 },
-
- { 320, 200, 32 },
- { 320, 240, 32 },
- { 512, 384, 32 },
- { 640, 400, 32 },
- { 640, 480, 32 },
- { 800, 600, 32 },
- {1024, 768, 32 }
- };
- int hw = fxMesaSelectCurrentBoard(0);
- int i, n = sizeof(vmode) / sizeof(vmode[0]);
- if (hw < 6) {
- n /= 2;
- }
- if (params) {
- for (i = 0; i < n; i++) {
- params[i] = (GLint)(&vmode[i]);
- }
- }
- return n;
- }
+ return -1; /* TODO */
#endif
case DMESA_GET_BUFFER_ADDR:
#ifndef FX
diff --git a/src/mesa/drivers/glide/fxapi.c b/src/mesa/drivers/glide/fxapi.c
index 10d572a9e0c..930534fcd89 100644
--- a/src/mesa/drivers/glide/fxapi.c
+++ b/src/mesa/drivers/glide/fxapi.c
@@ -203,34 +203,65 @@ gl3DfxSetPaletteEXT(GLuint * pal)
static GrScreenResolution_t fxBestResolution (int width, int height)
{
- static int resolutions[][5] = {
-#if 1 /* Voodoo^2 can't fullscreen these, because of Glide */
- { 320, 200, GR_RESOLUTION_320x200 },
- { 320, 240, GR_RESOLUTION_320x240 },
-#endif
- { 512, 384, GR_RESOLUTION_512x384 },
- { 640, 400, GR_RESOLUTION_640x400 },
- { 640, 480, GR_RESOLUTION_640x480 },
- { 800, 600, GR_RESOLUTION_800x600 },
- {1024, 768, GR_RESOLUTION_1024x768 },
- {1280, 1024, GR_RESOLUTION_1280x1024},
- {1600, 1200, GR_RESOLUTION_1600x1200},
+ static int resolutions[][3] = {
+ { GR_RESOLUTION_320x200, 320, 200 },
+ { GR_RESOLUTION_320x240, 320, 240 },
+ { GR_RESOLUTION_400x256, 400, 256 },
+ { GR_RESOLUTION_512x384, 512, 384 },
+ { GR_RESOLUTION_640x200, 640, 200 },
+ { GR_RESOLUTION_640x350, 640, 350 },
+ { GR_RESOLUTION_640x400, 640, 400 },
+ { GR_RESOLUTION_640x480, 640, 480 },
+ { GR_RESOLUTION_800x600, 800, 600 },
+ { GR_RESOLUTION_960x720, 960, 720 },
+ { GR_RESOLUTION_856x480, 856, 480 },
+ { GR_RESOLUTION_512x256, 512, 256 },
+ { GR_RESOLUTION_1024x768, 1024, 768 },
+ { GR_RESOLUTION_1280x1024, 1280, 1024 },
+ { GR_RESOLUTION_1600x1200, 1600, 1200 },
+ { GR_RESOLUTION_400x300, 400, 300 },
+ { GR_RESOLUTION_1152x864, 1152, 864 },
+ { GR_RESOLUTION_1280x960, 1280, 960 },
+ { GR_RESOLUTION_1600x1024, 1600, 1024 },
+ { GR_RESOLUTION_1792x1344, 1792, 1344 },
+ { GR_RESOLUTION_1856x1392, 1856, 1392 },
+ { GR_RESOLUTION_1920x1440, 1920, 1440 },
+ { GR_RESOLUTION_2048x1536, 2048, 1536 },
+ { GR_RESOLUTION_2048x2048, 2048, 2048 }
};
- int i, NUM_RESOLUTIONS = sizeof(resolutions) / sizeof(resolutions[0]);
- int lastvalidres = 4; /* set default to GR_RESOLUTION_640x480 */
+ int i, size;
+ int lastvalidres = GR_RESOLUTION_640x480;
int min = 2048 * 2048; /* max is GR_RESOLUTION_2048x2048 */
-
- for (i = 0; i < NUM_RESOLUTIONS; i++) {
- if ((width <= resolutions[i][0]) && (height <= resolutions[i][1])) {
- if (min > (resolutions[i][0] * resolutions[i][1])) {
- min = resolutions[i][0] * resolutions[i][1];
- lastvalidres = i;
+ GrResolution resTemplate = {
+ GR_QUERY_ANY,
+ GR_QUERY_ANY,
+ 2 /*GR_QUERY_ANY */,
+ GR_QUERY_ANY
+ };
+ GrResolution *presSupported;
+
+ fxQueryHardware();
+
+ size = grQueryResolutions(&resTemplate, NULL);
+ presSupported = malloc(size);
+
+ size /= sizeof(GrResolution);
+ grQueryResolutions(&resTemplate, presSupported);
+
+ for (i = 0; i < size; i++) {
+ int r = presSupported[i].resolution;
+ if ((width <= resolutions[r][1]) && (height <= resolutions[r][2])) {
+ if (min > (resolutions[r][1] * resolutions[r][2])) {
+ min = resolutions[r][1] * resolutions[r][2];
+ lastvalidres = r;
}
}
}
- return resolutions[lastvalidres][2];
+ free(presSupported);
+
+ return resolutions[lastvalidres][0];
}
@@ -770,6 +801,25 @@ fxMesaDestroyContext(fxMesaContext fxMesa)
glbTotNumCtx--;
+ if (!glbTotNumCtx && getenv("MESA_FX_INFO")) {
+ GrSstPerfStats_t st;
+
+ FX_grSstPerfStats(&st);
+
+ fprintf(stderr, "Pixels Stats:\n");
+ fprintf(stderr, " # pixels processed (minus buffer clears): %u\n",
+ (unsigned) st.pixelsIn);
+ fprintf(stderr, " # pixels not drawn due to chroma key test failure: %u\n",
+ (unsigned) st.chromaFail);
+ fprintf(stderr, " # pixels not drawn due to depth test failure: %u\n",
+ (unsigned) st.zFuncFail);
+ fprintf(stderr,
+ " # pixels not drawn due to alpha test failure: %u\n",
+ (unsigned) st.aFuncFail);
+ fprintf(stderr, " # pixels drawn (including buffer clears and LFB writes): %u\n",
+ (unsigned) st.pixelsOut);
+ }
+
/* [dBorca]
* close the hardware first, so we can debug
* atexit problems (memory leaks, etc).
@@ -886,27 +936,6 @@ void GLAPIENTRY
fxCloseHardware(void)
{
if (glbGlideInitialized) {
- if (getenv("MESA_FX_INFO")) {
- GrSstPerfStats_t st;
-
- FX_grSstPerfStats(&st);
- fprintf(stderr, "Pixels Stats:\n");
- fprintf(stderr, " # pixels processed (minus buffer clears): %u\n",
- (unsigned) st.pixelsIn);
- fprintf(stderr,
- " # pixels not drawn due to chroma key test failure: %u\n",
- (unsigned) st.chromaFail);
- fprintf(stderr,
- " # pixels not drawn due to depth test failure: %u\n",
- (unsigned) st.zFuncFail);
- fprintf(stderr,
- " # pixels not drawn due to alpha test failure: %u\n",
- (unsigned) st.aFuncFail);
- fprintf(stderr,
- " # pixels drawn (including buffer clears and LFB writes): %u\n",
- (unsigned) st.pixelsOut);
- }
-
if (glbTotNumCtx == 0) {
grGlideShutdown();
glbGlideInitialized = 0;
diff --git a/src/mesa/drivers/glide/fxwgl.c b/src/mesa/drivers/glide/fxwgl.c
index 3abb1a0c85d..3a581ef66a2 100644
--- a/src/mesa/drivers/glide/fxwgl.c
+++ b/src/mesa/drivers/glide/fxwgl.c
@@ -746,8 +746,10 @@ wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR * ppfd)
if (pfd.cAlphaBits > 0 && pix[i].pfd.cAlphaBits == 0)
continue; /* need alpha buffer */
+#if 0 /* [dBorca] regression bug? */
if (pfd.cStencilBits > 0 && pix[i].pfd.cStencilBits == 0)
continue; /* need stencil buffer */
+#endif
if (pfd.iPixelType == pix[i].pfd.iPixelType) {
best = i + 1;
diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c
index 16963ab71c7..c36c9c9c6a2 100644
--- a/src/mesa/drivers/x11/xm_api.c
+++ b/src/mesa/drivers/x11/xm_api.c
@@ -1830,15 +1830,19 @@ XMesaBuffer XMesaCreateWindowBuffer2( XMesaVisual v, XMesaWindow w,
}
attribs[numAttribs++] = FXMESA_NONE;
- /* [dBorca] we should take an envvar for `fxMesaSelectCurrentBoard'!!! */
- if ((hw = fxMesaSelectCurrentBoard(0))==GR_SSTTYPE_VOODOO) {
+ /* [dBorca] we should take an envvar for `fxMesaSelectCurrentBoard'!!! */
+ hw = fxMesaSelectCurrentBoard(0);
+ if ((hw == GR_SSTTYPE_VOODOO) || (hw == GR_SSTTYPE_Voodoo2)) {
b->FXctx = fxMesaCreateBestContext(0, b->width, b->height, attribs);
if ((v->undithered_pf!=PF_Index) && (b->backimage)) {
b->FXisHackUsable = b->FXctx ? GL_TRUE : GL_FALSE;
- if (fxEnvVar[0]=='w' || fxEnvVar[0]=='W')
- b->FXwindowHack = b->FXctx ? GL_TRUE : GL_FALSE;
- else
+ if (b->FXctx && (fxEnvVar[0]=='w' || fxEnvVar[0]=='W')) {
+ b->FXwindowHack = GL_TRUE;
+ FX_grSstControl(GR_CONTROL_DEACTIVATE);
+ }
+ else {
b->FXwindowHack = GL_FALSE;
+ }
}
}
else {
@@ -2210,6 +2214,10 @@ GLboolean XMesaSetFXmode( GLint mode )
return GL_FALSE;
}
if (ctx) {
+ /* [dBorca] Hack alert:
+ * oh, this is sooo wrong: ctx above is
+ * really an fxMesaContext, not an XMesaContext
+ */
XMesaContext xmesa = XMESA_CONTEXT(ctx);
if (mode == XMESA_FX_WINDOW) {
if (xmesa->xm_draw_buffer->FXisHackUsable) {
@@ -2269,10 +2277,7 @@ static void FXgetImage( XMesaBuffer b )
xmesa_alloc_back_buffer( b );
}
- /* [dBorca]
- * not needed for Voodoo2 anymore.
- * should we test fxMesa->bgrOrder?
- */
+ /* [dBorca] we're always in the right GR_COLORFORMAT... aren't we? */
/* grLfbWriteColorFormat(GR_COLORFORMAT_ARGB); */
if (b->xm_visual->undithered_pf==PF_5R6G5B) {
/* Special case: 16bpp RGB */