diff options
author | Alessandro Borges <[email protected]> | 2008-01-24 11:29:13 +0000 |
---|---|---|
committer | Alessandro Borges <[email protected]> | 2008-01-24 11:29:13 +0000 |
commit | 108eb0583d76649dd308b0f20271630abfa8a60b (patch) | |
tree | 0be4750627db42a02dff89f49aa1ab98c63cf059 /src | |
parent | 251a0cbdf53c8533158a57b73c90a949c62f46be (diff) |
Issue number: #513
Submitted by: Aces
Comments : Fix crash on unknow devices, increase vendor list, added Windows Server
2008/Vista strings, Vendor #0 is assigned as RDP - Remote Desktop
git-svn-id: https://svn.java.net/svn/j3d-core~svn/trunk@883 ba19aa83-45c5-6ac9-afd3-db810772062c
Diffstat (limited to 'src')
-rw-r--r-- | src/native/d3d/D3dDriverInfo.cpp | 115 |
1 files changed, 85 insertions, 30 deletions
diff --git a/src/native/d3d/D3dDriverInfo.cpp b/src/native/d3d/D3dDriverInfo.cpp index 21692e8..bf192ea 100644 --- a/src/native/d3d/D3dDriverInfo.cpp +++ b/src/native/d3d/D3dDriverInfo.cpp @@ -98,6 +98,7 @@ VOID computeRGBDepth(D3dDriverInfo *pDriver) case D3DFMT_A8R3G3B2: pDriver->redDepth = pDriver->greenDepth = 3; pDriver->blueDepth = 2; + break; default: // 8 color indexed or less pDriver->redDepth = pDriver->blueDepth = pDriver->greenDepth = 0; @@ -108,41 +109,90 @@ VOID computeRGBDepth(D3dDriverInfo *pDriver) VOID setInfo(D3dDeviceInfo* pDevice,D3DADAPTER_IDENTIFIER9 *identifier) { - char* str = (char *)"UNKNOW Vendor "; - + char* str = (char *)"UNKNOW VGA Vendor."; switch( identifier->VendorId ) { // A more complete list can be found from http://www.pcidatabase.com/vendors.php?sort=id + case 0x0000: str = (char *) "RDP Remote Desktop DirectDraw"; break; case 0x1002: str = (char *) "ATI Technologies Inc."; break; + case 0x1004: str = (char *) "VLSI Technology."; break; + case 0x100B: str = (char *) "National Semiconductors."; break; case 0x1013: str = (char *) "Cirrus Logic."; break; + case 0x1014: str = (char *) "IBM"; break; + case 0x1017: str = (char *) "Spea Software AG."; break; + + case 0x1022: str = (char *) "Advanced Micro Devices (AMD)."; break; + case 0x1025: str = (char *) "ALI Acer Labs Inc."; break; case 0x1023: str = (char *) "Trident Microsistems."; break; - case 0x102B: str = (char *) "Matrox Electronic Systems Ltd."; break; + case 0x102C: str = (char *) "Asiliant (Chips And Technologies)."; break; + case 0x102B: str = (char *) "Matrox Electronic Systems Ltd."; break; + case 0x1031: str = (char *) "MIRO Computer Products AG"; break; + case 0x1033: str = (char *) "NEC Electronics."; break; + case 0x1039: str = (char *) "SiS Silicon Integrated Systems."; break; + case 0x1045: str = (char *) "OPTi"; break; + case 0x104C: str = (char *) "Texas Instruments."; break; + case 0x104E: str = (char *) "Oak Technology."; break; + case 0x1050: str = (char *) "Winbond Electronics Corp."; break; + case 0x105D: str = (char *) "Number Nine Visual Technology"; break; + case 0x1060: str = (char *) "United Microelectronics."; break; + case 0x106B: str = (char *) "Apple Computer,Inc."; break; + case 0x1073: str = (char *) "Yamaha Corporation."; break; + case 0x108E: str = (char *) "Sun Microsystems."; break; - case 0x10DE: str = (char *) "NVIDIA Corporation"; break; - case 0x121A: str = (char *) "3dfx Interactive Inc"; break; + case 0x1091: str = (char *) "Intergraph Corporation."; break; + + case 0x10DE: str = (char *) "NVIDIA Corporation."; break; + case 0x10EA: str = (char *) "Tvia, Inc."; break; + case 0x10ED: str = (char *) "Ascii Corporation"; break; + case 0x1092: str = (char *) "Diamond Multimedia"; break; + case 0x1102: str = (char *) "Creative Technology LTD."; break; + case 0x1117: str = (char *) "Datacube Inc."; break; + case 0x1106: str = (char *) "VIA Technology. "; break; + case 0x1135: str = (char *) "Fuji Xerox Co Ltd."; break; + case 0x1142: str = (char *) "Alliance Semiconductor"; break; + case 0x117f: str = (char *) "Integrated Circuit Systems."; break; + case 0x11AE: str = (char *) "Scitex Corporation Ltd."; break; + + case 0x121A: str = (char *) "3dfx Interactive Inc."; break; + case 0x1251: str = (char *) "VLSI Solution OY."; break; + case 0x126F: str = (char *) "Silicon Motion."; break; + case 0x1295: str = (char *) "Imagination Technologies."; break; + case 0x1414: str = (char *) "MicroSoft."; break; + case 0x15AD: str = (char *) "VMware Inc."; break; + case 0x18CA: str = (char *) "XGI xgitech."; break; + case 0x1888: str = (char *) "Varisys Limited"; break; + + case 0x1B13: str = (char *) "Jaton Corporation USA."; break; case 0x3D3D: str = (char *) "3Dlabs Inc, Ltd."; break; case 0x5333: str = (char *) "S3 Graphics Co., Ltd."; break; - case 0x8086: str = (char *) "Intel Corporation"; break; - default: sprintf( str, "vendor ID %x.",identifier->VendorId); - break; - } + case 0x8086: str = (char *) "Intel Corporation."; break; + case 0xAA42: str = (char *) "Scitex Digital Video"; break; + + case 0xDEAF: str = (char *) "Middle Digital, Inc."; break; + case 0xEDD8: str = (char *) "ARK Logic, Inc."; break; + case 0xFFF3: str = (char *) "VMWare Inc.(Legacy)"; break; + } pDevice->deviceVendor = str; - pDevice->deviceRenderer = identifier->Description; - + pDevice->deviceRenderer = identifier->Description; + // better handling of RDP - Remote Desktop + if(identifier->VendorId==0 && identifier->DeviceId==0){ + pDevice->deviceRenderer = (char *) "RDP - No Hardware D3D"; + } + char version[ 128 ]; - sprintf( version, "%d.%d.%d.%d", HIWORD( identifier->DriverVersion.HighPart ), + sprintf( version, "%x.%x.%x.%x", HIWORD( identifier->DriverVersion.HighPart ), LOWORD( identifier->DriverVersion.HighPart ), HIWORD( identifier->DriverVersion.LowPart ), LOWORD( identifier->DriverVersion.LowPart ) ); - pDevice->deviceVersion = (char *)version; + pDevice->deviceVersion = (char *)version; + } VOID buildDriverList(LPDIRECT3D9 pD3D) { numDriver = pD3D->GetAdapterCount(); - if (numDriver <= 0) { // keep d3dDriverList = NULL for checking later D3dCtx::d3dError(DRIVERNOTFOUND); @@ -161,8 +211,7 @@ VOID buildDriverList(LPDIRECT3D9 pD3D) for (int i = 0; i < numDriver; i++ ) { pDriver = new D3dDriverInfo(); d3dDriverList[i] = pDriver; - pD3D->GetAdapterIdentifier(i, 0, - &pDriver->adapterIdentifier); + pD3D->GetAdapterIdentifier(i, 0, &pDriver->adapterIdentifier); pD3D->GetAdapterDisplayMode(i, &pDriver->desktopMode); computeRGBDepth(pDriver); pDriver->hMonitor = pD3D->GetAdapterMonitor(i); @@ -175,13 +224,13 @@ VOID buildDriverList(LPDIRECT3D9 pD3D) pDevice->deviceType = deviceTypes[j]; pD3D->GetDeviceCaps(i, deviceTypes[j], &d3dCaps); pDevice->setCaps(&d3dCaps); - - pDevice->desktopCompatible = + + pDevice->desktopCompatible = SUCCEEDED(pD3D->CheckDeviceType(i, deviceTypes[j], pDriver->desktopMode.Format, pDriver->desktopMode.Format, TRUE)); - + pDevice->fullscreenCompatible = SUCCEEDED(pD3D->CheckDeviceType(i, deviceTypes[j], pDriver->desktopMode.Format, @@ -190,6 +239,7 @@ VOID buildDriverList(LPDIRECT3D9 pD3D) pDevice->maxZBufferDepthSize = 0; + if (pDevice->isHardwareTnL) { strcpy(pDevice->deviceName, "Transform & Light Hardware Rasterizer"); } else if (pDevice->isHardware) { @@ -199,8 +249,9 @@ VOID buildDriverList(LPDIRECT3D9 pD3D) } //issue 135 put here info about vendor and device model setInfo(pDevice, &pDriver->adapterIdentifier); - + for (int k=0; k < D3DDEPTHFORMATSIZE; k++) { + pDevice->depthFormatSupport[k] = SUCCEEDED(pD3D->CheckDeviceFormat(i, deviceTypes[j], pDriver->desktopMode.Format, @@ -225,7 +276,6 @@ VOID buildDriverList(LPDIRECT3D9 pD3D) } } } - // Fix to Issue 226 : D3D - fail on stress test for the creation and destruction of Canvases DWORD bitmask = 0; pDevice->multiSampleSupport = 0; @@ -255,6 +305,7 @@ VOID buildDriverList(LPDIRECT3D9 pD3D) }// for mtype }//for j - device Types }// for i - numDriver + } @@ -273,7 +324,6 @@ VOID printInfo() { printf("Java 3D 1.5.2, Windows version is %d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion); - printf("Build: %d, ", LOWORD(osvi.dwBuildNumber)); switch(osvi.dwPlatformId) { @@ -283,8 +333,14 @@ VOID printInfo() case VER_PLATFORM_WIN32_WINDOWS: printf("Windows 95/98"); break; - case VER_PLATFORM_WIN32_NT: - printf("Windows NT/2000/XP"); + case VER_PLATFORM_WIN32_NT: + //printf("Windows NT/2000/XP"); + if(osvi.dwMajorVersion==5){ + printf("Windows NT/2000/XP"); + } + if(osvi.dwMajorVersion==6){ + printf("Windows Server 2008/Vista"); + } break; } @@ -298,12 +354,12 @@ VOID printInfo() printf("\n[Display Driver] %s, %s, Product %d\n", id->Driver, id->Description, HIWORD(id->DriverVersion.HighPart)); - printf(" Version %d.%d, Build %d, VendorId %d\n", + printf(" Version %d.%d, Build %d, VendorId %x\n", LOWORD(id->DriverVersion.HighPart), HIWORD(id->DriverVersion.LowPart), LOWORD(id->DriverVersion.LowPart), id->VendorId); - printf(" DeviceId %d, SubSysId %d, Revision %d\n", + printf(" DeviceId %x, SubSysId %x, Revision %d\n", id->VendorId, id->DeviceId, id->SubSysId, id->Revision); printf(" [Desktop Mode] %dx%d ", @@ -339,10 +395,9 @@ VOID D3dDriverInfo::initialize(JNIEnv *env) return; } FreeLibrary(hD3D9DLL); - - + LPDIRECT3D9 pD3D = Direct3DCreate9( D3D_SDK_VERSION ); - if (debug){ + if (debug && pD3D != NULL){ printf("[Java3D] Using DirectX D3D 9.0 or higher.\n"); printf("[Java3D] DirectX D3D renderer build 1.5.2\n"); } @@ -354,11 +409,11 @@ VOID D3dDriverInfo::initialize(JNIEnv *env) // must appear before buildDriverList in order to // set VertexBufferLimit correctly in D3dDeviceInfo D3dCtx::setVBLimitProperty(env); - buildDriverList(pD3D); SafeRelease(pD3D); + //D3dCtx::setDebugProperty(env); D3dCtx::setDebugProperty(env); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |