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

Author: Mike Blumenkrantz <[email protected]>
Date:   Fri Feb 17 17:32:50 2023 -0500

zink: make ZINK_DESCRIPTOR_MODE=db the default

this has been getting beat up a lot lately by radv ci (and me),
so it should be ready to turn on by default for even more testing
in advance of the 23.1 release

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21398>

---

 src/gallium/drivers/zink/VP_ZINK_requirements.json |  6 +-
 src/gallium/drivers/zink/ci/gitlab-ci.yml          |  1 -
 src/gallium/drivers/zink/zink_screen.c             | 66 +++++++++++++++-------
 3 files changed, 52 insertions(+), 21 deletions(-)

diff --git a/src/gallium/drivers/zink/VP_ZINK_requirements.json 
b/src/gallium/drivers/zink/VP_ZINK_requirements.json
index a530edc0f9d..0e834abe199 100644
--- a/src/gallium/drivers/zink/VP_ZINK_requirements.json
+++ b/src/gallium/drivers/zink/VP_ZINK_requirements.json
@@ -440,7 +440,8 @@
             "extensions": {
                 "VK_EXT_primitives_generated_query": 1,
                 "VK_EXT_color_write_enable": 1,
-                "VK_EXT_extended_dynamic_state3": 1
+                "VK_EXT_extended_dynamic_state3": 1,
+                "VK_EXT_descriptor_buffer": 1
             },
             "features": {
                 "VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT": {
@@ -457,6 +458,9 @@
                     "extendedDynamicState3RasterizationSamples": true,
                     "extendedDynamicState3ColorWriteMask": true,
                     "extendedDynamicState3LogicOpEnable": true
+                },
+                "VkPhysicalDeviceDescriptorBufferFeaturesEXT": {
+                    "descriptorBuffer": true
                 }
             }
         },
diff --git a/src/gallium/drivers/zink/ci/gitlab-ci.yml 
b/src/gallium/drivers/zink/ci/gitlab-ci.yml
index 89e9bbced71..2ed7ea79f40 100644
--- a/src/gallium/drivers/zink/ci/gitlab-ci.yml
+++ b/src/gallium/drivers/zink/ci/gitlab-ci.yml
@@ -132,7 +132,6 @@ zink-freedreno-a630-traces:
   variables:
     PIGLIT_PROFILES: all
     PIGLIT_PLATFORM: gbm
-    ZINK_DESCRIPTORS: db
     RADV_PERFTEST: gpl
     B2C_TEST_SCRIPT: ./install/valve/gl_combined_testing.sh
     B2C_JOB_SUCCESS_REGEX: 'Execution is over, pipeline status: 0'
diff --git a/src/gallium/drivers/zink/zink_screen.c 
b/src/gallium/drivers/zink/zink_screen.c
index d4689138c30..86996420f48 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -2755,9 +2755,6 @@ zink_internal_create_screen(const struct 
pipe_screen_config *config)
       screen->desc_set_id[ZINK_DESCRIPTOR_TYPE_IMAGE] = 4;
       screen->desc_set_id[ZINK_DESCRIPTOR_BINDLESS] = 5;
    }
-   if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_AUTO) {
-      zink_descriptor_mode = ZINK_DESCRIPTOR_MODE_LAZY;
-   }
 
    if (screen->info.have_EXT_calibrated_timestamps && 
!check_have_device_time(screen))
       goto fail;
@@ -2888,39 +2885,70 @@ zink_internal_create_screen(const struct 
pipe_screen_config *config)
          screen->resizable_bar = true;
    }
 
