diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 8bd76964c5d..4d4606036f0 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -2471,9 +2471,10 @@ enum radv_ps_in_type { static uint32_t offset_to_ps_input(const uint32_t offset, const enum radv_ps_in_type type) { - assert(offset != AC_EXP_PARAM_UNDEFINED); - - if (offset >= AC_EXP_PARAM_DEFAULT_VAL_0000 && offset <= AC_EXP_PARAM_DEFAULT_VAL_1111) { + if (offset == AC_EXP_PARAM_UNDEFINED) { + /* The input is UNDEFINED, use zero. */ + return S_028644_OFFSET(0x20) | S_028644_DEFAULT_VAL(0); + } else if (offset >= AC_EXP_PARAM_DEFAULT_VAL_0000 && offset <= AC_EXP_PARAM_DEFAULT_VAL_1111) { /* The input is a DEFAULT_VAL constant. */ return S_028644_OFFSET(0x20) | S_028644_DEFAULT_VAL(offset - AC_EXP_PARAM_DEFAULT_VAL_0000); } @@ -2511,35 +2512,12 @@ offset_to_ps_input(const uint32_t offset, const enum radv_ps_in_type type) return ps_input_cntl; } -static void -slot_to_ps_input(const struct radv_vs_output_info *outinfo, unsigned slot, uint32_t *ps_input_cntl, unsigned *ps_offset, - const bool use_default_0, const enum radv_ps_in_type type) -{ - unsigned vs_offset = outinfo->vs_output_param_offset[slot]; - - if (vs_offset == AC_EXP_PARAM_UNDEFINED) { - if (use_default_0) - vs_offset = AC_EXP_PARAM_DEFAULT_VAL_0000; - else - return; - } - - ps_input_cntl[*ps_offset] = offset_to_ps_input(vs_offset, type); - ++(*ps_offset); -} - static void input_mask_to_ps_inputs(const struct radv_vs_output_info *outinfo, const struct radv_shader *ps, uint32_t input_mask, uint32_t *ps_input_cntl, unsigned *ps_offset, const enum radv_ps_in_type default_type) { u_foreach_bit (i, input_mask) { - unsigned vs_offset = outinfo->vs_output_param_offset[VARYING_SLOT_VAR0 + i]; - if (vs_offset == AC_EXP_PARAM_UNDEFINED) { - ps_input_cntl[*ps_offset] = S_028644_OFFSET(0x20); - ++(*ps_offset); - continue; - } - + const unsigned vs_offset = outinfo->vs_output_param_offset[VARYING_SLOT_VAR0 + i]; enum radv_ps_in_type type = default_type; if (ps->info.ps.explicit_shaded_mask & BITFIELD_BIT(*ps_offset)) @@ -2577,10 +2555,12 @@ radv_emit_ps_inputs(struct radv_cmd_buffer *cmd_buffer) ps_input_cntl[ps_offset++] = S_028644_PT_SPRITE_TEX(1) | S_028644_OFFSET(0x20); if (ps->info.ps.input_clips_culls_mask & 0x0f) - slot_to_ps_input(outinfo, VARYING_SLOT_CLIP_DIST0, ps_input_cntl, &ps_offset, false, radv_ps_in_interpolated); + ps_input_cntl[ps_offset++] = + offset_to_ps_input(outinfo->vs_output_param_offset[VARYING_SLOT_CLIP_DIST0], radv_ps_in_interpolated); if (ps->info.ps.input_clips_culls_mask & 0xf0) - slot_to_ps_input(outinfo, VARYING_SLOT_CLIP_DIST1, ps_input_cntl, &ps_offset, false, radv_ps_in_interpolated); + ps_input_cntl[ps_offset++] = + offset_to_ps_input(outinfo->vs_output_param_offset[VARYING_SLOT_CLIP_DIST1], radv_ps_in_interpolated); input_mask_to_ps_inputs(outinfo, ps, ps->info.ps.input_mask, ps_input_cntl, &ps_offset, radv_ps_in_flat); @@ -2588,17 +2568,17 @@ radv_emit_ps_inputs(struct radv_cmd_buffer *cmd_buffer) if (ps->info.ps.prim_id_input) { num_per_primitive_params += !!outinfo->export_prim_id_per_primitive; const enum radv_ps_in_type t = outinfo->export_prim_id_per_primitive ? per_prim : radv_ps_in_flat; - slot_to_ps_input(outinfo, VARYING_SLOT_PRIMITIVE_ID, ps_input_cntl, &ps_offset, false, t); + ps_input_cntl[ps_offset++] = offset_to_ps_input(outinfo->vs_output_param_offset[VARYING_SLOT_PRIMITIVE_ID], t); } if (ps->info.ps.layer_input) { num_per_primitive_params += !!outinfo->writes_layer_per_primitive; const enum radv_ps_in_type t = outinfo->writes_layer_per_primitive ? per_prim : radv_ps_in_flat; - slot_to_ps_input(outinfo, VARYING_SLOT_LAYER, ps_input_cntl, &ps_offset, true, t); + ps_input_cntl[ps_offset++] = offset_to_ps_input(outinfo->vs_output_param_offset[VARYING_SLOT_LAYER], t); } if (ps->info.ps.viewport_index_input) { num_per_primitive_params += !!outinfo->writes_viewport_index_per_primitive; const enum radv_ps_in_type t = outinfo->writes_viewport_index_per_primitive ? per_prim : radv_ps_in_flat; - slot_to_ps_input(outinfo, VARYING_SLOT_VIEWPORT, ps_input_cntl, &ps_offset, true, t); + ps_input_cntl[ps_offset++] = offset_to_ps_input(outinfo->vs_output_param_offset[VARYING_SLOT_VIEWPORT], t); } /* Per-primitive PS inputs: the HW needs these to be last. */ diff --git a/src/gallium/drivers/zink/ci/zink-radv-navi10-fails.txt b/src/gallium/drivers/zink/ci/zink-radv-navi10-fails.txt index 27e88c99c03..a20b9199485 100644 --- a/src/gallium/drivers/zink/ci/zink-radv-navi10-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-radv-navi10-fails.txt @@ -167,3 +167,7 @@ spec@ext_framebuffer_multisample@interpolation 8 non-centroid-disabled,Fail # Regression noticed in https://gitlab.freedesktop.org/mesa/mesa/-/pipelines/891104 spec@arb_viewport_array@display-list,Fail + +# zink_create_quads_emulation_gs doesn't write primitive ID +# https://gitlab.freedesktop.org/mesa/mesa/-/issues/12214 +spec@glsl-1.50@execution@primitive-id-no-gs-quads,Fail diff --git a/src/gallium/drivers/zink/ci/zink-radv-navi31-fails.txt b/src/gallium/drivers/zink/ci/zink-radv-navi31-fails.txt index 600d253fc5d..3cffa46e308 100644 --- a/src/gallium/drivers/zink/ci/zink-radv-navi31-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-radv-navi31-fails.txt @@ -201,3 +201,7 @@ spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_yuv420,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_yvu420,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_yvyu,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-transcode-nv12-as-r8-gr88,Fail + +# zink_create_quads_emulation_gs doesn't write primitive ID +# https://gitlab.freedesktop.org/mesa/mesa/-/issues/12214 +spec@glsl-1.50@execution@primitive-id-no-gs-quads,Fail diff --git a/src/gallium/drivers/zink/ci/zink-radv-polaris10-fails.txt b/src/gallium/drivers/zink/ci/zink-radv-polaris10-fails.txt index 66dd138c47d..f11f7adf02f 100644 --- a/src/gallium/drivers/zink/ci/zink-radv-polaris10-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-radv-polaris10-fails.txt @@ -598,3 +598,7 @@ spec@ext_texture_array@copyteximage 1d_array samples=2,Fail spec@ext_texture_array@copyteximage 1d_array samples=4,Fail spec@ext_texture_array@copyteximage 1d_array samples=6,Fail spec@ext_texture_array@copyteximage 1d_array samples=8,Fail + +# zink_create_quads_emulation_gs doesn't write primitive ID +# https://gitlab.freedesktop.org/mesa/mesa/-/issues/12214 +spec@glsl-1.50@execution@primitive-id-no-gs-quads,Fail diff --git a/src/gallium/drivers/zink/ci/zink-radv-vangogh-fails.txt b/src/gallium/drivers/zink/ci/zink-radv-vangogh-fails.txt index 61c00e3942d..e4958f4938a 100644 --- a/src/gallium/drivers/zink/ci/zink-radv-vangogh-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-radv-vangogh-fails.txt @@ -171,3 +171,6 @@ spec@ext_framebuffer_multisample@interpolation 8 non-centroid-disabled,Fail # Regression noticed in https://gitlab.freedesktop.org/mesa/mesa/-/pipelines/891104 spec@arb_viewport_array@display-list,Fail +# zink_create_quads_emulation_gs doesn't write primitive ID +# https://gitlab.freedesktop.org/mesa/mesa/-/issues/12214 +spec@glsl-1.50@execution@primitive-id-no-gs-quads,Fail