vkCmdCopyImage会自动转换平铺属性吗?

时间:2017-12-29 13:17:33

标签: memory-management vulkan

我已经阅读了vkCmdCopyImage的规范,我看到只需要元素大小来匹配两种方式。我想知道我们是否可以将具有最佳平铺(src)的图像复制到线性平铺(dst)。 dst会有线性平铺并可用吗?假设两个图像具有相同的格式。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

vkCmdCopyImage复制纹素(不是字节)。平铺是一个寻址问题,应该通过纹理的抽象来隐藏 此外,有效使用不禁止使用 所以,是的;确实如此。

我们进行了扩展讨论on the Vulkan forum

Vulkan规范也在KhronosGroup/Vulkan-Docs开放。您可以直接发布问题或提出更改作为PR 如果您直接阅读规范,尽管您尽了最大的努力,但事情仍然不明确,那么 可能没有足够好地指定,而其他人可能会同样困惑(并开始制作有缺陷的驱动程序和应用程序)。直接与作者交流对每个人都有好处。

答案 1 :(得分:1)

是的,您可以将具有最佳平铺的图像中的数据复制到具有线性平铺的图像,反之亦然。适当的平铺转换是自动完成的。这是将数据上传到(或复制数据)最佳平铺图像的方法之一,因为那些无法直接映射(好吧,它们可以被映射但我们不知道它们的内容如何布局如此映射它们很少,如果根本没有意义的话。当我们通过线性平铺资源传输数据时,我们称之为登台资源。对于那些我们不仅可以使用图像而且还可以使用缓冲区。许多人(包括我)声称使用缓冲区更为可取,因为它们总是线性的,它们不需要布局转换,并且它们更容易创建(创建信息的参数更少)。 vkCmdCopyImageToBuffer(或反之亦然)为您完成所有必要的转换(虽然没有格式转换)。

英特尔有一个关于staging resources的教程和另一个使用临时缓冲区upload data to an optimally tiled image的教程。该机制与线性平铺图像相同,并且以两种方式工作。