- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想弄清楚,但我有点卡住了。
类型和堆的关联方式很简单,虽然有点奇怪。 (为什么不直接给 VkMemoryHeap
一个 VkMemoryType
成员(member)?)
我想我明白什么了VkMemoryPropertyFlags
意思是,它们看起来相当简单。
但是 VkMemoryHeap.flags
是怎么回事?成员?它显然只有一个非零有效值,VkMemoryHeapFlagBits.VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
,虽然这本身不会太奇怪,但还有一个 VkMemoryPropertyFlagBits.VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
这可能存在于堆的内存类型上。VkMemoryHeap.flags
有什么用成员的意思以及它与 VkMemoryType.flags
有何关系成员?
最佳答案
在内存方面,Vulkan 识别出两个不同的概念。有设备可以与之通信的实际物理 RAM 部分。然后有一些方法可以从这些 RAM 池之一分配内存。
堆代表一块特定的 RAM。 VkMemoryHeap
是描述设备可以与之通信的可用 RAM 堆之一的对象。定义特定堆的东西确实不多。只有两个:该 RAM 存储的字节数以及存储相对于 Vulkan 设备的位置(本地与非本地)。
内存类型是从特定堆分配内存的一种特殊方式。 VkMemoryType
是描述分配内存的特定方式的对象。关于如何从堆分配内存,还有更多描述性标志。
对于更具体的示例,请考虑具有独立 GPU 的标准 PC 设置。该设备有自己的本地 RAM,但独立 GPU 也可以访问 CPU 内存。所以一个 Vulkan 设备将有两个堆:一个是本地的,另一个是非本地的。
但是,通常会有两种以上的内存类型。您通常有一种表示本地内存的内存类型,它没有 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
放。这意味着你不能映射内存;您只能通过其他内存类型(或渲染操作或其他方式)的传输操作来访问它。
但是您通常会有两种内存类型,它们都使用相同的非本地堆。他们都是 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
,从而允许映射。但是,其中之一可能具有 VK_MEMORY_PROPERTY_HOST_CACHED_BIT
标志设置,而另一个将是 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
.这允许您选择是要缓存 CPU 访问(因此需要显式刷新修改的内存范围)还是未缓存的 CPU 访问。
但是虽然它们是两种不同的内存类型,但它们都从同一个堆中分配。这就是为什么VkMemoryType
有一个索引,指的是它从中分配内存的堆。
Only thing I'm not getting is how the two
DEVICE_LOCAL
flags interact.
if
propertyFlags
has theVK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
bit set, memory allocated with this type is the most efficient for device access. This property will only be set for memory types belonging to heaps with theVK_MEMORY_HEAP_DEVICE_LOCAL_BIT
set.Is it saying that if the memory is local then all types corresponding to that memory are local, or that they can be local?
PROPERTY_DEVICE_LOCAL
表示将实现最佳设备访问性能的内存类型。这与
MEMORY_DEVICE_LOCAL
之间的唯一联系是
PROPERTY_DEVICE_LOCAL
的内存类型只会与使用
MEMORY_DEVICE_LOCAL
的内存堆相关联.
MEMORY_DEVICE_LOCAL
.
PROPERTY_DEVICE_LOCAL
.
关于memory-management - 有人能帮我理解 VkPhysicalDeviceMemoryProperties 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36436493/
我想弄清楚,但我有点卡住了。 类型和堆的关联方式很简单,虽然有点奇怪。 (为什么不直接给 VkMemoryHeap 一个 VkMemoryType 成员(member)?) 我想我明白什么了VkMem
我是一名优秀的程序员,十分优秀!