diff --git a/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx b/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx index c0b44cc5b0..a72ef34efc 100644 --- a/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx +++ b/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx @@ -2064,6 +2064,13 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re if(bVerboseMode) wdxdisplay_cat.info() << "searching for valid display modes at res: (" << RequestedXsize << "," << RequestedYsize << "), TotalModes: " << cNumModes<< endl; + // ignore memory based checks for min res 640x480. some cards just dont give accurate memavails. + // (should I do the check anyway for 640x480 32bpp?) + bool bDoMemBasedChecks=((!((RequestedXsize==640)&&(RequestedXsize==480))) && + (_dxgsg->scrn.MaxAvailVidMem!=UNKNOWN_VIDMEM_SIZE) && + (!special_check_fullscreen_resolution(RequestedXsize,RequestedYsize))); + + for(int i=0;iscrn.pD3D8->EnumAdapterModes(_dxgsg->scrn.CardIDNum,i,&dispmode); @@ -2102,8 +2109,8 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re float RendTgtMinMemReqmt; // if we have a valid memavail value, try to determine if we have enough space - if( (_dxgsg->scrn.MaxAvailVidMem!=UNKNOWN_VIDMEM_SIZE) && - (!(special_check_fullscreen_resolution(RequestedXsize,RequestedYsize)))) { + if( bDoMemBasedChecks) { + // assume user is testing fullscreen, not windowed, so use the dwTotal value // see if 3 scrnbufs (front/back/z)at 16bpp at xsize*ysize will fit with a few // extra megs for texmem @@ -2139,8 +2146,9 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re continue; } - if((_dxgsg->scrn.MaxAvailVidMem!=UNKNOWN_VIDMEM_SIZE) && - (!(special_check_fullscreen_resolution(RequestedXsize,RequestedYsize)))) { + float MinMemReqmt = 0.0f; + + if(bDoMemBasedChecks) { // test memory again, this time including zbuf size float zbytes_per_pixel = (IS_16BPP_ZBUFFER(zformat) ? 2 : 4); float MinMemReqmt = RendTgtMinMemReqmt + ((float)RequestedXsize)*((float)RequestedYsize)*zbytes_per_pixel; @@ -2155,22 +2163,22 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re << " (" << (int)MinMemReqmt << " > " << _dxgsg->scrn.MaxAvailVidMem << ")\n"; continue; } + } - if(MinMemReqmt<_dxgsg->scrn.MaxAvailVidMem) { - if(!IS_16BPP_ZBUFFER(zformat)) { - // see if things fit with a 16bpp zbuffer + if((!bDoMemBasedChecks) || (MinMemReqmt<_dxgsg->scrn.MaxAvailVidMem)) { + if(!IS_16BPP_ZBUFFER(zformat)) { + // see if things fit with a 16bpp zbuffer - if(!FindBestDepthFormat(_dxgsg->scrn,dispmode,&zformat,bWantStencil,true,bVerboseMode)) { - if(bVerboseMode) - wdxdisplay_cat.info() << "FindBestDepthFmt rejected Mode["<scrn,dispmode,&zformat,bWantStencil,true,bVerboseMode)) { + if(bVerboseMode) + wdxdisplay_cat.info() << "FindBestDepthFmt rejected Mode["<