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");
