[Mesa-dev] [PATCH] miptree: Skip attempts to make unsupported images

Nanley Chery nanleychery at gmail.com
Mon Jun 27 18:30:24 UTC 2016


This causes tests that attempt to create linear depth buffers on
Gen7+ (unsupported), to be skipped.

Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
---
 src/tests/func/miptree/miptree.c | 39 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/src/tests/func/miptree/miptree.c b/src/tests/func/miptree/miptree.c
index 0ced389..37002cb 100644
--- a/src/tests/func/miptree/miptree.c
+++ b/src/tests/func/miptree/miptree.c
@@ -410,6 +410,19 @@ miptree_destroy(miptree_t *mt)
     free(mt);
 }
 
+static void
+can_create_image(VkImageType type, VkImageTiling tiling,
+                 uint32_t usage, VkFormat format)
+{
+    VkImageFormatProperties fmt_properties;
+    VkResult result =
+              vkGetPhysicalDeviceImageFormatProperties(t_physical_dev, format,
+                                                       type, tiling, usage,
+                                                       0, &fmt_properties);
+    if (result == VK_ERROR_FORMAT_NOT_SUPPORTED)
+       t_end(TEST_RESULT_SKIP);
+}
+
 static const miptree_t *
 miptree_create(void)
 {
@@ -424,10 +437,19 @@ miptree_create(void)
     const uint32_t depth = params->depth;
     const uint32_t array_length = params->array_length;
     const size_t buffer_size = miptree_calc_buffer_size();
+    const uint32_t usage_bits = VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
+                                VK_IMAGE_USAGE_TRANSFER_DST_BIT |
+                                VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+                                VK_IMAGE_USAGE_SAMPLED_BIT;
+    VkImageType image_type = image_type_from_image_view_type(params->view_type);
+
+    // Determine if an image can be created with this combination
+    can_create_image(image_type, VK_IMAGE_TILING_OPTIMAL,
+                     usage_bits, format);
 
     // Create the image that will contain the real miptree.
     VkImage image = qoCreateImage(t_device,
-        .imageType = image_type_from_image_view_type(params->view_type),
+        .imageType = image_type,
         .format = format,
         .mipLevels = levels,
         .arrayLayers = array_length,
@@ -437,10 +459,7 @@ miptree_create(void)
             .depth = depth,
         },
         .tiling = VK_IMAGE_TILING_OPTIMAL,
-        .usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
-                 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
-                 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
-                 VK_IMAGE_USAGE_SAMPLED_BIT);
+        .usage = usage_bits);
     VkBuffer src_buffer = qoCreateBuffer(t_device,
         .size = buffer_size,
         .usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
@@ -501,6 +520,11 @@ miptree_create(void)
                 break;
             case MIPTREE_UPLOAD_METHOD_COPY_FROM_LINEAR_IMAGE:
             case MIPTREE_UPLOAD_METHOD_COPY_WITH_DRAW:
+
+                // Determine if an image can be created with this combination
+                can_create_image(VK_IMAGE_TYPE_2D, VK_IMAGE_TILING_LINEAR,
+                                 VK_IMAGE_USAGE_TRANSFER_SRC_BIT, format);
+
                 src_vk_image = qoCreateImage(t_device,
                     .format = format,
                     .mipLevels = 1,
@@ -523,6 +547,11 @@ miptree_create(void)
                 break;
             case MIPTREE_DOWNLOAD_METHOD_COPY_TO_LINEAR_IMAGE:
             case MIPTREE_DOWNLOAD_METHOD_COPY_WITH_DRAW:
+
+                // Determine if an image can be created with this combination
+                can_create_image(VK_IMAGE_TYPE_2D, VK_IMAGE_TILING_LINEAR,
+                                 VK_IMAGE_USAGE_TRANSFER_DST_BIT, format);
+
                 dest_vk_image = qoCreateImage(t_device,
                     .format = format,
                     .mipLevels = 1,
-- 
2.9.0



More information about the mesa-dev mailing list