From 12aeecd99ba3a45ed40a5fc3a89a43c6ac8d8b31 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sat, 15 Nov 2025 19:35:37 +1100 Subject: [PATCH] fix descriptor writes --- vulkan.d | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/vulkan.d b/vulkan.d index 503581c..f3b0846 100644 --- a/vulkan.d +++ b/vulkan.d @@ -186,6 +186,7 @@ enum ImageLayout : VkImageLayout Undefined = VK_IMAGE_LAYOUT_UNDEFINED, General = VK_IMAGE_LAYOUT_GENERAL, ColorAttach = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + ReadOnly = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, } struct Image @@ -212,6 +213,7 @@ struct ImageView { Image base; VkImageView view; + ImageLayout shader_layout; alias base this; } @@ -936,8 +938,6 @@ ImmSubmit(Vulkan* vk, Buffer* buf, VkBufferCopy copy, void function(Vulkan*, Buf return success; } - - bool TransferAssets(Vulkan* vk) { @@ -1088,6 +1088,16 @@ CreateImageView(Vulkan* vk, ImageView* view, u32 w, u32 h, Format format, ImageU view.h = h; view.depth_image = usage == IU.Depth; 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 @@ -1972,7 +1982,7 @@ PrepareWrite(Vulkan* vk, VkWriteDescriptorSet* write, DescSet set, Descriptor* d VkDescriptorImageInfo* info = Alloc!(VkDescriptorImageInfo)(arena); info.imageView = desc.view.view; - info.imageLayout = desc.view.layout; + info.imageLayout = desc.view.shader_layout; write.pImageInfo = info; } break; case Uniform, Storage: