From 9429bcc4b03c551be61e28f06f9a407a0bc1139c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timur=20Krist=C3=B3f?= Date: Tue, 19 Feb 2019 14:19:59 +0100 Subject: [PATCH] radeonsi/nir: Use uniform location when calculating const_file_max. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The nine state tracker can produce NIR uniform variables whose location is explicitly set. radeonsi did not take that into account when calculating const_file_max, resulting in rendering glitches. This patch fixes that. Signed-Off-By: Timur Kristóf Tested-by: Andre Heider Reviewed-by: Timothy Arceri --- src/gallium/drivers/radeonsi/si_shader_nir.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 7554f5b..4c5e124 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -669,6 +669,9 @@ void si_nir_scan_shader(const struct nir_shader *nir, enum glsl_base_type base_type = glsl_get_base_type(glsl_without_array(type)); unsigned aoa_size = MAX2(1, glsl_get_aoa_size(type)); + unsigned loc = variable->data.location; + int slot_count = glsl_count_attribute_slots(type, false); + int max_slot = MAX2(info->const_file_max[0], (int) loc) + slot_count; /* Gather buffers declared bitmasks. Note: radeonsi doesn't * really use the mask (other than ubo_idx == 1 for regular @@ -716,8 +719,7 @@ void si_nir_scan_shader(const struct nir_shader *nir, if (base_type == GLSL_TYPE_SAMPLER) { if (variable->data.bindless) { info->const_buffers_declared |= 1; - info->const_file_max[0] += - glsl_count_attribute_slots(type, false); + info->const_file_max[0] = max_slot; } else { info->samplers_declared |= u_bit_consecutive(variable->data.binding, aoa_size); @@ -725,8 +727,7 @@ void si_nir_scan_shader(const struct nir_shader *nir, } else if (base_type == GLSL_TYPE_IMAGE) { if (variable->data.bindless) { info->const_buffers_declared |= 1; - info->const_file_max[0] += - glsl_count_attribute_slots(type, false); + info->const_file_max[0] = max_slot; } else { info->images_declared |= u_bit_consecutive(variable->data.binding, aoa_size); @@ -741,8 +742,7 @@ void si_nir_scan_shader(const struct nir_shader *nir, u_bit_consecutive(0, SI_NUM_CONST_BUFFERS); } else { info->const_buffers_declared |= 1; - info->const_file_max[0] += - glsl_count_attribute_slots(type, false); + info->const_file_max[0] = max_slot; } } } -- 2.7.4