diff options
author | Sven Gothel <[email protected]> | 2010-12-19 00:45:18 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2010-12-19 00:45:18 +0100 |
commit | 5166d6a6b617ccb15c40fcb8d4eac2800527aa7b (patch) | |
tree | 7a9debae4db5929e4e9e8351e2c5cd778c40c64c /make | |
parent | 5f67805a1cba7390cde0f862cbe4d4fcce3396ee (diff) |
Adding NVIDIA 'Threaded optimization' workaround/fix at initialization on Windows for javaws/applets.
It has been observed that for some combinations, eg:
- Windows 7 64bit (other variants may apply too)
- NVIDIA 8600M GT
- 260.99
the NVIDIA setting of 'Threaded optimization' := 'auto' (default) causes the JVM to simply crash
in case of javaws and [jnlp] applets.
'Threaded Optimization' := 'off' works reliable
'Threaded Optimization' := 'on' never works with javaws and applets on the above configuration
A user could workaround this by setting 'Threaded Optimization' := 'off',
however, this would disable many users on the spot,
since you cannot ask the average user for such a task, if she only wants to see a web page.
This patch 'fixes' the 'auto' mode by running the eager GL profile initialization
within a block of single CPU affinity:
SetProcessAffinityMask(pid, 1);
try {
initProfilesForDeviceImpl(device);
} finally {
SetProcessAffinityMask(pid, sysValue);
}
Hopefully we can remove this hack with a driver fix.
However this workaround is as little invasive as possible.
Diffstat (limited to 'make')
-rw-r--r-- | make/stub_includes/win32/windows.h | 5 | ||||
-rw-r--r-- | make/stub_includes/win32/wingdi.h | 5 |
2 files changed, 9 insertions, 1 deletions
diff --git a/make/stub_includes/win32/windows.h b/make/stub_includes/win32/windows.h index 5abf792d1..ddee94c06 100644 --- a/make/stub_includes/win32/windows.h +++ b/make/stub_includes/win32/windows.h @@ -12,7 +12,7 @@ typedef int BOOL; typedef unsigned char BYTE; typedef char CHAR; -typedef unsigned int DWORD; +typedef unsigned __int32 DWORD; typedef int INT; typedef __int32 INT32; typedef __int64 INT64; @@ -29,12 +29,15 @@ typedef HANDLE HWND; typedef __int32 LONG; typedef const char* LPCSTR; typedef void* LPVOID; +typedef unsigned __int64 ULONG_PTR; typedef struct _proc* PROC; typedef unsigned int* PUINT; typedef unsigned int UINT; typedef unsigned short USHORT; typedef unsigned short WORD; typedef unsigned short ATOM; +typedef intptr_t DWORD_PTR; +typedef intptr_t* PDWORD_PTR; /* Necessary handle typedefs for parsing wglext.h */ diff --git a/make/stub_includes/win32/wingdi.h b/make/stub_includes/win32/wingdi.h index 7862b5533..b169621f5 100644 --- a/make/stub_includes/win32/wingdi.h +++ b/make/stub_includes/win32/wingdi.h @@ -194,6 +194,11 @@ WINUSERAPI int WINAPI ReleaseDC(HWND hWnd, HDC hDC); WINUSERAPI BOOL WINAPI DestroyWindow(HWND hWnd); WINUSERAPI DWORD WINAPI GetObjectType(HGDIOBJ h); +WINUSERAPI HANDLE WINAPI GetCurrentProcess(void); +WINUSERAPI BOOL WINAPI GetProcessAffinityMask(HANDLE hProcess,PDWORD_PTR lpProcessAffinityMask,PDWORD_PTR lpSystemAffinityMask); +WINUSERAPI BOOL WINAPI SetProcessAffinityMask(HANDLE hProcess,DWORD_PTR dwProcessAffinityMask); + + // Routines for changing gamma ramp of display device WINGDIAPI BOOL WINAPI GetDeviceGammaRamp(HDC,LPVOID); WINGDIAPI BOOL WINAPI SetDeviceGammaRamp(HDC,LPVOID); |