Directx 获取游戏使用的 VRAM
Directx get VRAM used by game
我正在尝试获取我的游戏当前使用的 VRAM 总量。我想在我的调试信息中显示这个。
当我使用 Visual Studio Graphics Analyzer
时,我想到了一个主意。
我想我可以通过添加 Graphics Object Table
.
中每个图形对象的大小来获得使用的 VRAM 数量
不幸的是,我不知道如何获取这些对象中的每一个。有没有简单的方法来获得这些?
我实际上找到了一种更简单的方法:
#include <dxgi1_4.h>
...
IDXGIFactory4* pFactory;
CreateDXGIFactory1(__uuidof(IDXGIFactory4), (void**)&pFactory);
IDXGIAdapter3* adapter;
pFactory->EnumAdapters(0, reinterpret_cast<IDXGIAdapter**>(&adapter));
DXGI_QUERY_VIDEO_MEMORY_INFO videoMemoryInfo;
adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &videoMemoryInfo);
size_t usedVRAM = videoMemoryInfo.CurrentUsage / 1024 / 1024;
这从默认 (ID 0) 适配器获取当前使用的 VRAM 并将其转换为兆字节。
注意:这确实需要使用 windows 10 SDK
我正在尝试获取我的游戏当前使用的 VRAM 总量。我想在我的调试信息中显示这个。
当我使用 Visual Studio Graphics Analyzer
时,我想到了一个主意。
我想我可以通过添加 Graphics Object Table
.
不幸的是,我不知道如何获取这些对象中的每一个。有没有简单的方法来获得这些?
我实际上找到了一种更简单的方法:
#include <dxgi1_4.h>
...
IDXGIFactory4* pFactory;
CreateDXGIFactory1(__uuidof(IDXGIFactory4), (void**)&pFactory);
IDXGIAdapter3* adapter;
pFactory->EnumAdapters(0, reinterpret_cast<IDXGIAdapter**>(&adapter));
DXGI_QUERY_VIDEO_MEMORY_INFO videoMemoryInfo;
adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &videoMemoryInfo);
size_t usedVRAM = videoMemoryInfo.CurrentUsage / 1024 / 1024;
这从默认 (ID 0) 适配器获取当前使用的 VRAM 并将其转换为兆字节。
注意:这确实需要使用 windows 10 SDK