首页 > 解决方案 > Vulkan:使用 vkCmdCopyBufferToImage 上传非 pow-of-2 纹理数据

问题描述

有一个类似的线程(Loading non-power-of-two textures in Vulkan),但它与更新主机可见映射区域中的数据有关。

我想利用成熟的功能vkCmdCopyBufferToImage将存在于主机可见缓冲区中的数据复制到设备本地图像。我的图像暗淡,不是 2 的幂(更具体地说,它们是 1280x720)。这样做时,我发现它在 NVIDIA 和 Intel 上运行良好,但在 AMD 上却不行,图像变得“失真”,这表明 rowPitch/padding 存在问题。我的主机可见缓冲区非常紧凑,因此与bufferRowLengthandbufferImageHeight相同。imageExtent.widthimageExtent.height

这个函数不应该满足非 2 次幂纹理吗?或者也许我做错了?

我可以使用计算着色器实现一种解决方法,但我认为这个函数的目的是通用的。此外,使用计算着色器的缺点是无法在仅传输队列上执行复制操作。

标签: vulkan

解决方案


推荐阅读