Module: Mesa Branch: staging/22.2 Commit: 4813bc413e78dc2ea76453b26283ae5f32a0e760 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4813bc413e78dc2ea76453b26283ae5f32a0e760
Author: Mike Blumenkrantz <[email protected]> Date: Thu Apr 7 10:14:10 2022 -0400 zink: flag all assigned output slots as mapped this ensures types which consume more than 1 slot are effectively tagged so that the next stage inputs are also assigned properly fixes: spec@arb_enhanced_layouts@execution@component-layout@vs-fs-array-dvec3 cc: mesa-stable Reviewed-by: Timur Kristóf <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18444> (cherry picked from commit a0f6fecc6afeccc8e149ab31769df8b5225faa16) --- .pick_status.json | 2 +- src/gallium/drivers/zink/ci/zink-lvp-fails.txt | 1 - src/gallium/drivers/zink/ci/zink-radv-fails.txt | 1 - src/gallium/drivers/zink/zink_compiler.c | 11 +++++++---- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 7407ca428a5..f90b7fcd77e 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3109,7 +3109,7 @@ "description": "zink: flag all assigned output slots as mapped", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt index 9f73e756db2..9b3fb3e8911 100644 --- a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt @@ -251,7 +251,6 @@ spec@arb_texture_buffer_object@formats (vs- arb),Crash spec@arb_arrays_of_arrays@execution@image_store@basic-imagestore-mixed-const-non-const-uniform-index,Fail spec@arb_arrays_of_arrays@execution@image_store@basic-imagestore-mixed-const-non-const-uniform-index2,Fail spec@arb_arrays_of_arrays@execution@image_store@basic-imagestore-non-const-uniform-index,Fail -spec@arb_enhanced_layouts@execution@component-layout@vs-fs-array-dvec3,Fail spec@arb_fragment_program_shadow@tex-shadow1d,Fail spec@arb_fragment_program_shadow@tex-shadow2d,Fail spec@arb_fragment_program_shadow@tex-shadow2drect,Fail diff --git a/src/gallium/drivers/zink/ci/zink-radv-fails.txt b/src/gallium/drivers/zink/ci/zink-radv-fails.txt index c486a93170d..b419fb44bf1 100644 --- a/src/gallium/drivers/zink/ci/zink-radv-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-radv-fails.txt @@ -60,7 +60,6 @@ spec@arb_arrays_of_arrays@execution@image_store@basic-imagestore-mixed-const-non spec@arb_arrays_of_arrays@execution@image_store@basic-imagestore-non-const-uniform-index,Fail spec@arb_bindless_texture@compiler@[email protected],Crash spec@arb_depth_texture@depth-tex-modes,Fail -spec@arb_enhanced_layouts@execution@component-layout@vs-fs-array-dvec3,Fail spec@arb_fragment_program_shadow@tex-shadow1d,Fail spec@arb_fragment_program_shadow@tex-shadow2d,Fail spec@arb_fragment_program_shadow@tex-shadow2drect,Fail diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 4a500e6cbbe..fb641c14b54 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -1396,11 +1396,14 @@ assign_producer_var_io(gl_shader_stage stage, nir_variable *var, unsigned *reser } if (slot_map[slot] == 0xff) { assert(*reserved < MAX_VARYING); - slot_map[slot] = *reserved; - if (stage == MESA_SHADER_TESS_EVAL && var->data.mode == nir_var_shader_in && !var->data.patch) - *reserved += glsl_count_vec4_slots(glsl_get_array_element(var->type), false, false); + unsigned num_slots; + if (nir_is_arrayed_io(var, stage)) + num_slots = glsl_count_vec4_slots(glsl_get_array_element(var->type), false, false); else - *reserved += glsl_count_vec4_slots(var->type, false, false); + num_slots = glsl_count_vec4_slots(var->type, false, false); + assert(*reserved + num_slots <= MAX_VARYING); + for (unsigned i = 0; i < num_slots; i++) + slot_map[slot + i] = (*reserved)++; } slot = slot_map[slot]; assert(slot < MAX_VARYING);
