vkd3d: Add layout property to texture views.
Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
parent
45001e05d4
commit
76b2d2af89
|
@ -3435,6 +3435,10 @@ static void d3d12_command_list_copy_image(struct d3d12_command_list *list,
|
|||
{
|
||||
dst_is_depth_stencil = !!(dst_format->vk_aspect_mask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT));
|
||||
|
||||
attachment_layout = dst_is_depth_stencil
|
||||
? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
|
||||
: VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
|
||||
if (!(dst_format = vkd3d_meta_get_copy_image_attachment_format(&list->device->meta_ops, dst_format, src_format)))
|
||||
{
|
||||
ERR("No attachment format found for source format %u.\n", src_format->vk_format);
|
||||
|
@ -3457,6 +3461,7 @@ static void d3d12_command_list_copy_image(struct d3d12_command_list *list,
|
|||
|
||||
memset(&dst_view_desc, 0, sizeof(dst_view_desc));
|
||||
dst_view_desc.view_type = pipeline_key.view_type;
|
||||
dst_view_desc.layout = d3d12_resource_pick_layout(dst_resource, attachment_layout);
|
||||
dst_view_desc.format = dst_format;
|
||||
dst_view_desc.miplevel_idx = region->dstSubresource.mipLevel;
|
||||
dst_view_desc.miplevel_count = 1;
|
||||
|
@ -3466,6 +3471,7 @@ static void d3d12_command_list_copy_image(struct d3d12_command_list *list,
|
|||
|
||||
memset(&src_view_desc, 0, sizeof(src_view_desc));
|
||||
src_view_desc.view_type = pipeline_key.view_type;
|
||||
src_view_desc.layout = d3d12_resource_pick_layout(src_resource, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
src_view_desc.format = src_format;
|
||||
src_view_desc.miplevel_idx = region->srcSubresource.mipLevel;
|
||||
src_view_desc.miplevel_count = 1;
|
||||
|
@ -3562,10 +3568,6 @@ static void d3d12_command_list_copy_image(struct d3d12_command_list *list,
|
|||
vk_image_barriers[i].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
}
|
||||
|
||||
attachment_layout = dst_is_depth_stencil
|
||||
? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
|
||||
: VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
|
||||
vk_image_barriers[0].oldLayout = dst_layout;
|
||||
vk_image_barriers[0].newLayout = attachment_layout;
|
||||
vk_image_barriers[0].image = dst_resource->u.vk_image;
|
||||
|
@ -5285,6 +5287,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_ClearUnorderedAccessViewUint(d3
|
|||
{
|
||||
memset(&view_desc, 0, sizeof(view_desc));
|
||||
view_desc.view_type = base_view->info.texture.vk_view_type;
|
||||
view_desc.layout = base_view->info.texture.vk_layout;
|
||||
view_desc.format = uint_format;
|
||||
view_desc.miplevel_idx = base_view->info.texture.miplevel_idx;
|
||||
view_desc.miplevel_count = 1;
|
||||
|
|
|
@ -2685,6 +2685,7 @@ static bool init_default_texture_view_desc(struct vkd3d_texture_view_desc *desc,
|
|||
return false;
|
||||
}
|
||||
|
||||
desc->layout = resource->common_layout;
|
||||
desc->miplevel_idx = 0;
|
||||
desc->miplevel_count = 1;
|
||||
desc->layer_idx = 0;
|
||||
|
@ -2759,6 +2760,7 @@ bool vkd3d_create_texture_view(struct d3d12_device *device, VkImage vk_image,
|
|||
object->u.vk_image_view = vk_view;
|
||||
object->format = format;
|
||||
object->info.texture.vk_view_type = desc->view_type;
|
||||
object->info.texture.vk_layout = desc->layout;
|
||||
object->info.texture.miplevel_idx = desc->miplevel_idx;
|
||||
object->info.texture.layer_idx = desc->layer_idx;
|
||||
object->info.texture.layer_count = desc->layer_count;
|
||||
|
@ -2858,6 +2860,7 @@ static void vkd3d_create_null_srv(struct d3d12_desc *descriptor,
|
|||
|
||||
WARN("Creating NULL SRV %#x.\n", desc->ViewDimension);
|
||||
|
||||
vkd3d_desc.layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||
vkd3d_desc.format = vkd3d_get_format(device, VKD3D_NULL_SRV_FORMAT, false);
|
||||
vkd3d_desc.miplevel_idx = 0;
|
||||
vkd3d_desc.miplevel_count = 1;
|
||||
|
@ -3080,6 +3083,7 @@ static void vkd3d_create_null_uav(struct d3d12_desc *descriptor,
|
|||
|
||||
WARN("Creating NULL UAV %#x.\n", desc->ViewDimension);
|
||||
|
||||
vkd3d_desc.layout = VK_IMAGE_LAYOUT_GENERAL;
|
||||
vkd3d_desc.format = vkd3d_get_format(device, VKD3D_NULL_UAV_FORMAT, false);
|
||||
vkd3d_desc.miplevel_idx = 0;
|
||||
vkd3d_desc.miplevel_count = 1;
|
||||
|
@ -3508,6 +3512,8 @@ void d3d12_rtv_desc_create_rtv(struct d3d12_rtv_desc *rtv_desc, struct d3d12_dev
|
|||
return;
|
||||
}
|
||||
|
||||
vkd3d_desc.layout = d3d12_resource_pick_layout(resource, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
||||
|
||||
if (desc)
|
||||
{
|
||||
switch (desc->ViewDimension)
|
||||
|
@ -3592,6 +3598,23 @@ static void d3d12_dsv_desc_destroy(struct d3d12_dsv_desc *dsv, struct d3d12_devi
|
|||
memset(dsv, 0, sizeof(*dsv));
|
||||
}
|
||||
|
||||
static VkImageLayout d3d12_dsv_layout_from_flags(UINT flags)
|
||||
{
|
||||
const D3D12_DSV_FLAGS mask = D3D12_DSV_FLAG_READ_ONLY_DEPTH | D3D12_DSV_FLAG_READ_ONLY_STENCIL;
|
||||
|
||||
switch (flags & mask)
|
||||
{
|
||||
default: /* case 0: */
|
||||
return VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
case D3D12_DSV_FLAG_READ_ONLY_DEPTH:
|
||||
return VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
case D3D12_DSV_FLAG_READ_ONLY_STENCIL:
|
||||
return VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL;
|
||||
case D3D12_DSV_FLAG_READ_ONLY_DEPTH | D3D12_DSV_FLAG_READ_ONLY_STENCIL:
|
||||
return VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL;
|
||||
}
|
||||
}
|
||||
|
||||
void d3d12_dsv_desc_create_dsv(struct d3d12_dsv_desc *dsv_desc, struct d3d12_device *device,
|
||||
struct d3d12_resource *resource, const D3D12_DEPTH_STENCIL_VIEW_DESC *desc)
|
||||
{
|
||||
|
@ -3623,8 +3646,8 @@ void d3d12_dsv_desc_create_dsv(struct d3d12_dsv_desc *dsv_desc, struct d3d12_dev
|
|||
|
||||
if (desc)
|
||||
{
|
||||
if (desc->Flags)
|
||||
FIXME("Ignoring flags %#x.\n", desc->Flags);
|
||||
vkd3d_desc.layout = d3d12_resource_pick_layout(resource,
|
||||
d3d12_dsv_layout_from_flags(desc->Flags));
|
||||
|
||||
switch (desc->ViewDimension)
|
||||
{
|
||||
|
@ -3664,6 +3687,8 @@ void d3d12_dsv_desc_create_dsv(struct d3d12_dsv_desc *dsv_desc, struct d3d12_dev
|
|||
/* Avoid passing down UINT32_MAX here since that makes framebuffer logic later rather awkward. */
|
||||
vkd3d_desc.layer_count = min(vkd3d_desc.layer_count, resource->desc.DepthOrArraySize - vkd3d_desc.layer_idx);
|
||||
}
|
||||
else
|
||||
vkd3d_desc.layout = d3d12_resource_pick_layout(resource, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
||||
|
||||
assert(d3d12_resource_is_texture(resource));
|
||||
|
||||
|
|
|
@ -514,6 +514,7 @@ struct vkd3d_view
|
|||
struct
|
||||
{
|
||||
VkImageViewType vk_view_type;
|
||||
VkImageLayout vk_layout;
|
||||
unsigned int miplevel_idx;
|
||||
unsigned int layer_idx;
|
||||
unsigned int layer_count;
|
||||
|
@ -527,6 +528,7 @@ void vkd3d_view_incref(struct vkd3d_view *view) DECLSPEC_HIDDEN;
|
|||
struct vkd3d_texture_view_desc
|
||||
{
|
||||
VkImageViewType view_type;
|
||||
VkImageLayout layout;
|
||||
const struct vkd3d_format *format;
|
||||
unsigned int miplevel_idx;
|
||||
unsigned int miplevel_count;
|
||||
|
|
Loading…
Reference in New Issue