我尝试用代码获取gpu可用内存
bool bMemInfo1 = GLEW_NVX_gpu_memory_info; // false
bool bMemInfo2 = glewIsSupported("GL_NVX_gpu_memory_info"); // false
bool bMemInfo3 = glewGetExtension("GL_NVX_gpu_memory_info"); // false
GLint info = 0;
glGetIntegerv(GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, @info);
GLenum err = glGetError(); // 1280
if (GLEW_OK != err)
{
cout << glewGetErrorString(err) << endl; // Unknown error
}
我不能在我的情况下这样做。你能解释为什么吗?有可能获得可用的GPU内存吗?
1条答案
按热度按时间cgvd09ve1#
OpenGL早在3D GPU之前就被发明了。你尝试使用的这些东西是GL扩展,不是任何OpenGL标准的一部分。它们可能工作,也可能不工作,这取决于操作系统版本和GPU型号。
如果您使用的是Windows,请查看IDXGIAdapter::GetDesc()方法返回的DedicatedVideoMemory字段。
如果你在OSX上,你可以查询
kIOFBMemorySizeKey
值。在Linux上,你就不走运了,操作系统没有公开一个一致的API来查询这些信息。有一些特定于设备的方法,这些方法取决于GPU型号,并且变化很大:
lspci
工具不适用于许多嵌入式SOC,nvidia-smi
工具仅适用于nVidia,vkGetPhysicalDeviceMemoryProperties()
功能需要支持Vulkan的GPU和驱动程序...