From d94aa65179247f85c915aa608cb134be21606b14 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Mon, 26 May 2003 23:36:17 +0000 Subject: [PATCH] add VideoDriverInfo --- stepmania/src/StepMania.dsp | 55 +++++--- stepmania/src/StepMania.vcproj | 12 ++ .../src/archutils/Win32/DebugInfoHunt.cpp | 100 +-------------- .../src/archutils/Win32/VideoDriverInfo.cpp | 120 ++++++++++++++++++ .../src/archutils/Win32/VideoDriverInfo.h | 17 +++ 5 files changed, 185 insertions(+), 119 deletions(-) create mode 100644 stepmania/src/archutils/Win32/VideoDriverInfo.cpp create mode 100644 stepmania/src/archutils/Win32/VideoDriverInfo.h diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index 5494aa0f75..e27f80613a 100644 --- a/stepmania/src/StepMania.dsp +++ b/stepmania/src/StepMania.dsp @@ -64,7 +64,7 @@ IntDir=.\../Debug6 TargetDir=\temp\stepmania TargetName=StepMania-debug-ogl SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -82,25 +82,25 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania # PROP Intermediate_Dir "StepMania___Xbox_Debug___VC6" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -CPP=cl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo +XBCP=xbecopy.exe +# ADD BASE XBCP /NOLOGO +# ADD XBCP /NOLOGO +XBE=imagebld.exe +# ADD BASE XBE /nologo /stack:0x10000 /debug +# ADD XBE /nologo /stack:0x10000 /debug LINK32=link.exe # ADD BASE LINK32 $(intdir)\verstub.obj kernel32.lib shell32.lib user32.lib gdi32.lib advapi32.lib winmm.lib /nologo /pdb:"../debug6/StepMania-debug.pdb" /map /debug /machine:IX86 /nodefaultlib:"libcmtd.lib" /out:"../StepMania-debug.exe" # SUBTRACT BASE LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib # ADD LINK32 $(intdir)\verstub.obj kernel32.lib shell32.lib user32.lib gdi32.lib advapi32.lib winmm.lib /nologo /pdb:"../debug6/StepMania-debug.pdb" /map /debug /machine:IX86 /nodefaultlib:"libcmtd.lib" /out:"../StepMania-debug.exe" # SUBTRACT LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib -XBE=imagebld.exe -# ADD BASE XBE /nologo /stack:0x10000 /debug -# ADD XBE /nologo /stack:0x10000 /debug -XBCP=xbecopy.exe -# ADD BASE XBCP /NOLOGO -# ADD XBCP /NOLOGO +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c # Begin Special Build Tool -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -140,7 +140,7 @@ IntDir=.\../Release6 TargetDir=\temp\stepmania TargetName=StepMania-ogl SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -1775,6 +1775,23 @@ SOURCE=.\archutils\Win32\USB.cpp SOURCE=.\archutils\Win32\USB.h # End Source File +# Begin Source File + +SOURCE=.\archutils\Win32\VideoDriverInfo.cpp + +!IF "$(CFG)" == "StepMania - Win32 Debug" + +!ELSEIF "$(CFG)" == "StepMania - Xbox Debug" + +!ELSEIF "$(CFG)" == "StepMania - Win32 Release" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\archutils\Win32\VideoDriverInfo.h +# End Source File # End Group # Begin Source File @@ -3183,15 +3200,11 @@ SOURCE=.\ScreenAutogenOptions.h SOURCE=.\ScreenAutoGraphicDetail.cpp -!IF "$(CFG)" == "StepMania - Win32 Debug OGL" - -!ELSEIF "$(CFG)" == "StepMania - Win32 Debug D3D" +!IF "$(CFG)" == "StepMania - Win32 Debug" !ELSEIF "$(CFG)" == "StepMania - Xbox Debug" -!ELSEIF "$(CFG)" == "StepMania - Win32 Release D3D" - -!ELSEIF "$(CFG)" == "StepMania - Win32 Release OGL" +!ELSEIF "$(CFG)" == "StepMania - Win32 Release" !ENDIF diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj index 5df191f846..5ab174bd1e 100644 --- a/stepmania/src/StepMania.vcproj +++ b/stepmania/src/StepMania.vcproj @@ -189,6 +189,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + + @@ -992,6 +998,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + + diff --git a/stepmania/src/archutils/Win32/DebugInfoHunt.cpp b/stepmania/src/archutils/Win32/DebugInfoHunt.cpp index be973994ad..1f9d5661cc 100644 --- a/stepmania/src/archutils/Win32/DebugInfoHunt.cpp +++ b/stepmania/src/archutils/Win32/DebugInfoHunt.cpp @@ -2,17 +2,10 @@ #include "DebugInfoHunt.h" #include "RageLog.h" #include "RageUtil.h" +#include "VideoDriverInfo.h" #include "../../archutils/Win32/GotoURL.h" -struct VideoDriverInfo -{ - CString sProvider; - CString sDescription; - CString sVersion; - CString sDate; - CString sDeviceID; -}; void LogVideoDriverInfo( VideoDriverInfo info ) @@ -25,90 +18,6 @@ void LogVideoDriverInfo( VideoDriverInfo info ) LOG->Info("%-15s:\t%s", "DeviceID", info.sDeviceID.c_str()); } -CString GetRegValue( HKEY hKey, CString sName ) -{ - char szBuffer[MAX_PATH]; - DWORD nSize = sizeof(szBuffer)-1; - if( RegQueryValueEx(hKey, sName, NULL, NULL, (LPBYTE)szBuffer, &nSize) == ERROR_SUCCESS ) - return szBuffer; - else - return ""; -} - -bool GetVideoDriverInfo9x( int iIndex, VideoDriverInfo& infoOut ) -{ - HKEY hkey; - CString sKey = ssprintf("SYSTEM\\CurrentControlSet\\Services\\Class\\Display\\%04d",iIndex); - if (RegOpenKey(HKEY_LOCAL_MACHINE, sKey, &hkey) != ERROR_SUCCESS) - return false; - - infoOut.sDate = GetRegValue( hkey, "DriverDate"); - infoOut.sDescription = GetRegValue( hkey, "DriverDesc"); - infoOut.sDeviceID = GetRegValue( hkey, "MatchingDeviceId"); - infoOut.sProvider = GetRegValue( hkey, "ProviderName"); - infoOut.sVersion = GetRegValue( hkey, "Ver"); - - RegCloseKey(hkey); - return true; -} - - -bool GetVideoDriverInfo2k( int iIndex, VideoDriverInfo& infoOut ) -{ - HKEY hkey; - CString sKey = ssprintf("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\%04d",iIndex); - if (RegOpenKey(HKEY_LOCAL_MACHINE, sKey, &hkey) != ERROR_SUCCESS) - return false; - - infoOut.sDate = GetRegValue( hkey, "DriverDate"); - infoOut.sDescription = GetRegValue( hkey, "DriverDesc"); - infoOut.sDeviceID = GetRegValue( hkey, "MatchingDeviceId"); - infoOut.sProvider = GetRegValue( hkey, "ProviderName"); - infoOut.sVersion = GetRegValue( hkey, "DriverVersion"); - - RegCloseKey(hkey); - return true; -} - - -CString GetPrimaryVideoName9xAnd2k() // this will not work on 95 and NT b/c of EnumDisplayDevices -{ - - typedef BOOL (WINAPI* pfnEnumDisplayDevices)(PVOID,DWORD,PDISPLAY_DEVICE,DWORD); - pfnEnumDisplayDevices EnumDisplayDevices; - HINSTANCE hInstUser32; - - hInstUser32 = LoadLibrary("User32.DLL"); - if( !hInstUser32 ) - return ""; - - // VC6 don't have a stub to static link with, so link dynamically. - EnumDisplayDevices = (pfnEnumDisplayDevices)GetProcAddress(hInstUser32,"EnumDisplayDevicesA"); - if( EnumDisplayDevices == NULL ) - { - FreeLibrary(hInstUser32); - return ""; - } - - CString sPrimaryDeviceName; - for( DWORD i=0; true; i++ ) - { - DISPLAY_DEVICE dd; - ZERO( dd ); - dd.cb = sizeof(dd); - if( !EnumDisplayDevices(NULL, i, &dd, 0) ) - break; - if( dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE ) - { - sPrimaryDeviceName = (char*)dd.DeviceString; - break; - } - } - - FreeLibrary(hInstUser32); - return sPrimaryDeviceName; -} - @@ -121,15 +30,10 @@ static void GetDisplayDriverDebugInfo() else LOG->Info( "Primary display driver: %s", sPrimaryDeviceName.c_str() ); - OSVERSIONINFO version; - version.dwOSVersionInfoSize=sizeof(version); - GetVersionEx(&version); - bool bIsWin9x = version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS; - for( int i=0; true; i++ ) { VideoDriverInfo info; - if( ! (bIsWin9x ? GetVideoDriverInfo9x : GetVideoDriverInfo2k)(i,info) ) + if( !GetVideoDriverInfo(i, info) ) break; if( sPrimaryDeviceName == "" ) // failed to get primary disaply name (NT4) diff --git a/stepmania/src/archutils/Win32/VideoDriverInfo.cpp b/stepmania/src/archutils/Win32/VideoDriverInfo.cpp new file mode 100644 index 0000000000..07804cede3 --- /dev/null +++ b/stepmania/src/archutils/Win32/VideoDriverInfo.cpp @@ -0,0 +1,120 @@ +#include "global.h" +#include "VideoDriverInfo.h" +#include "RageUtil.h" +#include "RageLog.h" + +static CString GetRegValue( HKEY hKey, CString sName ) +{ + char szBuffer[MAX_PATH]; + DWORD nSize = sizeof(szBuffer)-1; + if( RegQueryValueEx(hKey, sName, NULL, NULL, (LPBYTE)szBuffer, &nSize) == ERROR_SUCCESS ) + return szBuffer; + else + return ""; +} + +bool GetVideoDriverInfo9x( int iIndex, VideoDriverInfo& infoOut ) +{ + HKEY hkey; + CString sKey = ssprintf("SYSTEM\\CurrentControlSet\\Services\\Class\\Display\\%04d",iIndex); + if (RegOpenKey(HKEY_LOCAL_MACHINE, sKey, &hkey) != ERROR_SUCCESS) + return false; + + infoOut.sDate = GetRegValue( hkey, "DriverDate"); + infoOut.sDescription = GetRegValue( hkey, "DriverDesc"); + infoOut.sDeviceID = GetRegValue( hkey, "MatchingDeviceId"); + infoOut.sProvider = GetRegValue( hkey, "ProviderName"); + infoOut.sVersion = GetRegValue( hkey, "Ver"); + + RegCloseKey(hkey); + return true; +} + + +bool GetVideoDriverInfo2k( int iIndex, VideoDriverInfo& infoOut ) +{ + HKEY hkey; + CString sKey = ssprintf("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\%04d",iIndex); + if (RegOpenKey(HKEY_LOCAL_MACHINE, sKey, &hkey) != ERROR_SUCCESS) + return false; + + infoOut.sDate = GetRegValue( hkey, "DriverDate"); + infoOut.sDescription = GetRegValue( hkey, "DriverDesc"); + infoOut.sDeviceID = GetRegValue( hkey, "MatchingDeviceId"); + infoOut.sProvider = GetRegValue( hkey, "ProviderName"); + infoOut.sVersion = GetRegValue( hkey, "DriverVersion"); + + RegCloseKey(hkey); + return true; +} + + +// this will not work on 95 and NT b/c of EnumDisplayDevices +CString GetPrimaryVideoName9xAnd2k() +{ + + typedef BOOL (WINAPI* pfnEnumDisplayDevices)(PVOID,DWORD,PDISPLAY_DEVICE,DWORD); + pfnEnumDisplayDevices EnumDisplayDevices; + HINSTANCE hInstUser32; + + hInstUser32 = LoadLibrary("User32.DLL"); + if( !hInstUser32 ) + return ""; + + // VC6 don't have a stub to static link with, so link dynamically. + EnumDisplayDevices = (pfnEnumDisplayDevices)GetProcAddress(hInstUser32,"EnumDisplayDevicesA"); + if( EnumDisplayDevices == NULL ) + { + FreeLibrary(hInstUser32); + return ""; + } + + CString sPrimaryDeviceName; + for( DWORD i=0; true; i++ ) + { + DISPLAY_DEVICE dd; + ZERO( dd ); + dd.cb = sizeof(dd); + if( !EnumDisplayDevices(NULL, i, &dd, 0) ) + break; + if( dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE ) + { + sPrimaryDeviceName = (char*)dd.DeviceString; + break; + } + } + + FreeLibrary(hInstUser32); + return sPrimaryDeviceName; +} + +void GetPrimaryVideoDriverInfo(VideoDriverInfo &info) +{ + const CString sPrimaryDeviceName = GetPrimaryVideoName9xAnd2k(); + if( sPrimaryDeviceName == "" ) + LOG->Warn("GetPrimaryVideoName9xAnd2k failed; renderer selection may be wrong"); + + for( int i=0; true; i++ ) + { + if( !GetVideoDriverInfo(i, info) ) + RageException::Throw( "Got video name \"%s\" but wasn't enumerated among %i devices", + sPrimaryDeviceName.c_str(), i ); + + if( sPrimaryDeviceName == "" ) // failed to get primary display name (NT4) + return; + + if( info.sDescription == sPrimaryDeviceName ) + return; + } +} + +/* Get info for the given card number. Return false if that card doesn't exist. */ +bool GetVideoDriverInfo(int cardno, VideoDriverInfo &info) +{ + OSVERSIONINFO version; + version.dwOSVersionInfoSize=sizeof(version); + GetVersionEx(&version); + const bool bIsWin9x = version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS; + + return (bIsWin9x ? GetVideoDriverInfo9x : GetVideoDriverInfo2k)(cardno,info); +} diff --git a/stepmania/src/archutils/Win32/VideoDriverInfo.h b/stepmania/src/archutils/Win32/VideoDriverInfo.h new file mode 100644 index 0000000000..6e8d980b67 --- /dev/null +++ b/stepmania/src/archutils/Win32/VideoDriverInfo.h @@ -0,0 +1,17 @@ +#ifndef VIDEO_DRIVER_INFO_H +#define VIDEO_DRIVER_INFO_H + +struct VideoDriverInfo +{ + CString sProvider; + CString sDescription; + CString sVersion; + CString sDate; + CString sDeviceID; +}; + +CString GetPrimaryVideoName9xAnd2k(); +bool GetVideoDriverInfo(int cardno, VideoDriverInfo &info); +void GetPrimaryVideoDriverInfo(VideoDriverInfo &info); + +#endif