fix transfers/descriptor creation
This commit is contained in:
parent
1df3f93a5f
commit
7bef66157b
30
vulkan.d
30
vulkan.d
@ -1306,15 +1306,18 @@ CreateImageView(Descriptor* desc)
|
|||||||
// TODO: also handle here
|
// TODO: also handle here
|
||||||
VkCheck("CreateImageView failure: vkCreateImageView error", result);
|
VkCheck("CreateImageView failure: vkCreateImageView error", result);
|
||||||
|
|
||||||
if(desc.image.usage == IU.Draw || desc.image.usage == IU.Depth || desc.image.usage == IU.Convert)
|
switch(desc.image.usage)
|
||||||
{
|
{
|
||||||
desc.image.shader_layout = IL.General;
|
case IU.Draw, IU.Depth, IU.Convert, IU.Storage:
|
||||||
}
|
{
|
||||||
else if(desc.image.usage == IU.Texture)
|
desc.image.shader_layout = IL.General;
|
||||||
{
|
} break;
|
||||||
desc.image.shader_layout = IL.ReadOnly;
|
case IU.Texture:
|
||||||
}
|
{
|
||||||
else assert(false, "Unimplemented usage");
|
desc.image.shader_layout = IL.ReadOnly;
|
||||||
|
} break;
|
||||||
|
default: assert(false, "Unimplemented usage");
|
||||||
|
}
|
||||||
|
|
||||||
desc.image.layout = IL.Undefined;
|
desc.image.layout = IL.Undefined;
|
||||||
}
|
}
|
||||||
@ -1427,7 +1430,7 @@ TransferReady()
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool
|
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;
|
bool success = true;
|
||||||
|
|
||||||
@ -1435,11 +1438,13 @@ Transfer(bool image, T)(Descriptor* desc, T data) if(isArray!(T) || isPointer!(T
|
|||||||
|
|
||||||
static if(isArray!(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))
|
else static if(isPointer!(T))
|
||||||
{
|
{
|
||||||
u64 data_length = cast(u64)(*T).sizeof;
|
u64 data_length = cast(u64)(*T).sizeof;
|
||||||
|
T* data = data_param;
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 copied = 0;
|
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, ©);
|
vkCmdCopyBufferToImage(g_vk.imm_cmd, g_vk.transfer_buf.buffer, desc.image.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ©);
|
||||||
|
|
||||||
Transition(g_vk.imm_cmd, desc, IL.ReadOnly);
|
Transition(g_vk.imm_cmd, desc, desc.image.shader_layout);
|
||||||
};
|
};
|
||||||
|
|
||||||
VkBufferImageCopy copy = {
|
VkBufferImageCopy copy = {
|
||||||
@ -3395,3 +3400,4 @@ version(VULKAN_RENDERER_TEST) unittest
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user