fix transfers/descriptor creation

This commit is contained in:
Matthew 2026-04-18 14:26:10 +10:00
parent 1df3f93a5f
commit 7bef66157b

View File

@ -1306,15 +1306,18 @@ CreateImageView(Descriptor* desc)
// TODO: also handle here
VkCheck("CreateImageView failure: vkCreateImageView error", result);
if(desc.image.usage == IU.Draw || desc.image.usage == IU.Depth || desc.image.usage == IU.Convert)
{
desc.image.shader_layout = IL.General;
}
else if(desc.image.usage == IU.Texture)
{
desc.image.shader_layout = IL.ReadOnly;
}
else assert(false, "Unimplemented usage");
switch(desc.image.usage)
{
case IU.Draw, IU.Depth, IU.Convert, IU.Storage:
{
desc.image.shader_layout = IL.General;
} break;
case IU.Texture:
{
desc.image.shader_layout = IL.ReadOnly;
} break;
default: assert(false, "Unimplemented usage");
}
desc.image.layout = IL.Undefined;
}
@ -1427,7 +1430,7 @@ TransferReady()
}
bool
Transfer(bool image, T)(Descriptor* desc, T data) if(isArray!(T) || isPointer!(T))
Transfer(bool image, T)(Descriptor* desc, T data_param) if(isArray!(T) || isPointer!(T))
{
bool success = true;
@ -1435,11 +1438,13 @@ Transfer(bool image, T)(Descriptor* desc, T data) if(isArray!(T) || isPointer!(T
static if(isArray!(T))
{
u64 data_length = cast(u64)(data.length * (*data.init.ptr).sizeof);
u64 data_length = cast(u64)(data_param.length * (*data_param.init.ptr).sizeof);
u8[] data = (cast(u8*)data_param.ptr)[0 .. data_length];
}
else static if(isPointer!(T))
{
u64 data_length = cast(u64)(*T).sizeof;
T* data = data_param;
}
u64 copied = 0;
@ -1458,7 +1463,7 @@ Transfer(bool image, T)(Descriptor* desc, T data) if(isArray!(T) || isPointer!(T
vkCmdCopyBufferToImage(g_vk.imm_cmd, g_vk.transfer_buf.buffer, desc.image.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &copy);
Transition(g_vk.imm_cmd, desc, IL.ReadOnly);
Transition(g_vk.imm_cmd, desc, desc.image.shader_layout);
};
VkBufferImageCopy copy = {
@ -3395,3 +3400,4 @@ version(VULKAN_RENDERER_TEST) unittest
}