bool StDXManager::getInfo(StDXInfo& theInfo, const bool theForced) { if(!theForced) { if(ST_DX_HAS_CACHED_INFO) { theInfo = ST_DX_CACHED_INFO; return true; } } const StStringUtfWide AQBS_TEST_CLASS = L"StTESTAqbsWin"; HINSTANCE anAppInst = GetModuleHandle(NULL); WNDCLASSW aWinClass; aWinClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; aWinClass.lpfnWndProc = (WNDPROC )aDummyWinProc; aWinClass.cbClsExtra = 0; aWinClass.cbWndExtra = 0; aWinClass.hInstance = anAppInst; aWinClass.hIcon = LoadIcon(anAppInst, L"A"); aWinClass.hCursor = LoadCursor(NULL, IDC_ARROW); aWinClass.hbrBackground = NULL; aWinClass.lpszMenuName = NULL; aWinClass.lpszClassName = AQBS_TEST_CLASS.toCString(); // class name if(RegisterClassW(&aWinClass) == 0) { ST_DEBUG_LOG("Failed to RegisterClass '" + AQBS_TEST_CLASS.toUtf8() + "'"); return false; } HWND aWinHandle = CreateWindowExW(WS_EX_TOOLWINDOW | WS_EX_WINDOWEDGE | WS_EX_NOACTIVATE, AQBS_TEST_CLASS.toCString(), L"StTESTAqbs Window", WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 32, 32, 32, 32, NULL, NULL, anAppInst, NULL); if(aWinHandle == NULL) { ST_DEBUG_LOG("Failed to create 'StTESTAqbsWin' window (" + int(GetLastError()) + ")"); UnregisterClassW(AQBS_TEST_CLASS.toCString(), anAppInst); return false; } StHandle<StDXManager> aDXManager = new StDXManager(); // test AQBS support theInfo.hasAqbsSupport = aDXManager->checkAqbsSupport(aWinHandle); // enumerate available adapters if(aDXManager->myD3dLib != NULL) { const UINT aD3dAdaptersNb = aDXManager->getAdapterCount(); D3DADAPTER_IDENTIFIER9 anAdapterInfo; for(UINT anAdapterIter = 0; anAdapterIter < aD3dAdaptersNb; ++anAdapterIter) { aDXManager->getAdapterIdentifier(anAdapterIter, 0, &anAdapterInfo); if(anAdapterInfo.VendorId == ST_DX_VENDOR_AMD) { theInfo.hasAmdAdapter = true; } else if(anAdapterInfo.VendorId == ST_DX_VENDOR_NVIDIA) { theInfo.hasNvAdapter = true; } } } // release resources aDXManager.nullify(); DestroyWindow(aWinHandle); UnregisterClass(AQBS_TEST_CLASS.toCString(), anAppInst); // check NVIDIA Stereo enabled state if(NvAPI_Initialize() == NVAPI_OK) { NvU8 isStereoEnabled = FALSE; NvAPI_Stereo_IsEnabled(&isStereoEnabled); theInfo.hasNvStereoSupport = isStereoEnabled == TRUE; } //ST_DEBUG_LOG("DXInfo, AMD(" + int(theInfo.hasAmdAdapter) + "), AQBS(" + int(theInfo.hasAqbsSupport) // + "); NVIDIA(" + int(theInfo.hasNvAdapter) + "), NvStereo(" + int(theInfo.hasNvStereoSupport) + ")"); // cache the state to avoid unnecessary calls ST_DX_CACHED_INFO = theInfo; ST_DX_HAS_CACHED_INFO = true; return true; }