freedreno/a7xx: Document partial workgroup register

This lets us implement "unaligned" dispatches without inserting shader
code.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28447>
This commit is contained in:
Connor Abbott 2024-03-13 08:19:57 -04:00 committed by Marge Bot
parent b8cb00c64a
commit 1edeeb3d13
5 changed files with 10 additions and 10 deletions

View file

@ -499,9 +499,9 @@ a6xx_emit_grid(struct kernel *kernel, uint32_t grid[3],
.localsizez = local_size[2] - 1,
));
if (CHIP == A7XX) {
OUT_REG(ring, A7XX_HLSQ_CS_LOCAL_SIZE(.localsizex = local_size[0] - 1,
.localsizey = local_size[1] - 1,
.localsizez = local_size[2] - 1, ));
OUT_REG(ring, A7XX_HLSQ_CS_LAST_LOCAL_SIZE(.localsizex = local_size[0] - 1,
.localsizey = local_size[1] - 1,
.localsizez = local_size[2] - 1, ));
}
OUT_REG(ring, HLSQ_CS_NDRANGE_1(CHIP,

View file

@ -5723,8 +5723,8 @@ to upconvert to 32b float internally?
<bitfield name="WGTILEHEIGHT" low="26" high="31"/>
</reg32>
<reg32 offset="0xa9df" name="HLSQ_CS_LOCAL_SIZE" variants="A7XX-" usage="cmd">
<!-- localsize is value minus one: -->
<reg32 offset="0xa9df" name="HLSQ_CS_LAST_LOCAL_SIZE" variants="A7XX-" usage="cmd">
<!-- The size of the last workgroup. localsize is value minus one: -->
<bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>
<bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>
<bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>

View file

@ -2302,7 +2302,7 @@ tu_init_cmdbuf_start_a725_quirk(struct tu_device *device)
HLSQ_CS_NDRANGE_4(A7XX, .globaloff_y = 0),
HLSQ_CS_NDRANGE_5(A7XX, .globalsize_z = 1),
HLSQ_CS_NDRANGE_6(A7XX, .globaloff_z = 0));
tu_cs_emit_regs(&sub_cs, A7XX_HLSQ_CS_LOCAL_SIZE(
tu_cs_emit_regs(&sub_cs, A7XX_HLSQ_CS_LAST_LOCAL_SIZE(
.localsizex = 255,
.localsizey = 0,
.localsizez = 0));

View file

@ -1553,9 +1553,9 @@ tu6_emit_cs_config(struct tu_cs *cs,
WORKITEMRASTORDER_TILED, ));
tu_cs_emit_regs(
cs, A7XX_HLSQ_CS_LOCAL_SIZE(.localsizex = v->local_size[0] - 1,
.localsizey = v->local_size[1] - 1,
.localsizez = v->local_size[2] - 1, ));
cs, A7XX_HLSQ_CS_LAST_LOCAL_SIZE(.localsizex = v->local_size[0] - 1,
.localsizey = v->local_size[1] - 1,
.localsizez = v->local_size[2] - 1, ));
tu_cs_emit_regs(cs, A7XX_SP_CS_UNKNOWN_A9BE(0)); // Sometimes is 0x08000000
}

View file

@ -55,7 +55,7 @@ cs_program_emit_local_size(struct fd_context *ctx, struct fd_ringbuffer *ring,
);
OUT_REG(ring,
A7XX_HLSQ_CS_LOCAL_SIZE(
A7XX_HLSQ_CS_LAST_LOCAL_SIZE(
.localsizex = local_size[0] - 1,
.localsizey = local_size[1] - 1,
.localsizez = local_size[2] - 1,