Mesa (main): v3dv: implement VK_EXT_separate_stencil_usage

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu May 5 11:02:57 UTC 2022


Module: Mesa
Branch: main
Commit: 32223ac67f6015171c79dcd2dd0a5f19d7dafc60
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=32223ac67f6015171c79dcd2dd0a5f19d7dafc60

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Thu May  5 08:58:54 2022 +0200

v3dv: implement VK_EXT_separate_stencil_usage

We don't care about the depth/stencil usage other than to determine
if an image format is supported for that usage.

Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16344>

---

 docs/features.txt                  |  2 +-
 src/broadcom/vulkan/v3dv_device.c  |  1 +
 src/broadcom/vulkan/v3dv_formats.c | 23 ++++++++++++++++-------
 3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/docs/features.txt b/docs/features.txt
index 77cfee15a6b..653a547d10b 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -467,7 +467,7 @@ Vulkan 1.2 -- all DONE: anv, vn
   VK_EXT_host_query_reset                               DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_EXT_sampler_filter_minmax                          DONE (anv/gen9+, lvp, radv, tu, vn)
   VK_EXT_scalar_block_layout                            DONE (anv, lvp, radv/gfx7+, tu, vn)
-  VK_EXT_separate_stencil_usage                         DONE (anv, lvp, radv, tu, vn)
+  VK_EXT_separate_stencil_usage                         DONE (anv, lvp, radv, tu, v3dv, vn)
   VK_EXT_shader_viewport_index_layer                    DONE (anv, lvp, radv, tu, vn)
 
 Vulkan 1.3 -- all DONE: anv, radv, lvp
diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c
index bd8e0e8640d..c5e52fd48e2 100644
--- a/src/broadcom/vulkan/v3dv_device.c
+++ b/src/broadcom/vulkan/v3dv_device.c
@@ -162,6 +162,7 @@ get_device_extensions(const struct v3dv_physical_device *device,
       .EXT_pipeline_creation_feedback      = true,
       .EXT_private_data                    = true,
       .EXT_provoking_vertex                = true,
+      .EXT_separate_stencil_usage          = true,
       .EXT_vertex_attribute_divisor        = true,
 #ifdef ANDROID
       .ANDROID_native_buffer               = true,
diff --git a/src/broadcom/vulkan/v3dv_formats.c b/src/broadcom/vulkan/v3dv_formats.c
index 4751f50f06b..581ad8d5a6e 100644
--- a/src/broadcom/vulkan/v3dv_formats.c
+++ b/src/broadcom/vulkan/v3dv_formats.c
@@ -347,7 +347,13 @@ get_image_format_properties(
    if (info->flags & VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT)
       goto unsupported;
 
-   if (info->usage & VK_IMAGE_USAGE_TRANSFER_SRC_BIT) {
+   const VkImageStencilUsageCreateInfo *stencil_usage_info =
+      vk_find_struct_const(info->pNext, IMAGE_STENCIL_USAGE_CREATE_INFO);
+
+   VkImageUsageFlags usage =
+      info->usage | (stencil_usage_info ? stencil_usage_info->stencilUsage : 0);
+
+   if (usage & VK_IMAGE_USAGE_TRANSFER_SRC_BIT) {
       if (!(format_feature_flags & VK_FORMAT_FEATURE_TRANSFER_SRC_BIT)) {
          goto unsupported;
       }
@@ -363,14 +369,14 @@ get_image_format_properties(
       }
    }
 
-   if (info->usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT) {
+   if (usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT) {
       if (!(format_feature_flags & VK_FORMAT_FEATURE_TRANSFER_DST_BIT)) {
          goto unsupported;
       }
    }
 
-   if (info->usage & (VK_IMAGE_USAGE_SAMPLED_BIT |
-                      VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) {
+   if (usage & (VK_IMAGE_USAGE_SAMPLED_BIT |
+                VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) {
       if (!(format_feature_flags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) {
          goto unsupported;
       }
@@ -385,19 +391,19 @@ get_image_format_properties(
       }
    }
 
-   if (info->usage & VK_IMAGE_USAGE_STORAGE_BIT) {
+   if (usage & VK_IMAGE_USAGE_STORAGE_BIT) {
       if (!(format_feature_flags & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)) {
          goto unsupported;
       }
    }
 
-   if (info->usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) {
+   if (usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) {
       if (!(format_feature_flags & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)) {
          goto unsupported;
       }
    }
 
-   if (info->usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) {
+   if (usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) {
       if (!(format_feature_flags &
             VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)) {
          goto unsupported;
@@ -535,6 +541,9 @@ v3dv_GetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice,
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:
          external_info = (const void *) s;
          break;
+      case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:
+         /* Do nothing, get_image_format_properties() below will handle it */;
+         break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT:
          drm_format_mod_info = (const void *) s;
          switch (drm_format_mod_info->drmFormatModifier) {



More information about the mesa-commit mailing list