Mesa (master): turnip: Disallow NPoT formats.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Sep 27 13:26:07 UTC 2019


Module: Mesa
Branch: master
Commit: fa522b8a4745e5a1e3f54528f18094775d7c597b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fa522b8a4745e5a1e3f54528f18094775d7c597b

Author: Bas Nieuwenhuizen <basni at chromium.org>
Date:   Thu Sep 19 23:34:36 2019 +0200

turnip: Disallow NPoT formats.

Copying is a mess for these formats for now.

Reviewed-by: Kristian H. Kristensen <hoegsberg at google.com>
Reviewed-by: Eric Anholt <eric at anholt.net>

---

 src/freedreno/vulkan/tu_formats.c | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/freedreno/vulkan/tu_formats.c b/src/freedreno/vulkan/tu_formats.c
index 5ae04d1e6ad..095f77570ba 100644
--- a/src/freedreno/vulkan/tu_formats.c
+++ b/src/freedreno/vulkan/tu_formats.c
@@ -614,15 +614,26 @@ tu_physical_device_get_format_properties(
    const struct vk_format_description *desc = vk_format_description(format);
    const struct tu_native_format *native_fmt = tu6_get_native_format(format);
    if (!desc || !native_fmt) {
-      out_properties->linearTilingFeatures = linear;
-      out_properties->optimalTilingFeatures = tiled;
-      out_properties->bufferFeatures = buffer;
-      return;
+      goto end;
    }
 
-   linear |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
-   tiled |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
    buffer |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
+   if (native_fmt->vtx >= 0) {
+      buffer |= VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT;
+   }
+
+   /*
+    * The non-power-of-two formats cannot be copied, so to make sure nothing
+    * broken is allowed don't allow these formats at all.
+    */
+   if (!util_is_power_of_two_or_zero(vk_format_get_blocksizebits(format))) {
+      goto end;
+   }
+
+   if (native_fmt->tex >= 0 || native_fmt->rb >= 0) {
+      linear |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
+      tiled |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
+   }
 
    if (native_fmt->tex >= 0) {
       linear |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
@@ -635,10 +646,7 @@ tu_physical_device_get_format_properties(
       tiled |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT;
    }
 
-   if (native_fmt->vtx >= 0) {
-      buffer |= VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT;
-   }
-
+end:
    out_properties->linearTilingFeatures = linear;
    out_properties->optimalTilingFeatures = tiled;
    out_properties->bufferFeatures = buffer;




More information about the mesa-commit mailing list