gpt4 book ai didi

vulkan - 为什么 Vulkan 规范没有定义 VkDeviceSize?

转载 作者:行者123 更新时间:2023-12-04 23:17:16 27 4
gpt4 key购买 nike

Vulkan 规范(1.0.12)在第 2.4 节介绍了 VkDeviceSize:

With few exceptions, Vulkan uses the standard C types for parameters (int types from stdint.h, etc). Exceptions to this are using VkResult for return values, using VkBool32 for boolean values, VkDeviceSize for sizes and offsets pertaining to device address space, and VkFlags for passing bits or sets of bits of predefined values.



然而,它从来没有告诉我们 VkDeviceSize 的底层类型到底是什么。我们应该如何知道在 VkDeviceSize 和 size_t 之间转换是否安全?

从 SDK 提供的 header 中,我看到它的类型定义为 uint64_t。在 future 的任何时候,这种情况发生变化的可能性有多大?

最佳答案

Why doesn't the Vulkan spec define VkDeviceSize?



请注意,Vulkan 规范没有指定,例如,它的任何枚举器的值。为什么?因为它们是在 vk.xml 中指定的,用于生成 vulkan.h .
VkDeviceSize 也是如此.就像它对 Vulkan 定义的所有其他类型一样。

是的,OpenGL 规范为其各种类型指定了特定的大小。但 Vulkan 没有,也没有必要。

How are we supposed to know whether it is safe to convert between a VkDeviceSize and a size_t?



唯一不安全的方法是以下情况之一为真:
  • size_t 类型的值VkDeviceSize 你要转换的文件太大了.
  • VkDeviceSize 的值size_t 你要转换的文件太大了.

  • 嗯,绝大多数地方你指定 VkDeviceSize最终源自对 vkAllocateMemory 的调用(映射偏移量、缓冲区/图像创建等都基于您分配的内存块)。因此,如果您要提供 size_t不适合 VkDeviceSize ,那么……这是什么意思?

    很明显,这意味着您打算分配的内存量必须大于实现提供的内存量。毕竟,内存限制本身是由 VkDeviceSize 指定的。 .因此,如果您的 size_t太大而无法适应该类型,那么您必须尝试分配比现有更多的内存。

    我会说这是一个比整数转换不起作用更大的问题。

    而#2 主要对 vkGetPhysicalDeviceMemoryProperties 很重要.如果 size_t太小了,无法存储您从中返回的值...等等,您为什么要使用 size_t存储这些值开始?是否有某些原因您不能使用值的实际类型 VkDeviceSize ?

    How likely is it that this would change, at any point in the future?



    这或多或少无关紧要。为什么?由于 Vulkan 已经具备兼容性保证。

    根据规范,Vulkan 的次要版本不能进行向后不兼容的更改。如果您编写的代码适用于 Vulkan 1.0,那么它也必须适用于 Vulkan 1.1。和 1.2。等等。

    如果 VkDeviceSize在不同版本之间更改,必须(至少)重新编译自己的代码来修复它。 Vulkan 似乎将向后兼容性定义为二进制兼容性,而不是源兼容性:

    A given version of the API is backwards compatible with an earlier version if an application, relying only on valid behavior and functionality defined by the earlier specification, is able to correctly run against each version without any modification.



    这表明应用程序无需重新编译即可工作。

    所以唯一一次 VkDeviceSize会随着主要版本的变化而改变。如果发生这种情况,就兼容性而言,所有赌注都将失败。所以像改变那个大小这样的小事情可能是无关紧要的。

    关于vulkan - 为什么 Vulkan 规范没有定义 VkDeviceSize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36949797/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com