Win32 nvapi gpu usage

pull/337/head^2
FlightlessMango 4 years ago
parent 2ebb381166
commit 7dd6792772

@ -41,6 +41,7 @@ if ['windows', 'mingw'].contains(host_machine.system())
vklayer_files += files(
'file_utils_win32.cpp',
'cpu_win32.cpp',
'win/dxgi.cpp',
'win/main.cpp',
'win/kiero.cpp',
'win/d3d12_hook.cpp',

@ -7,6 +7,7 @@ struct swapchain_stats sw_stats {};
uint32_t vendorID;
void init_d3d_shared(){
vendorID = get_device_id_dxgi();
if (cfg_inited)
return;
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"));

@ -6,4 +6,5 @@ extern struct overlay_params params;
extern struct swapchain_stats sw_stats;
extern uint32_t vendorID;
extern void init_d3d_shared(void);
extern void init_d3d_shared(void);
extern uint32_t get_device_id_dxgi(void);

@ -0,0 +1,46 @@
#include "kiero.h"
#include "windows.h"
#include <dxgi.h>
#include "kiero.h"
#include <cstdio>
#ifdef _UNICODE
# define KIERO_TEXT(text) L##text
#else
# define KIERO_TEXT(text) text
#endif
uint32_t get_device_id_dxgi(){
printf("start get device id\n");
HMODULE libDXGI;
if ((libDXGI = ::GetModuleHandle(KIERO_TEXT("dxgi.dll"))) == NULL){
printf("dxgi not found\n");
return 0;
}
auto CreateDXGIFactory = reinterpret_cast<decltype(&::CreateDXGIFactory)>(::GetProcAddress(libDXGI, "CreateDXGIFactory"));
if (!CreateDXGIFactory)
{
printf("can't create dxgi factory\n");
return 0;
}
IDXGIAdapter* dxgi_adapter;
IDXGIFactory* dxgi_factory;
if (((long(__stdcall*)(const IID&, void**))(CreateDXGIFactory))(__uuidof(IDXGIFactory), (void**)&dxgi_factory) < 0)
{
printf("can't assign factory\n");
return 0;
}
DXGI_ADAPTER_DESC AdapterDesc;
int i;
for (i = 0; SUCCEEDED(dxgi_factory->EnumAdapters(i, &dxgi_adapter)); i++) {
dxgi_adapter->GetDesc(&AdapterDesc);
printf("%ls\n", AdapterDesc.Description);
if (AdapterDesc.VendorId == 0x10de)
return AdapterDesc.VendorId;
if (AdapterDesc.VendorId == 0x1002)
return AdapterDesc.VendorId;
if (AdapterDesc.VendorId == 0x8086)
return AdapterDesc.VendorId;
}
return 0;
}
Loading…
Cancel
Save