coreValidation-drawState-Invalidimagelayout错误上的命令缓冲区错误

CoreValidation-DrawState-InvalidImageLayout error on submited command buffer

本文关键字:错误 命令缓冲区 coreValidation-drawState-Invalidimagelayout      更新时间:2023-10-16

我无法弄清楚为什么我得到此错误

消息:[未分配的corevalidation-drawState-invalidimagelayout]对象:0x55F38F345890(type = 6)|提交命令缓冲区期望图像0x1e(subresource:expackMask 0x1数组层0,mip级别0)在布局中为vk_image_layout_layout_color_color_attachment_optimal-instead,image 0x1e当前的布局是vk_image_image_layout_layout_layout_pres_pres_pres_src_src_khr。

我正在使用命令缓冲区将图像从帧缓冲机爆炸到当前的图像,如

    command_buffer.transitionImageLayout(
  framebuffer_image, ImageLayout::COLOR_ATTACHMENT_OPTIMAL, ImageLayout::TRANSFERT_SRC_OPTIMAL);
command_buffer.transitionImageLayout(
  current_image, ImageLayout::PRESENT_SRC, ImageLayout::TRANSFERT_DST_OPTIMAL);
command_buffer.blitImage(
  framebuffer_image, current_image, framebuffer_image.extent(), m_extent);
command_buffer.transitionImageLayout(
  framebuffer_image, ImageLayout::TRANSFERT_SRC_OPTIMAL, ImageLayout::COLOR_ATTACHMENT_OPTIMAL);
command_buffer.transitionImageLayout(
  current_image, ImageLayout::TRANSFERT_DST_OPTIMAL, ImageLayout::PRESENT_SRC);

在命令缓冲区提交

上发出了错误

我激活了vk_layer_lunarg_api_dump层,我得到了:

https://pastebin.com/afyepupm

错误消息非常简单。

您首先将图像用作命令缓冲区中的VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL。我们可以看到并验证:

command_buffer.transitionImageLayout( framebuffer_image, ImageLayout::COLOR_ATTACHMENT_OPTIMAL // etc

错误告诉您,图像在VK_IMAGE_LAYOUT_PRESENT_SRC_KHR中。发生的方式取决于您的其余代码。您必须在(偶然地)之前将图像过渡到该布局。那将是通过以前的vkCmdPipelineBarrier或Renderpass finalLayout

(或较小的验证层中有一个错误。在这种情况下,将其报告给Khronosgroup/vulkan-validationlayers。)

您的framebuffer_image来自Swapchain图像吗?如果是,似乎它仍在VK_IMAGE_LAYOUT_PRESENT_SRC_KHR布局中 - 可以通过更改第一行来解决该问题。