From 94923021d7e99ac7bb5ca62971ab6c1a98e132d0 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Thu, 31 Mar 2022 17:47:21 +0200 Subject: [PATCH] dzn: Support 2Darray views on 3D images for color attachments Those are declared as 3D RTVs in D3D12, and layers are treated as slices. Reviewed-by: Erik Faye-Lund Part-of: --- src/microsoft/vulkan/dzn_image.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/microsoft/vulkan/dzn_image.cpp b/src/microsoft/vulkan/dzn_image.cpp index 21f8695..1d8a30e 100644 --- a/src/microsoft/vulkan/dzn_image.cpp +++ b/src/microsoft/vulkan/dzn_image.cpp @@ -914,6 +914,7 @@ static void dzn_image_view_prepare_rtv_desc(dzn_image_view *iview) { bool use_array = iview->vk.base_array_layer > 0 || iview->vk.layer_count > 1; + bool from_3d_image = iview->vk.image->image_type == VK_IMAGE_TYPE_3D; bool ms = iview->vk.image->samples > 1; uint32_t plane_slice = (iview->vk.aspects & VK_IMAGE_ASPECT_PLANE_2_BIT) ? 2 : @@ -946,7 +947,12 @@ dzn_image_view_prepare_rtv_desc(dzn_image_view *iview) case VK_IMAGE_VIEW_TYPE_2D_ARRAY: case VK_IMAGE_VIEW_TYPE_CUBE: case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: - if (use_array && ms) { + if (from_3d_image) { + iview->rtv_desc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE3D; + iview->rtv_desc.Texture3D.MipSlice = iview->vk.base_mip_level; + iview->rtv_desc.Texture3D.FirstWSlice = iview->vk.base_array_layer; + iview->rtv_desc.Texture3D.WSize = iview->vk.layer_count; + } else if (use_array && ms) { iview->rtv_desc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY; iview->rtv_desc.Texture2DMSArray.FirstArraySlice = iview->vk.base_array_layer; iview->rtv_desc.Texture2DMSArray.ArraySize = iview->vk.layer_count; -- 2.7.4