Vulkan 无设备内存报告主机可见
Vulkan no device memory reports host visible
我目前正在尝试进入 vulkan。
现在我想做的就是创建一个缓冲区清除它并将其内容读回主机。我现在的问题是我找不到主机可见的单个内存。我在笔记本电脑和台式机 运行 a GT 750M/GTX 970 上测试了我的程序,结果相同。我有 2 个记忆,一个 2GB/4GB 报告为本地蜂鸣设备,一个 17GB 不是本地设备,到目前为止一切顺利,但它们都没有报告主机可见。我会很惊讶我无法从我的 970 读取数据,但真正让我觉得我在某个地方犯了一个大错误的是,即使是 17GB 系统内存也不是主机可见的。
我正在使用最新版本的 LunarG SDK(1.0.49) 和最新的 GeForece 驱动程序。
这是我的实例创建代码:
VkInstance instance;
{
char *extName = VK_EXT_DEBUG_REPORT_EXTENSION_NAME;
char *layName = "VK_LAYER_LUNARG_standard_validation";
VkInstanceCreateInfo info;
info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
info.enabledExtensionCount = 1;
info.enabledLayerCount = 1;
info.pNext = nullptr;
info.ppEnabledExtensionNames = &extName;
info.ppEnabledLayerNames = &layName;
info.flags = 0;
VkApplicationInfo appinfo;
appinfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
appinfo.apiVersion = VK_MAKE_VERSION(1, 0, 0);
appinfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
appinfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
appinfo.pApplicationName = "Vulkan Test";
appinfo.pEngineName = "Vulkan Test";
appinfo.pNext = nullptr;
info.pApplicationInfo = &appinfo;
VkResult res = vkCreateInstance(&info, nullptr, &instance);
if (res != VK_SUCCESS) {
std::cerr << "Failed to create instance " << res << std::endl;
return;
}
}
I get 2 memories one 2GB/4GB that reports as beeing device local and a 17GB that is not device local, so far so good, but neither of them reports host visible.
根据您的描述,memory heaps (VkPhysicalDeviceMemoryProperties.memoryHeaps
) 的列表听起来对您的 GTX750/970.
是正确的
但是您实际需要检查您想要在应用程序中执行的内存分配的是内存 types 而不是 (VkPhysicalDeviceMemoryProperties.memoryTypes
)。
这些内存类型(基于堆)包含指定如何访问内存(在堆上)的标志。以下是 GTX 970 可用的 memory types,包括主机可见类型。
我目前正在尝试进入 vulkan。 现在我想做的就是创建一个缓冲区清除它并将其内容读回主机。我现在的问题是我找不到主机可见的单个内存。我在笔记本电脑和台式机 运行 a GT 750M/GTX 970 上测试了我的程序,结果相同。我有 2 个记忆,一个 2GB/4GB 报告为本地蜂鸣设备,一个 17GB 不是本地设备,到目前为止一切顺利,但它们都没有报告主机可见。我会很惊讶我无法从我的 970 读取数据,但真正让我觉得我在某个地方犯了一个大错误的是,即使是 17GB 系统内存也不是主机可见的。
我正在使用最新版本的 LunarG SDK(1.0.49) 和最新的 GeForece 驱动程序。
这是我的实例创建代码:
VkInstance instance;
{
char *extName = VK_EXT_DEBUG_REPORT_EXTENSION_NAME;
char *layName = "VK_LAYER_LUNARG_standard_validation";
VkInstanceCreateInfo info;
info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
info.enabledExtensionCount = 1;
info.enabledLayerCount = 1;
info.pNext = nullptr;
info.ppEnabledExtensionNames = &extName;
info.ppEnabledLayerNames = &layName;
info.flags = 0;
VkApplicationInfo appinfo;
appinfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
appinfo.apiVersion = VK_MAKE_VERSION(1, 0, 0);
appinfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
appinfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
appinfo.pApplicationName = "Vulkan Test";
appinfo.pEngineName = "Vulkan Test";
appinfo.pNext = nullptr;
info.pApplicationInfo = &appinfo;
VkResult res = vkCreateInstance(&info, nullptr, &instance);
if (res != VK_SUCCESS) {
std::cerr << "Failed to create instance " << res << std::endl;
return;
}
}
I get 2 memories one 2GB/4GB that reports as beeing device local and a 17GB that is not device local, so far so good, but neither of them reports host visible.
根据您的描述,memory heaps (VkPhysicalDeviceMemoryProperties.memoryHeaps
) 的列表听起来对您的 GTX750/970.
但是您实际需要检查您想要在应用程序中执行的内存分配的是内存 types 而不是 (VkPhysicalDeviceMemoryProperties.memoryTypes
)。
这些内存类型(基于堆)包含指定如何访问内存(在堆上)的标志。以下是 GTX 970 可用的 memory types,包括主机可见类型。