more dbg logging

This commit is contained in:
cxgeorge 2002-10-30 04:05:10 +00:00
parent 1ad6b0310f
commit 1e38e768d5
2 changed files with 64 additions and 27 deletions

View File

@ -1973,7 +1973,7 @@ int D3DFMT_to_DepthBits(D3DFORMAT fmt) {
} }
} }
bool wdxGraphicsWindow::FindBestDepthFormat(DXScreenData &Display,D3DDISPLAYMODE &TestDisplayMode,D3DFORMAT *pBestFmt,bool bWantStencil,bool bForce16bpp) const { bool wdxGraphicsWindow::FindBestDepthFormat(DXScreenData &Display,D3DDISPLAYMODE &TestDisplayMode,D3DFORMAT *pBestFmt,bool bWantStencil,bool bForce16bpp,bool bVerboseMode) const {
// list fmts in order of preference // list fmts in order of preference
#define NUM_TEST_ZFMTS 3 #define NUM_TEST_ZFMTS 3
static D3DFORMAT NoStencilPrefList[NUM_TEST_ZFMTS]={D3DFMT_D32,D3DFMT_D24X8,D3DFMT_D16}; static D3DFORMAT NoStencilPrefList[NUM_TEST_ZFMTS]={D3DFMT_D32,D3DFMT_D24X8,D3DFMT_D16};
@ -1991,6 +1991,9 @@ bool wdxGraphicsWindow::FindBestDepthFormat(DXScreenData &Display,D3DDISPLAYMODE
bool bOnlySelect16bpp= (dx_force_16bpp_zbuffer || bForce16bpp || bool bOnlySelect16bpp= (dx_force_16bpp_zbuffer || bForce16bpp ||
(IS_NVIDIA(Display.DXDeviceID) && IS_16BPP_DISPLAY_FORMAT(TestDisplayMode.Format))); (IS_NVIDIA(Display.DXDeviceID) && IS_16BPP_DISPLAY_FORMAT(TestDisplayMode.Format)));
if(bVerboseMode)
wdxdisplay_cat.info() << "FindBestDepthFmt: bSelectOnly16bpp: " << bOnlySelect16bpp << endl;
for(int i=0;i<NUM_TEST_ZFMTS;i++) { for(int i=0;i<NUM_TEST_ZFMTS;i++) {
D3DFORMAT TestDepthFmt = (bWantStencil ? StencilPrefList[i] : NoStencilPrefList[i]); D3DFORMAT TestDepthFmt = (bWantStencil ? StencilPrefList[i] : NoStencilPrefList[i]);
@ -2001,8 +2004,11 @@ bool wdxGraphicsWindow::FindBestDepthFormat(DXScreenData &Display,D3DDISPLAYMODE
D3DUSAGE_DEPTHSTENCIL,D3DRTYPE_SURFACE,TestDepthFmt); D3DUSAGE_DEPTHSTENCIL,D3DRTYPE_SURFACE,TestDepthFmt);
if(FAILED(hr)) { if(FAILED(hr)) {
if(hr==D3DERR_NOTAVAILABLE) if(hr==D3DERR_NOTAVAILABLE) {
if(bVerboseMode)
wdxdisplay_cat.info() << "FindBestDepthFmt: ChkDevFmt returns NotAvail for " << D3DFormatStr(TestDepthFmt) << endl;
continue; continue;
}
wdxdisplay_cat.error() << "unexpected CheckDeviceFormat failure" << D3DERRORSTRING(hr); wdxdisplay_cat.error() << "unexpected CheckDeviceFormat failure" << D3DERRORSTRING(hr);
exit(1); exit(1);
@ -2012,17 +2018,22 @@ bool wdxGraphicsWindow::FindBestDepthFormat(DXScreenData &Display,D3DDISPLAYMODE
TestDisplayMode.Format, // adapter format TestDisplayMode.Format, // adapter format
TestDisplayMode.Format, // backbuffer fmt (should be the same in my apps) TestDisplayMode.Format, // backbuffer fmt (should be the same in my apps)
TestDepthFmt); TestDepthFmt);
if(FAILED(hr) && (hr!=D3DERR_NOTAVAILABLE)) {
wdxdisplay_cat.error() << "unexpected CheckDepthStencilMatch failure" << D3DERRORSTRING(hr);
exit(1);
}
if(SUCCEEDED(hr)) { if(SUCCEEDED(hr)) {
*pBestFmt = TestDepthFmt; *pBestFmt = TestDepthFmt;
break; break;
} else {
if(hr==D3DERR_NOTAVAILABLE) {
if(bVerboseMode)
wdxdisplay_cat.info() << "FindBestDepthFmt: ChkDepMatch returns NotAvail for " << D3DFormatStr(TestDisplayMode.Format) << ", " << D3DFormatStr(TestDepthFmt) << endl;
} else {
wdxdisplay_cat.error() << "unexpected CheckDepthStencilMatch failure for " << D3DFormatStr(TestDisplayMode.Format) << ", " << D3DFormatStr(TestDepthFmt) << endl;
exit(1);
} }
} }
}
if(bVerboseMode)
wdxdisplay_cat.info() << "FindBestDepthFmt returns fmt " << D3DFormatStr(*pBestFmt) << endl;
return (*pBestFmt != D3DFMT_UNKNOWN); return (*pBestFmt != D3DFMT_UNKNOWN);
} }
@ -2031,7 +2042,7 @@ bool wdxGraphicsWindow::FindBestDepthFormat(DXScreenData &Display,D3DDISPLAYMODE
// if no valid mode found, returns *pSuggestedPixFmt = D3DFMT_UNKNOWN; // if no valid mode found, returns *pSuggestedPixFmt = D3DFMT_UNKNOWN;
void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT RequestedYsize,bool bWantZBuffer,bool bWantStencil, void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT RequestedYsize,bool bWantZBuffer,bool bWantStencil,
UINT *pSupportedScreenDepthsMask,bool *pCouldntFindAnyValidZBuf, UINT *pSupportedScreenDepthsMask,bool *pCouldntFindAnyValidZBuf,
D3DFORMAT *pSuggestedPixFmt) { D3DFORMAT *pSuggestedPixFmt, bool bVerboseMode) {
assert(IS_VALID_PTR(_dxgsg)); assert(IS_VALID_PTR(_dxgsg));
assert(IS_VALID_PTR(_dxgsg->scrn.pD3D8)); assert(IS_VALID_PTR(_dxgsg->scrn.pD3D8));
HRESULT hr; HRESULT hr;
@ -2043,13 +2054,15 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re
#endif #endif
*pSuggestedPixFmt = D3DFMT_UNKNOWN; *pSuggestedPixFmt = D3DFMT_UNKNOWN;
*pSupportedScreenDepthsMask = 0x0; *pSupportedScreenDepthsMask = 0x0;
*pCouldntFindAnyValidZBuf=false;
int cNumModes=_dxgsg->scrn.pD3D8->GetAdapterModeCount(_dxgsg->scrn.CardIDNum); int cNumModes=_dxgsg->scrn.pD3D8->GetAdapterModeCount(_dxgsg->scrn.CardIDNum);
D3DDISPLAYMODE BestDispMode; D3DDISPLAYMODE BestDispMode;
ZeroMemory(&BestDispMode,sizeof(BestDispMode)); ZeroMemory(&BestDispMode,sizeof(BestDispMode));
*pCouldntFindAnyValidZBuf=false; if(bVerboseMode)
wdxdisplay_cat.info() << "searching for valid display modes at res: (" << RequestedXsize << "," << RequestedYsize << "), TotalModes: " << cNumModes<< endl;
for(int i=0;i<cNumModes;i++) { for(int i=0;i<cNumModes;i++) {
D3DDISPLAYMODE dispmode; D3DDISPLAYMODE dispmode;
@ -2064,6 +2077,8 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re
if((dispmode.RefreshRate<60) && (dispmode.RefreshRate>1)) { if((dispmode.RefreshRate<60) && (dispmode.RefreshRate>1)) {
// dont want refresh rates under 60Hz, but 0 or 1 might indicate a default refresh rate, which is usually >=60 // dont want refresh rates under 60Hz, but 0 or 1 might indicate a default refresh rate, which is usually >=60
if(bVerboseMode)
wdxdisplay_cat.info() << "skipping mode["<<i<<"], bad refresh rate: " << dispmode.RefreshRate << endl;
continue; continue;
} }
@ -2073,9 +2088,11 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re
hr = _dxgsg->scrn.pD3D8->CheckDeviceFormat(_dxgsg->scrn.CardIDNum,D3DDEVTYPE_HAL,dispmode.Format, hr = _dxgsg->scrn.pD3D8->CheckDeviceFormat(_dxgsg->scrn.CardIDNum,D3DDEVTYPE_HAL,dispmode.Format,
D3DUSAGE_RENDERTARGET,D3DRTYPE_SURFACE,dispmode.Format); D3DUSAGE_RENDERTARGET,D3DRTYPE_SURFACE,dispmode.Format);
if(FAILED(hr)) { if(FAILED(hr)) {
if(hr==D3DERR_NOTAVAILABLE) if(hr==D3DERR_NOTAVAILABLE) {
if(bVerboseMode)
wdxdisplay_cat.info() << "skipping mode["<<i<<"], CheckDevFmt returns NotAvail for fmt: " << D3DFormatStr(dispmode.Format) << endl;
continue; continue;
else { } else {
wdxdisplay_cat.error() << "CheckDeviceFormat failed for device #" <<_dxgsg->scrn.CardIDNum << D3DERRORSTRING(hr); wdxdisplay_cat.error() << "CheckDeviceFormat failed for device #" <<_dxgsg->scrn.CardIDNum << D3DERRORSTRING(hr);
exit(1); exit(1);
} }
@ -2103,13 +2120,13 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re
RendTgtMinMemReqmt = ((float)RequestedXsize)*((float)RequestedYsize)*bytes_per_pixel*2+REQD_TEXMEM; RendTgtMinMemReqmt = ((float)RequestedXsize)*((float)RequestedYsize)*bytes_per_pixel*2+REQD_TEXMEM;
if(wdxdisplay_cat.is_spam()) if(bVerboseMode || wdxdisplay_cat.is_spam())
wdxdisplay_cat.spam() << "Testing Mode (" <<RequestedXsize<<"x" << RequestedYsize <<"," wdxdisplay_cat.info() << "Testing Mode (" <<RequestedXsize<<"x" << RequestedYsize <<","
<< D3DFormatStr(dispmode.Format) << ")\nReqdVidMem: "<< (int)RendTgtMinMemReqmt << " AvailVidMem: " << _dxgsg->scrn.MaxAvailVidMem << endl; << D3DFormatStr(dispmode.Format) << ")\nReqdVidMem: "<< (int)RendTgtMinMemReqmt << " AvailVidMem: " << _dxgsg->scrn.MaxAvailVidMem << endl;
if(RendTgtMinMemReqmt>_dxgsg->scrn.MaxAvailVidMem) { if(RendTgtMinMemReqmt>_dxgsg->scrn.MaxAvailVidMem) {
if(wdxdisplay_cat.is_debug()) if(bVerboseMode || wdxdisplay_cat.is_debug())
wdxdisplay_cat.debug() << "not enough VidMem for render tgt, skipping display fmt " << D3DFormatStr(dispmode.Format) wdxdisplay_cat.info() << "not enough VidMem for render tgt, skipping display fmt " << D3DFormatStr(dispmode.Format)
<< " (" << (int)RendTgtMinMemReqmt << " > " << _dxgsg->scrn.MaxAvailVidMem << ")\n"; << " (" << (int)RendTgtMinMemReqmt << " > " << _dxgsg->scrn.MaxAvailVidMem << ")\n";
continue; continue;
} }
@ -2128,13 +2145,13 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re
float zbytes_per_pixel = (IS_16BPP_ZBUFFER(zformat) ? 2 : 4); float zbytes_per_pixel = (IS_16BPP_ZBUFFER(zformat) ? 2 : 4);
float MinMemReqmt = RendTgtMinMemReqmt + ((float)RequestedXsize)*((float)RequestedYsize)*zbytes_per_pixel; float MinMemReqmt = RendTgtMinMemReqmt + ((float)RequestedXsize)*((float)RequestedYsize)*zbytes_per_pixel;
if(wdxdisplay_cat.is_spam()) if(bVerboseMode || wdxdisplay_cat.is_spam())
wdxdisplay_cat.spam() << "Testing Mode w/Z (" <<RequestedXsize<<"x" << RequestedYsize <<"," wdxdisplay_cat.info() << "Testing Mode w/Z (" << RequestedXsize << "x" << RequestedYsize << ","
<< D3DFormatStr(dispmode.Format) << ")\nReqdVidMem: "<< (int)MinMemReqmt << " AvailVidMem: " << _dxgsg->scrn.MaxAvailVidMem << endl; << D3DFormatStr(dispmode.Format) << ")\nReqdVidMem: "<< (int)MinMemReqmt << " AvailVidMem: " << _dxgsg->scrn.MaxAvailVidMem << endl;
if(MinMemReqmt>_dxgsg->scrn.MaxAvailVidMem) { if(MinMemReqmt>_dxgsg->scrn.MaxAvailVidMem) {
if(wdxdisplay_cat.is_debug()) if(bVerboseMode || wdxdisplay_cat.is_debug())
wdxdisplay_cat.debug() << "not enough VidMem for RendTgt+zbuf, skipping display fmt " << D3DFormatStr(dispmode.Format) wdxdisplay_cat.info() << "not enough VidMem for RendTgt+zbuf, skipping display fmt " << D3DFormatStr(dispmode.Format)
<< " (" << (int)MinMemReqmt << " > " << _dxgsg->scrn.MaxAvailVidMem << ")\n"; << " (" << (int)MinMemReqmt << " > " << _dxgsg->scrn.MaxAvailVidMem << ")\n";
continue; continue;
} }
@ -2143,7 +2160,9 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re
if(!IS_16BPP_ZBUFFER(zformat)) { if(!IS_16BPP_ZBUFFER(zformat)) {
// see if things fit with a 16bpp zbuffer // see if things fit with a 16bpp zbuffer
if(!FindBestDepthFormat(_dxgsg->scrn,dispmode,&zformat,bWantStencil,true)) { if(!FindBestDepthFormat(_dxgsg->scrn,dispmode,&zformat,bWantStencil,true,bVerboseMode)) {
if(bVerboseMode)
wdxdisplay_cat.info() << "FindBestDepthFmt rejected Mode["<<i<<"] (" <<RequestedXsize<<"x" << RequestedYsize <<","<< D3DFormatStr(dispmode.Format) << endl;
*pCouldntFindAnyValidZBuf=true; *pCouldntFindAnyValidZBuf=true;
continue; continue;
} }
@ -2155,6 +2174,10 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re
} }
} }
if(bVerboseMode || wdxdisplay_cat.is_spam())
wdxdisplay_cat.info() << "Validated Mode (" <<RequestedXsize<<"x" << RequestedYsize <<","
<< D3DFormatStr(dispmode.Format) << endl;
switch(dispmode.Format) { switch(dispmode.Format) {
case D3DFMT_X1R5G5B5: case D3DFMT_X1R5G5B5:
*pSupportedScreenDepthsMask |= X1R5G5B5_FLAG; *pSupportedScreenDepthsMask |= X1R5G5B5_FLAG;
@ -2170,7 +2193,7 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re
break; break;
default: default:
//Render target formats should be only D3DFMT_X1R5G5B5, D3DFMT_R5G6B5, D3DFMT_X8R8G8B8 (or R8G8B8?) //Render target formats should be only D3DFMT_X1R5G5B5, D3DFMT_R5G6B5, D3DFMT_X8R8G8B8 (or R8G8B8?)
wdxdisplay_cat.debug() << "unrecognized supported screen D3DFMT returned by EnumAdapterDisplayModes!\n"; wdxdisplay_cat.error() << "unrecognized supported fmt "<< D3DFormatStr(dispmode.Format)<<" returned by EnumAdapterDisplayModes!\n";
} }
} }
@ -2183,6 +2206,9 @@ void wdxGraphicsWindow::search_for_valid_displaymode(UINT RequestedXsize,UINT Re
*pSuggestedPixFmt = D3DFMT_R5G6B5; *pSuggestedPixFmt = D3DFMT_R5G6B5;
else if(*pSupportedScreenDepthsMask & X1R5G5B5_FLAG) else if(*pSupportedScreenDepthsMask & X1R5G5B5_FLAG)
*pSuggestedPixFmt = D3DFMT_X1R5G5B5; *pSuggestedPixFmt = D3DFMT_X1R5G5B5;
if(bVerboseMode || wdxdisplay_cat.is_spam())
wdxdisplay_cat.info() << "search_for_valid_device returns fmt: "<< D3DFormatStr(*pSuggestedPixFmt) << endl;
} }
bool is_badvidmem_card(D3DADAPTER_IDENTIFIER8 *pDevID) { bool is_badvidmem_card(D3DADAPTER_IDENTIFIER8 *pDevID) {
@ -2280,7 +2306,6 @@ bool wdxGraphicsWindow::search_for_device(LPDIRECT3D8 pD3D8,DXDeviceInfo *pDevIn
bool bCouldntFindValidZBuf; bool bCouldntFindValidZBuf;
if(!_dxgsg->scrn.bIsLowVidMemCard) { if(!_dxgsg->scrn.bIsLowVidMemCard) {
bool bUseDefaultSize=dx_pick_best_screenres&& bool bUseDefaultSize=dx_pick_best_screenres&&
((_dxgsg->scrn.MaxAvailVidMem == UNKNOWN_VIDMEM_SIZE) || ((_dxgsg->scrn.MaxAvailVidMem == UNKNOWN_VIDMEM_SIZE) ||
is_badvidmem_card(&_dxgsg->scrn.DXDeviceID)); is_badvidmem_card(&_dxgsg->scrn.DXDeviceID));
@ -2356,6 +2381,12 @@ bool wdxGraphicsWindow::search_for_device(LPDIRECT3D8 pD3D8,DXDeviceInfo *pDevIn
wdxdisplay_cat.fatal() wdxdisplay_cat.fatal()
<< (bCouldntFindValidZBuf ? "Couldnt find valid zbuffer format to go with FullScreen mode" : "No supported FullScreen modes") << (bCouldntFindValidZBuf ? "Couldnt find valid zbuffer format to go with FullScreen mode" : "No supported FullScreen modes")
<< " at " << dwRenderWidth << "x" << dwRenderHeight << " for device #" << _dxgsg->scrn.CardIDNum <<endl; << " at " << dwRenderWidth << "x" << dwRenderHeight << " for device #" << _dxgsg->scrn.CardIDNum <<endl;
// run it again in verbose mode to get more dbg info to log
search_for_valid_displaymode(dwRenderWidth,dwRenderHeight,bNeedZBuffer,bWantStencil,
&_dxgsg->scrn.SupportedScreenDepthsMask,
&bCouldntFindValidZBuf,
&pixFmt,true);
return false; return false;
} }
} }
@ -2382,6 +2413,12 @@ bool wdxGraphicsWindow::search_for_device(LPDIRECT3D8 pD3D8,DXDeviceInfo *pDevIn
else { else {
wdxdisplay_cat.fatal() << "Low Memory VidCard has no supported FullScreen 16bpp resolutions at "<< dwRenderWidth << "x" << dwRenderHeight wdxdisplay_cat.fatal() << "Low Memory VidCard has no supported FullScreen 16bpp resolutions at "<< dwRenderWidth << "x" << dwRenderHeight
<< " for device #" << pDevInfo->cardID << " (" << _dxgsg->scrn.DXDeviceID.Description <<"), skipping device...\n"; << " for device #" << pDevInfo->cardID << " (" << _dxgsg->scrn.DXDeviceID.Description <<"), skipping device...\n";
// run it again in verbose mode to get more dbg info to log
search_for_valid_displaymode(dwRenderWidth,dwRenderHeight,bNeedZBuffer,bWantStencil,
&_dxgsg->scrn.SupportedScreenDepthsMask,
&bCouldntFindValidZBuf,
&pixFmt,true);
return false; return false;
} }

View File

@ -100,8 +100,8 @@ protected:
bool search_for_device(LPDIRECT3D8 pD3D8,DXDeviceInfo *pDevinfo); bool search_for_device(LPDIRECT3D8 pD3D8,DXDeviceInfo *pDevinfo);
void search_for_valid_displaymode(UINT RequestedXsize,UINT RequestedYsize,bool bWantZBuffer,bool bWantStencil, void search_for_valid_displaymode(UINT RequestedXsize,UINT RequestedYsize,bool bWantZBuffer,bool bWantStencil,
UINT *pSupportedScreenDepthsMask,bool *pCouldntFindAnyValidZBuf, UINT *pSupportedScreenDepthsMask,bool *pCouldntFindAnyValidZBuf,
D3DFORMAT *pSuggestedPixFmt); D3DFORMAT *pSuggestedPixFmt,bool bVerboseMode = false);
bool FindBestDepthFormat(DXScreenData &Display,D3DDISPLAYMODE &TestDisplayMode,D3DFORMAT *pBestFmt,bool bWantStencil,bool bForce16bpp) const; bool FindBestDepthFormat(DXScreenData &Display,D3DDISPLAYMODE &TestDisplayMode,D3DFORMAT *pBestFmt,bool bWantStencil,bool bForce16bpp,bool bVerboseMode = false) const;
void init_resized_window(void); void init_resized_window(void);
bool reset_device_resize_window(UINT new_xsize, UINT new_ysize); bool reset_device_resize_window(UINT new_xsize, UINT new_ysize);
void setup_colormap(void); void setup_colormap(void);