aboutsummaryrefslogtreecommitdiffstats
path: root/src/native/d3d
diff options
context:
space:
mode:
authorAlessandro Borges <[email protected]>2008-01-24 11:29:13 +0000
committerAlessandro Borges <[email protected]>2008-01-24 11:29:13 +0000
commit108eb0583d76649dd308b0f20271630abfa8a60b (patch)
tree0be4750627db42a02dff89f49aa1ab98c63cf059 /src/native/d3d
parent251a0cbdf53c8533158a57b73c90a949c62f46be (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/native/d3d')
-rw-r--r--src/native/d3d/D3dDriverInfo.cpp115
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);