fix descriptor writes

This commit is contained in:
Matthew 2025-11-15 19:35:37 +11:00
parent 767990e654
commit 12aeecd99b

View File

@ -186,6 +186,7 @@ enum ImageLayout : VkImageLayout
Undefined = VK_IMAGE_LAYOUT_UNDEFINED, Undefined = VK_IMAGE_LAYOUT_UNDEFINED,
General = VK_IMAGE_LAYOUT_GENERAL, General = VK_IMAGE_LAYOUT_GENERAL,
ColorAttach = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, ColorAttach = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
ReadOnly = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
} }
struct Image struct Image
@ -212,6 +213,7 @@ struct ImageView
{ {
Image base; Image base;
VkImageView view; VkImageView view;
ImageLayout shader_layout;
alias base this; alias base this;
} }
@ -936,8 +938,6 @@ ImmSubmit(Vulkan* vk, Buffer* buf, VkBufferCopy copy, void function(Vulkan*, Buf
return success; return success;
} }
bool bool
TransferAssets(Vulkan* vk) TransferAssets(Vulkan* vk)
{ {
@ -1088,6 +1088,16 @@ CreateImageView(Vulkan* vk, ImageView* view, u32 w, u32 h, Format format, ImageU
view.h = h; view.h = h;
view.depth_image = usage == IU.Depth; view.depth_image = usage == IU.Depth;
view.usage = usage; view.usage = usage;
if(usage == IU.Draw)
{
view.shader_layout = ImageLayout.General;
}
else if(usage == IU.Texture)
{
view.shader_layout = ImageLayout.ReadOnly;
}
else assert(false, "Unimplemented usage");
} }
pragma(inline): void pragma(inline): void
@ -1972,7 +1982,7 @@ PrepareWrite(Vulkan* vk, VkWriteDescriptorSet* write, DescSet set, Descriptor* d
VkDescriptorImageInfo* info = Alloc!(VkDescriptorImageInfo)(arena); VkDescriptorImageInfo* info = Alloc!(VkDescriptorImageInfo)(arena);
info.imageView = desc.view.view; info.imageView = desc.view.view;
info.imageLayout = desc.view.layout; info.imageLayout = desc.view.shader_layout;
write.pImageInfo = info; write.pImageInfo = info;
} break; } break;
case Uniform, Storage: case Uniform, Storage: