vulkan - 在 Vulkan 中,我应该如何知道是否需要使用缓冲区使用标志 TRANSFER_SOURCE?
问题描述
我正在处理一些鸡和蛋的问题。我创建了一个缓冲区,如果该缓冲区将被分配给设备本地内存,那么我可以用于该缓冲区的内存类型可能不是主机可见的,因此我需要设置 VK_BUFFER_USAGE_TRANSFER_DST_BIT 标志缓冲区,并使用主机可见的暂存缓冲区。问题是这样的:
auto bufferUsageBits = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT /* | VK_BUFFER_USAGE_TRANSFER_DST_BIT*/;
// The second flag should be set only if the memory requirements queries later
// tell me there's no device-local AND host-visible memory types
VkBuffer vkBufferHandle;
VK::createBuffer(size, bufferUsageBits, VK_SHARING_MODE_EXCLUSIVE, &vkBufferHandle);
vkGetBufferMemoryRequirements();
// Only know do I now if I need a staging buffer and the buffer I'm creating needs to be transfered to.
据我所知,我可以做两件事:
- 如果设备是集成的或 CPU 类型,则假定缓冲区不需要设置传输标志。
- 无论如何设置标志,无论它是集成/CPU还是离散的。
我该怎么处理这个?
解决方案
如果您创建 aVkBuffer
并且它的内存要求需要允许成为传输操作的目标,那么...创建一个新VkBuffer
的并设置了目标传输使用位(并删除旧的)。
这只是一个VkBuffer
. 在绑定到内存之前,它实际上并没有做任何事情。实际上,在实际应用程序中创建多个推测缓冲区以确定您打算在哪里安排缓冲内存使用是一个好主意。
推荐阅读
- css - 强制 angular2-multiselect 下拉菜单向下打开
- javascript - 从字符串的开头删除特定字符串?
- python - 打开文件后删除包含目录是否安全?
- python-3.x - FLASK:即使执行已提交,在表单中输入的新值也不会插入到数据库中
- javascript - 根据类的组合显示显示/隐藏 - Javascript Vanilla
- arrays - 如何在 TypeScript 中将数组的每个字符串转换为数组中的对象?
- node.js - Node & React, Image 不显示,而 alt 显示
- selenium - Browser.wait 不会等待给定的毫秒数
- terraform - 从地形地图变量中提取值
- html - ngDraggable 不适用于使用 innerHtml angular2+ 加载的内容