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: