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

Author: Mike Blumenkrantz <[email protected]>
Date:   Tue Oct 18 10:08:38 2022 -0400

zink: clamp shader bindings for compute descriptors

this uses massively less memory for some drivers

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

---

 src/gallium/drivers/zink/zink_compiler.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_compiler.c 
b/src/gallium/drivers/zink/zink_compiler.c
index 5761bd9468f..2b3caa8717d 100644
--- a/src/gallium/drivers/zink/zink_compiler.c
+++ b/src/gallium/drivers/zink/zink_compiler.c
@@ -2657,23 +2657,27 @@ zink_binding(gl_shader_stage stage, VkDescriptorType 
type, int index, bool compa
    if (stage == MESA_SHADER_NONE) {
       unreachable("not supported");
    } else {
+      unsigned base = stage;
+      /* clamp compute bindings for better driver efficiency */
+      if (stage == MESA_SHADER_COMPUTE)
+         base = 0;
       switch (type) {
       case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
       case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
-         return stage * 2 + !!index;
+         return base * 2 + !!index;
 
       case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
       case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
          assert(index < PIPE_MAX_SAMPLERS);
-         return (stage * PIPE_MAX_SAMPLERS) + index;
+         return (base * PIPE_MAX_SAMPLERS) + index;
 
       case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
-         return stage + (compact_descriptors * (ZINK_GFX_SHADER_COUNT * 2));
+         return base + (compact_descriptors * (ZINK_GFX_SHADER_COUNT * 2));
 
       case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
       case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
          assert(index < ZINK_MAX_SHADER_IMAGES);
-         return (stage * ZINK_MAX_SHADER_IMAGES) + index + 
(compact_descriptors * (ZINK_GFX_SHADER_COUNT * PIPE_MAX_SAMPLERS));
+         return (base * ZINK_MAX_SHADER_IMAGES) + index + (compact_descriptors 
* (ZINK_GFX_SHADER_COUNT * PIPE_MAX_SAMPLERS));
 
       default:
          unreachable("unexpected type");

Reply via email to