未分配-CoreValidation-DrawState-InvalidImageLayout

UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout

我正在尝试使用 uimage2D 在 glsl 中使用图像。

layout (binding = 0,rgba32ui)uniform writeonly uimage2D image;

void main(){
imageSize(image);

}

对于这段代码我得到错误

validation layer: Validation Error: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x30a8448, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | Submitted command buffer expects VkImage 0x7c45730000000006[] (subresource: aspectMask 0x1 array layer 0, mip level 0) to be in layout VK_IMAGE_LAYOUT_GENERAL--instead, current layout is VK_IMAGE_LAYOUT_UNDEFINED.

错误是因为 imageSize(image).

我已将 ImageLayout 声明为 VK_IMAGE_LAYOUT_GENERAL,但我仍然收到此错误。

VkDescriptorImageInfo imageInfo{};
imageInfo.imageLayout =VK_IMAGE_LAYOUT_GENERAL;
imageInfo.imageView = textureImageView;
imageInfo.sampler = textureSampler;

什么可能导致此错误?

VkDescriptorImageInfo 不“声明”任何东西。它只是通知 driver 您将使用哪种布局。错误正是这样说的;你骗了 driver。你告诉它你会在 VK_IMAGE_LAYOUT_GENERAL 布局中给它图像,但是当它实际被采样时它实际上发现它在不同的布局中。

您需要通过管道障碍更改图像布局。