顯卡設(shè)置在哪里
對(duì)于游戲玩家而言,顯卡性能非常重要,如果要想游戲運(yùn)行更加流暢的話,就需要把顯卡設(shè)置為高性能。很多升級(jí)到Win10 21H2還不知道怎么把顯卡設(shè)置為高性能,下面我們就來(lái)看看設(shè)置步驟。 方法一、 ...
2025.07.03COPYRIGHT ? 2023
粵ICP備2021108052號(hào)
郵箱:611661226@qq.com
留言給我上篇講到英偉達(dá)在github上提供其顯卡DLSS功能的SDK,因分析問(wèn)題,就對(duì)其提供的庫(kù)大概看了下,發(fā)現(xiàn)它內(nèi)置了兩種查詢顯卡驅(qū)動(dòng)存儲(chǔ)路徑的方法,第一種是在Windows 10 1803以上使用gdi32.dll中提供的函數(shù)來(lái)查詢,第二種是在Windows 10 1607到vista之間用常見(jiàn)的setupAPI來(lái)查詢,由此可見(jiàn)有些知識(shí)需要更新了,用這么多年setupAPI,也許在未來(lái)真的不管用了呢。
我們來(lái)看下gdi32.dll方式,它主要是使用gdi32.dll中的導(dǎo)出函數(shù)D3DKMTEnumAdapters2和D3DKMTQueryAdapterInfo實(shí)現(xiàn)的,它需要d3dkmthk.h頭文件(19041 SDK),如果沒(méi)有可能就要自行聲明許多用的到結(jié)構(gòu)了:
std::wstring GetDriverStorePathFromQAI(int device_id){ std::wstring driver_store_path; HMODULE gdi_h = NULL; PFN_D3DKMTENUMADAPTERS2 pfnD3DKMTEnumAdapters2; PFN_D3DKMTQUERYADAPTERINFO pfnD3DKMTQueryAdapterInfo; gdi_h = LoadLibrary(_T("gdi32.dll")); if (gdi_h) { pfnD3DKMTEnumAdapters2 = (PFN_D3DKMTENUMADAPTERS2)GetProcAddress(gdi_h, "D3DKMTEnumAdapters2"); pfnD3DKMTQueryAdapterInfo = (PFN_D3DKMTQUERYADAPTERINFO)GetProcAddress(gdi_h, "D3DKMTQueryAdapterInfo"); if (!pfnD3DKMTEnumAdapters2 || !pfnD3DKMTQueryAdapterInfo) return driver_store_path; D3DKMT_ENUMADAPTERS2 enum_adapters = { 0 }; enum_adapters.NumAdapters = 0; enum_adapters.pAdapters = NULL; if (pfnD3DKMTEnumAdapters2(&enum_adapters) != 0) return driver_store_path; enum_adapters.pAdapters = new D3DKMT_ADAPTERINFO[enum_adapters.NumAdapters]; if (!enum_adapters.pAdapters) return driver_store_path; memset(enum_adapters.pAdapters, 0, sizeof(D3DKMT_ADAPTERINFO) * enum_adapters.NumAdapters); if (pfnD3DKMTEnumAdapters2(&enum_adapters) == 0) { for (ULONG i = 0; i < enum_adapters.NumAdapters; i++) { D3DKMT_ADAPTERINFO* adapter_info_ptr = (D3DKMT_ADAPTERINFO*)&enum_adapters.pAdapters[i]; D3DKMT_QUERYADAPTERINFO query_info = { 0 }; char private_data[28] = { 0 }; query_info.hAdapter = adapter_info_ptr->hAdapter; query_info.Type = KMTQAITYPE_PHYSICALADAPTERDEVICEIDS; query_info.PrivateDriverDataSize = 28; query_info.pPrivateDriverData = private_data; if (pfnD3DKMTQueryAdapterInfo(&query_info) == 0) { //nvidia = 0x10de, amd = 0x1002 if (*((DWORD*)private_data + 1) == device_id) { D3DDDI_QUERYREGISTRY_INFO* reg_info_ptr; //the size 0x432 is from nvidia's dll reg_info_ptr = (D3DDDI_QUERYREGISTRY_INFO*)new char[0x432]; memset(reg_info_ptr, 0, 0x432); reg_info_ptr->QueryType = D3DDDI_QUERYREGISTRY_DRIVERSTOREPATH; query_info.hAdapter = adapter_info_ptr->hAdapter; query_info.Type = KMTQAITYPE_QUERYREGISTRY; query_info.pPrivateDriverData = reg_info_ptr; query_info.PrivateDriverDataSize = 0x432; NTSTATUS status = pfnD3DKMTQueryAdapterInfo(&query_info); if (status == 0) { driver_store_path = ReplaceSystemroot(reg_info_ptr->OutputString); delete[]reg_info_ptr; break; } delete[]reg_info_ptr; } } } } if (enum_adapters.pAdapters) delete[]enum_adapters.pAdapters; } return driver_store_path;}
再有就是setupAPI的方式,這個(gè)大家應(yīng)該相當(dāng)熟悉了:
std::wstring GetDriverStorePath(const std::wstring& device_id){ std::wstring infPath; HDEVINFO deviceInfoSet = SetupDiGetClassDevs(&GUID_DEVCLASS_DISPLAY, NULL, NULL, DIGCF_PRESENT); if (deviceInfoSet == INVALID_HANDLE_VALUE) return infPath; SP_DEVINFO_DATA deviceInfoData; deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (DWORD index = 0; SetupDiEnumDeviceInfo(deviceInfoSet, index, &deviceInfoData); ++index) { DWORD propertyType; WCHAR buffer[1024]; deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); if (SetupDiGetDeviceRegistryProperty(deviceInfoSet, &deviceInfoData, SPDRP_HARDWAREID, &propertyType, reinterpret_cast(buffer), sizeof(buffer), NULL)) { if (wcsstr(buffer, device_id.c_str()) != NULL) // NVIDIA vendor ID { DWORD req_size = 0; if (SetupDiGetDeviceProperty(deviceInfoSet, &deviceInfoData, &DEVPKEY_Device_DriverInfPath, &propertyType, reinterpret_cast(buffer), sizeof(buffer), &req_size, 0)) { infPath = buffer; if (SetupGetInfDriverStoreLocation(infPath.c_str(), NULL, NULL, buffer, sizeof(buffer), &req_size)) { PathRemoveFileSpecW(buffer); infPath = buffer; } else { infPath.clear(); } } } } } SetupDiDestroyDeviceInfoList(deviceInfoSet); return infPath;}
對(duì)于游戲玩家而言,顯卡性能非常重要,如果要想游戲運(yùn)行更加流暢的話,就需要把顯卡設(shè)置為高性能。很多升級(jí)到Win10 21H2還不知道怎么把顯卡設(shè)置為高性能,下面我們就來(lái)看看設(shè)置步驟。 方法一、 ...
2025.07.03一、英偉達(dá)顯卡是什么?英偉達(dá)顯卡(Nvidia Graphics Processing Unit,Nvidia GPU)是一種高端的圖形處理器,由美國(guó)英偉達(dá)公司設(shè)計(jì)和制造,被廣泛用于電腦游戲、視頻編輯...
2025.07.03導(dǎo)讀本文將介紹如何在Ubuntu系統(tǒng)上,安裝顯卡驅(qū)動(dòng)。1. 下載驅(qū)動(dòng)驅(qū)動(dòng)程序下載[1]打開(kāi)上面的驅(qū)動(dòng)下載鏈接,根據(jù)自己的顯卡型號(hào)進(jìn)行選擇對(duì)應(yīng)配置,如下圖,后點(diǎn)擊搜索。驅(qū)動(dòng)下載下載搜索后,點(diǎn)擊下面下載案...
2025.07.03一臺(tái)完整可使用的電腦是由硬件和軟件兩部分構(gòu)成,看得見(jiàn)摸得著的電腦配件我們可以稱它為硬件部分,看得見(jiàn)摸不著的電腦構(gòu)成部分我們稱之為軟件部分,除了電腦的操作系統(tǒng)和我們平常使用的各類程序都是屬于軟件的范疇外...
2025.07.03