From 4d0d678c9f657bae03e8265b18cf5d1775fd1e2d Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Sun, 21 Feb 2021 12:04:20 -0500 Subject: [PATCH] zink: set conformant ubo/ssbo size limits these caps correspond to descriptor binding limits provided by vulkan drivers fixes KHR-GL46.shader_storage_buffer_object.basic-max Reviewed-by: Erik Faye-Lund Part-of: --- src/gallium/drivers/zink/zink_screen.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 7ec0c16..a7cc5a8 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -430,7 +430,10 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param) return 0; case PIPE_CAP_MAX_SHADER_BUFFER_SIZE: - return 65536; + /* 16777216 (1<<24) is required by GL spec, 1<<27 is required by VK spec */ + assert(screen->info.props.limits.maxStorageBufferRange >= 1 << 27); + /* but Gallium can't handle values that are too big, so clamp to VK spec minimum */ + return 1 << 27; case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT: case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER: @@ -596,7 +599,10 @@ zink_get_shader_param(struct pipe_screen *pscreen, } case PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE: - return 65536; + /* 16384 required by GL spec, this is the minimum required by VK spec */ + assert(screen->info.props.limits.maxUniformBufferRange >= 16384); + /* but Gallium can't handle values that are too big */ + return MIN2(screen->info.props.limits.maxUniformBufferRange, 1 << 31); case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: return MIN2(screen->info.props.limits.maxPerStageDescriptorUniformBuffers, -- 2.7.4