微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vulkan 设备模拟:为什么在使用我自己的设备模拟时可能会出现内存映射失败

如何解决Vulkan 设备模拟:为什么在使用我自己的设备模拟时可能会出现内存映射失败

我发现扩展 VK_LAYER_LUNARG_device_simulation 是复制在其他设备上发现的问题的天赐之物 - 我使用的是 RTX 2080,并且能够在 AMD 5700 上成功复制问题。

但是,为了好玩,我想我会尝试为我拥有的同一型号设备使用设备文件,但我收到缓冲区映射错误,特别是在尝试映射已成功创建的缓冲区时出现 ERROR_MEMORY_MAP_Failed,大小为 65536 字节)。

不使用设备模拟层时不会出现这样的错误。我在使用amd 5700模拟文件时没有出现内存映射失败。

关于这是误报还是我应该更深入研究的任何想法?

我已经找到了设备模拟的调试输出标志(环境变量 VK_DEVSIM_DEBUG_ENABLE=1),这让我看到了一些关于某些 json 值高于现有值的警告,唯一相关的似乎是堆大小,加载时为零。

如果我在文件中将堆大小设置为零,我将无法分配任何内容,因为堆大小被限制为零。

如果我从文件删除 VkPhysicalDeviceMemoryProperties 部分,我看不到问题。

我现在已经在 LunarG 问题页面上交叉发布,所以有一些更详细的输出 here

解决方法

RTX 2080 的型号不止一种,可能您使用的 DevSim 模拟文件的内存类型与您的硬件不兼容。

您可以在 gpuinfo.org 上看到 RTX 2080 变体。点击“Memory”,注意有些有5种内存类型,有些有11种。您可能只是获取了错误的模拟文件。

另一种可能性是,您可能正在为正确的设备使用模拟文件,但它可能与您的驱动程序版本有关。这不太可能,因为内存类型支持不应该在驱动程序版本之间经常改变。但它可能会发生。

您可以通过在没有任何 DevSim 模拟的情况下在您的设备上运行 vulkaninfo 并将其报告的内存类型信息与 DevSim 模拟文件中的信息进行比较来验证是否是这种情况。如果它们不同,那么就可以解释您所看到的问题。然后您应该找到正确的模拟文件,或者您可以“破解”模拟文件以匹配您的硬件,然后它应该可以工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。