ac/nir: don't use load_esgs_vertex_stride_amd on gfx6-8
authorMarek Olšák <marek.olsak@amd.com>
Sat, 25 Feb 2023 21:00:50 +0000 (16:00 -0500)
committerMarge Bot <emma+marge@anholt.net>
Fri, 3 Mar 2023 00:41:48 +0000 (00:41 +0000)
An improvement for 9f1e6d8f70a8fa2c174e0070c4331f5f178e6f1.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21641>

src/amd/common/ac_nir_lower_esgs_io_to_mem.c

index e464666..3208eeb 100644 (file)
@@ -269,7 +269,11 @@ gs_per_vertex_input_offset(nir_builder *b,
       ? gs_per_vertex_input_vertex_offset_gfx9(b, st, vertex_src)
       : gs_per_vertex_input_vertex_offset_gfx6(b, st, vertex_src);
 
-   vertex_offset = nir_imul(b, vertex_offset, nir_load_esgs_vertex_stride_amd(b));
+   /* Gfx6-8 can't emulate VGT_ESGS_RING_ITEMSIZE because it uses the register to determine
+    * the allocation size of the ESGS ring buffer in memory.
+    */
+   if (st->gfx_level >= GFX9)
+      vertex_offset = nir_imul(b, vertex_offset, nir_load_esgs_vertex_stride_amd(b));
 
    unsigned base_stride = st->gfx_level >= GFX9 ? 1 : 64 /* Wave size on GFX6-8 */;
    nir_ssa_def *io_off = ac_nir_calc_io_offset(b, instr, nir_imm_int(b, base_stride * 4u), base_stride, st->map_io);