radv: Add per-prim attributes to ring_attr stride.
authorTimur Kristóf <timur.kristof@gmail.com>
Fri, 17 Feb 2023 11:57:26 +0000 (12:57 +0100)
committerMarge Bot <emma+marge@anholt.net>
Thu, 23 Mar 2023 11:49:35 +0000 (11:49 +0000)
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21409>

src/amd/vulkan/radv_nir_lower_abi.c

index 2ed0497..9795145 100644 (file)
@@ -125,8 +125,12 @@ lower_abi_instr(nir_builder *b, nir_instr *instr, void *state)
    case nir_intrinsic_load_ring_attr_amd:
       replacement = load_ring(b, RING_PS_ATTR, s);
 
+      /* Note, the HW always assumes there is at least 1 per-vertex param. */
+      const unsigned total_num_params =
+         MAX2(1, s->info->outinfo.param_exports) + s->info->outinfo.prim_param_exports;
+
       nir_ssa_def *dword1 = nir_channel(b, replacement, 1);
-      dword1 = nir_ior_imm(b, dword1, S_008F04_STRIDE(16 * s->info->outinfo.param_exports));
+      dword1 = nir_ior_imm(b, dword1, S_008F04_STRIDE(16 * total_num_params));
       replacement = nir_vector_insert_imm(b, replacement, dword1, 1);
       break;