add bindings to creating descriptors

This commit is contained in:
Matthew 2025-11-23 11:22:19 +11:00
parent 748c8ec00e
commit 4b43421dc9

View File

@ -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;
}