From 4b43421dc92d0f8a9bc877d8e82f7437f02efc3a Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 23 Nov 2025 11:22:19 +1100 Subject: [PATCH] add bindings to creating descriptors --- vulkan.d | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/vulkan.d b/vulkan.d index 815769f..aaddac2 100644 --- a/vulkan.d +++ b/vulkan.d @@ -564,9 +564,10 @@ CreatePipelineLayout(T)(Vulkan* vk, T layouts, u32 push_const_size, bool compute } void -CreateBuffer(Vulkan* vk, Descriptor* desc, BufferType type, u64 size, bool host_visible, DescType desc_type) +CreateBuffer(Vulkan* vk, Descriptor* desc, BufferType type, u64 size, bool host_visible, DescType desc_type, u32 binding) { - desc.type = desc_type; + desc.type = desc_type; + desc.binding = binding; CreateBuffer(vk, &desc.buf, type, size, host_visible); } @@ -955,10 +956,11 @@ WaitForTransfers(Vulkan* vk) } void -CreateImageView(Vulkan* vk, Descriptor* view, u32 w, u32 h, u32 ch, u8[] data, DescType type = DT.Image) +CreateImageView(Vulkan* vk, Descriptor* view, u32 w, u32 h, u32 ch, u8[] data, DescType type = DT.Image, u32 binding) { ImageDescCheck(type); - view.type = type; + view.type = type; + view.binding = binding; CreateImageView(vk, &view.view, w, h, ch, data); } @@ -974,13 +976,13 @@ CreateImageView(Vulkan* vk, ImageView* view, u32 w, u32 h, u32 ch, u8[] data) } else { - Descriptor buf = { binding: 1 }; - CreateBuffer(vk, &buf, BT.Storage, w * h * ch, false, DT.Storage); + Descriptor buf; + CreateBuffer(vk, &buf, BT.Storage, w * h * ch, false, DT.Storage, 1); bool result = Transfer(vk, &buf.buf, data); assert(result, "CreateImageView failure: Buffer Transfer error"); - Descriptor conv_view = { binding: 0 }; - CreateImageView(vk, &conv_view, w, h, FMT.RGBA_F32, IU.Convert, DT.StorageImage); + Descriptor conv_view; + CreateImageView(vk, &conv_view, w, h, FMT.RGBA_F32, IU.Convert, DT.StorageImage, 0); Write(vk, vk.conv_desc_set, [conv_view, buf]); @@ -1026,10 +1028,11 @@ CreateImageView(Vulkan* vk, ImageView* view, u32 w, u32 h, u32 ch, u8[] data) } void -CreateImageView(Vulkan* vk, Descriptor* desc, u32 w, u32 h, Format format, ImageUsage usage, DescType type) +CreateImageView(Vulkan* vk, Descriptor* desc, u32 w, u32 h, Format format, ImageUsage usage, DescType type, u32 binding) { ImageDescCheck(type); - desc.type = type; + desc.type = type; + desc.binding = binding; CreateImageView(vk, &desc.view, w, h, format, usage); } @@ -1148,7 +1151,7 @@ FinishComputePass(Vulkan* vk) } pragma(inline): void -CreateBufferView(Vulkan* vk, Descriptor* desc, u64 size, Format format, DescType type) +CreateBufferView(Vulkan* vk, Descriptor* desc, u64 size, Format format, DescType type, u32 binding) { CreateBuffer(vk, &desc.buf_view.base, BT.BufferView, size, false); @@ -1162,6 +1165,7 @@ CreateBufferView(Vulkan* vk, Descriptor* desc, u64 size, Format format, DescType VkResult result = vkCreateBufferView(vk.device, &info, null, &desc.buf_view.view); VkCheckA("CreateBufferView failure: vkCreateBufferView failed", result); + desc.binding = binding; desc.buf_view.size = size; } @@ -2246,8 +2250,8 @@ CreateDrawImages(Vulkan* vk) u32 w = vk.swapchain_extent.width; u32 h = vk.swapchain_extent.height; - CreateImageView(vk, &vk.draw_image, w, h, draw_format, IU.Draw, DT.StorageImage); - CreateImageView(vk, &vk.depth_image, w, h, depth_format, IU.Depth, DT.Image); + CreateImageView(vk, &vk.draw_image, w, h, draw_format, IU.Draw, DT.StorageImage, 0); + CreateImageView(vk, &vk.depth_image, w, h, depth_format, IU.Depth, DT.Image, 0); return success; }