dzn: Set up SRV descs for 3D textures correctly
authorJesse Natalie <jenatali@microsoft.com>
Thu, 16 Mar 2023 20:08:33 +0000 (13:08 -0700)
committerMarge Bot <emma+marge@anholt.net>
Thu, 23 Mar 2023 21:48:44 +0000 (21:48 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21913>

src/microsoft/vulkan/dzn_image.c

index 169273a..7ca0c53 100644 (file)
@@ -998,6 +998,7 @@ dzn_image_view_prepare_srv_desc(struct dzn_image_view *iview)
       (iview->vk.view_type == VK_IMAGE_VIEW_TYPE_CUBE ||
        iview->vk.view_type == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY) ?
       6 : 1;
+   bool from_3d_image = iview->vk.image->image_type == VK_IMAGE_TYPE_3D;
    bool use_array = iview->vk.base_array_layer > 0 ||
                     (iview->vk.layer_count / layers_per_elem) > 1;
 
@@ -1061,7 +1062,12 @@ dzn_image_view_prepare_srv_desc(struct dzn_image_view *iview)
 
    case VK_IMAGE_VIEW_TYPE_2D_ARRAY:
    case VK_IMAGE_VIEW_TYPE_2D:
-      if (use_array && ms) {
+      if (from_3d_image) {
+         iview->srv_desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D;
+         iview->srv_desc.Texture3D.MostDetailedMip = iview->vk.base_mip_level;
+         iview->srv_desc.Texture3D.MipLevels = iview->vk.level_count;
+         iview->srv_desc.Texture3D.ResourceMinLODClamp = 0.0f;
+      } else if (use_array && ms) {
          iview->srv_desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY;
          iview->srv_desc.Texture2DMSArray.FirstArraySlice = iview->vk.base_array_layer;
          iview->srv_desc.Texture2DMSArray.ArraySize = iview->vk.layer_count;