diff --git a/src/freedreno/ir3/ir3_compiler.c b/src/freedreno/ir3/ir3_compiler.c index 61d609517a1..8766110977c 100644 --- a/src/freedreno/ir3/ir3_compiler.c +++ b/src/freedreno/ir3/ir3_compiler.c @@ -328,6 +328,7 @@ ir3_compiler_create(struct fd_device *dev, const struct fd_dev_id *dev_id, if (compiler->gen >= 6) { compiler->nir_options.force_indirect_unrolling = nir_var_all, compiler->nir_options.lower_device_index_to_zero = true; + compiler->nir_options.instance_id_includes_base_index = true; if (dev_info->a6xx.has_dp2acc || dev_info->a6xx.has_dp4acc) { compiler->nir_options.has_udot_4x8 = diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index 9f274d58a29..fa9a6c407c6 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -1558,8 +1558,7 @@ tu6_init_static_regs(struct tu_device *dev, struct tu_cs *cs) .isammode = ISAMMODE_GL, .shared_consts_enable = false)); - /* TODO: set A6XX_VFD_ADD_OFFSET_INSTANCE and fix ir3 to avoid adding base instance */ - tu_cs_emit_write_reg(cs, REG_A6XX_VFD_ADD_OFFSET, A6XX_VFD_ADD_OFFSET_VERTEX); + tu_cs_emit_regs(cs, A6XX_VFD_ADD_OFFSET(.vertex = true, .instance = true)); tu_cs_emit_write_reg(cs, REG_A6XX_RB_UNKNOWN_8811, 0x00000010); tu_cs_emit_write_reg(cs, REG_A6XX_PC_MODE_CNTL, phys_dev->info->a6xx.magic.PC_MODE_CNTL); diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_emit.cc b/src/gallium/drivers/freedreno/a6xx/fd6_emit.cc index a0a2968f281..13d7b95610c 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_emit.cc +++ b/src/gallium/drivers/freedreno/a6xx/fd6_emit.cc @@ -928,7 +928,7 @@ fd6_emit_static_regs(struct fd_context *ctx, struct fd_ringbuffer *ring) .shared_consts_enable = false, ) ); - WRITE(REG_A6XX_VFD_ADD_OFFSET, A6XX_VFD_ADD_OFFSET_VERTEX); + OUT_REG(ring, A6XX_VFD_ADD_OFFSET(.vertex = true, .instance = true)); WRITE(REG_A6XX_VPC_UNKNOWN_9107, 0); WRITE(REG_A6XX_RB_UNKNOWN_8811, 0x00000010); WRITE(REG_A6XX_PC_MODE_CNTL, screen->info->a6xx.magic.PC_MODE_CNTL);