cl::Platform::get(&allPlatforms); crashes with 2 cards, ATI/AMD and NVIDIA
I have no idea how for back this bug goes with AMD/ATI, but if I run in the debugger I do not crash on cl:latform::get. I have narrowed it down to this call in cl.hpp
cl_int err = ::clGetPlatformIDs(0, NULL, &n);
I have an HD3400 ATI/AMD card and an NVIDIA 8800. My monitor is currently connected to the NVIDIA card, having no monitor connected to the ATI/AMD card. Please keep in mind if I run in the VS2005 debugger, the ATI/AMD dll/ does not crash with the exception below, and I only see NVIDIA listed. My guess is AMD/ATI is expecting a monitor to be connected.
My code:
std::vector<cl:latform> allPlatforms;
std::vector<cl:latform>::iterator iter;
cl:latform targetPlatform;
cl:latform::get(&allPlatforms);
Using DEPENDS/profile mode to see where it might be crashing:
etProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTCheckOcclusion") called from "ATICFX32.DLL" at address 0x6656703A and returned 0x7661610D.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTWaitForIdle") called from "ATICFX32.DLL" at address 0x66567047 and returned 0x766165ED.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTCheckMonitorPowerState") called from "ATICFX32.DLL" at address 0x66567054 and returned 0x765EE7CE.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTCheckExclusiveOwnership") called from "ATICFX32.DLL" at address 0x66567061 and returned 0x765EE7B0.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTCheckVidPnExclusiveOwnership") called from "ATICFX32.DLL" at address 0x6656706E and returned 0x7661614D.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTSetDisplayPrivateDriverFormat") called from "ATICFX32.DLL" at address 0x6656707B and returned 0x7661650D.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTSharedPrimaryLockNotification") called from "ATICFX32.DLL" at address 0x66567088 and returned 0x7661658D.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTSharedPrimaryUnLockNotification") called from "ATICFX32.DLL" at address 0x66567095 and returned 0x766165AD.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTCreateKeyedMutex") called from "ATICFX32.DLL" at address 0x665670A2 and returned 0x7661618D.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTOpenKeyedMutex") called from "ATICFX32.DLL" at address 0x665670AF and returned 0x7661638D.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTDestroyKeyedMutex") called from "ATICFX32.DLL" at address 0x665670BC and returned 0x766161ED.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTAcquireKeyedMutex") called from "ATICFX32.DLL" at address 0x665670C9 and returned 0x766160ED.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTReleaseKeyedMutex") called from "ATICFX32.DLL" at address 0x665670D6 and returned 0x7661646D.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTConfigureSharedResource") called from "ATICFX32.DLL" at address 0x665670E3 and returned 0x765EE9C8.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTGetOverlayState") called from "ATICFX32.DLL" at address 0x665670F0 and returned 0x7661628D.
GetProcAddress(0x765C0000 [GDI32.DLL], "D3DKMTCheckSharedResourceAccess") called from "ATICFX32.DLL" at address 0x665670FD and returned 0x7661612D.
Second chance exception 0xC0000005 (Access Violation) occurred in "ATICFX32.DLL" at address 0x66579C8A.