mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 05:38:16 +02:00
radeonsi/nir: Use uniform location when calculating const_file_max.
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 <timur.kristof@gmail.com> Tested-by: Andre Heider <a.heider@gmail.com> Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
parent
afb15d14ca
commit
9429bcc4b0
1 changed files with 6 additions and 6 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue