在运行Vulkan项目时,命令行界面出现了如下所示问题:
validation layer: Invalid usage flag for VkImage 0x5d11410000000004[] used by vkCmdCopyImageToBuffer(). In this case, VkImage should have VK_IMAGE_USAGE_TRANSFER_SRC_BIT set during creation. The Vulkan spec states: srcImage must have been created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VUID-vkCmdCopyImageToBuffer-srcImage-00186)
validation layer: Submitted command buffer expects VkImage 0x5d11410000000004[] (subresource: aspectMask 0x1 array layer 0, mip level 0) to be in layout VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL--instead, current layout is VK_IMAGE_LAYOUT_UNDEFINED.
简单分析应该是验证层检测到command buffer中的VkImage类型存在问题,所以报出了上述的错误,博主目前正在学习Vulkan的阶段,暂时还不能从代码上解决问题,于是乎想起了Vulkan的一个特性“Vulkan为了追求更高的执行效率,将各种错误的检查设计为可拔插模式。开发人员可以在开发调试时打开所需的错误检查项目,在发布时关闭错误检查项目,以达到更好的性能(OpenGL的状态机会在运行时自动进行错误检查且不可关闭)”(《Vulkan开发实战详解》P2 吴亚峰 编著)。
解决方案:
博主将调试模式修改成了【Release】,如下图一;运行项目,如有报错可以清理一下解决方案(右键点击解决方案->清理解决方案),这样可以暂时忽略掉一些错误,保证项目可以运行。
实际上,这有点掩耳盗铃的意思,博主还需要继续深入学习Vulkan的相关资料,从根本上解决这个问题~!干巴爹!