-   if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) {
+   bool can_db = true;
+   {
       if (!screen->info.have_EXT_descriptor_buffer) {
-         mesa_loge("Cannot use db descriptor mode without 
EXT_descriptor_buffer");
-         goto fail;
+         if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) {
+            mesa_loge("Cannot use db descriptor mode without 
EXT_descriptor_buffer");
+            goto fail;
+         }
+         can_db = false;
       }
       if (!screen->resizable_bar) {
-         mesa_loge("Cannot use db descriptor mode without resizable bar");
-         goto fail;
+         if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) {
+            mesa_loge("Cannot use db descriptor mode without resizable bar");
+            goto fail;
+         }
+         can_db = false;
       }
       if (!screen->info.have_EXT_non_seamless_cube_map) {
-         mesa_loge("Cannot use db descriptor mode without 
EXT_non_seamless_cube_map");
-         goto fail;
+         if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) {
+            mesa_loge("Cannot use db descriptor mode without 
EXT_non_seamless_cube_map");
+            goto fail;
+         }
+         can_db = false;
       }
       if (!screen->info.rb2_feats.nullDescriptor) {
-         mesa_loge("Cannot use db descriptor mode without 
robustness2.nullDescriptor");
-         goto fail;
+         if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) {
+            mesa_loge("Cannot use db descriptor mode without 
robustness2.nullDescriptor");
+            goto fail;
+         }
+         can_db = false;
       }
       if (ZINK_FBFETCH_DESCRIPTOR_SIZE < 
screen->info.db_props.inputAttachmentDescriptorSize) {
-         mesa_loge("Cannot use db descriptor mode with 
inputAttachmentDescriptorSize(%u) > %u", 
(unsigned)screen->info.db_props.inputAttachmentDescriptorSize, 
ZINK_FBFETCH_DESCRIPTOR_SIZE);
-         goto fail;
+         if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) {
+            mesa_loge("Cannot use db descriptor mode with 
inputAttachmentDescriptorSize(%u) > %u", 
(unsigned)screen->info.db_props.inputAttachmentDescriptorSize, 
ZINK_FBFETCH_DESCRIPTOR_SIZE);
+            goto fail;
+         }
+         mesa_logw("zink: bug detected: inputAttachmentDescriptorSize(%u) > 
%u", (unsigned)screen->info.db_props.inputAttachmentDescriptorSize, 
ZINK_FBFETCH_DESCRIPTOR_SIZE);
+         can_db = false;
       }
       if (screen->compact_descriptors) {
-         /* TODO: bindless */
          if (screen->info.db_props.maxDescriptorBufferBindings < 3) {
-            mesa_loge("Cannot use db descriptor mode with compact descriptors 
with maxDescriptorBufferBindings < 3");
-            goto fail;
+            if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) {
+               mesa_loge("Cannot use db descriptor mode with compact 
descriptors with maxDescriptorBufferBindings < 3");
+               goto fail;
+            }
+            can_db = false;
          }
       } else {
          if (screen->info.db_props.maxDescriptorBufferBindings < 5) {
-            mesa_loge("Cannot use db descriptor mode with 
maxDescriptorBufferBindings < 5");
-            goto fail;
+            if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) {
+               mesa_loge("Cannot use db descriptor mode with 
maxDescriptorBufferBindings < 5");
+               goto fail;
+            }
+            can_db = false;
          }
       }
+   }
+   if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_AUTO) {
+      /* descriptor buffer is not performant with virt yet */
+      if (screen->info.driver_props.driverID == VK_DRIVER_ID_MESA_VENUS)
+         zink_descriptor_mode = ZINK_DESCRIPTOR_MODE_LAZY;
+      else
+         zink_descriptor_mode = can_db ? ZINK_DESCRIPTOR_MODE_DB : 
ZINK_DESCRIPTOR_MODE_LAZY;
+   }
+   if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) {
       const uint32_t sampler_size = 
MAX2(screen->info.db_props.combinedImageSamplerDescriptorSize, 
screen->info.db_props.robustUniformTexelBufferDescriptorSize);
       const uint32_t image_size = 
MAX2(screen->info.db_props.storageImageDescriptorSize, 
screen->info.db_props.robustStorageTexelBufferDescriptorSize);
       if (screen->compact_descriptors) {

Reply via email to