freedreno/a5xx: Refactor SHADER_OBJ emit to a helper function.

This will grow private mem setup shortly.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24358>
This commit is contained in:
Emma Anholt 2023-07-27 11:36:03 -07:00 committed by Marge Bot
parent c361e1d0d9
commit c9f9d71412
3 changed files with 15 additions and 6 deletions

View file

@ -83,8 +83,7 @@ cs_program_emit(struct fd_ringbuffer *ring, struct ir3_shader_variant *v)
OUT_RING(ring, constlen); /* HLSQ_CS_CONSTLEN */
OUT_RING(ring, instrlen); /* HLSQ_CS_INSTRLEN */
OUT_PKT4(ring, REG_A5XX_SP_CS_OBJ_START_LO, 2);
OUT_RELOC(ring, v->bo, 0, 0, 0); /* SP_CS_OBJ_START_LO/HI */
fd5_emit_shader_obj(ring, v, REG_A5XX_SP_CS_OBJ_START_LO);
OUT_PKT4(ring, REG_A5XX_HLSQ_UPDATE_CNTL, 1);
OUT_RING(ring, 0x1f00000);

View file

@ -81,6 +81,14 @@ fd5_emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
}
}
void
fd5_emit_shader_obj(struct fd_ringbuffer *ring,
const struct ir3_shader_variant *so, uint32_t shader_obj_reg)
{
OUT_PKT4(ring, shader_obj_reg, 2);
OUT_RELOC(ring, so->bo, 0, 0, 0); /* SP_VS_OBJ_START_LO/HI */
}
/* TODO maybe some of this we could pre-compute once rather than having
* so much draw-time logic?
*/
@ -487,8 +495,7 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
OUT_RING(ring, reg);
}
OUT_PKT4(ring, REG_A5XX_SP_VS_OBJ_START_LO, 2);
OUT_RELOC(ring, s[VS].v->bo, 0, 0, 0); /* SP_VS_OBJ_START_LO/HI */
fd5_emit_shader_obj(ring, s[VS].v, REG_A5XX_SP_VS_OBJ_START_LO);
if (s[VS].instrlen)
fd5_emit_shader(ring, s[VS].v);
@ -512,8 +519,7 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
OUT_RING(ring, 0x00000000); /* SP_FS_OBJ_START_LO */
OUT_RING(ring, 0x00000000); /* SP_FS_OBJ_START_HI */
} else {
OUT_PKT4(ring, REG_A5XX_SP_FS_OBJ_START_LO, 2);
OUT_RELOC(ring, s[FS].v->bo, 0, 0, 0); /* SP_FS_OBJ_START_LO/HI */
fd5_emit_shader_obj(ring, s[FS].v, REG_A5XX_SP_FS_OBJ_START_LO);
}
OUT_PKT4(ring, REG_A5XX_HLSQ_CONTROL_0_REG, 5);

View file

@ -51,6 +51,10 @@ fd5_program_state(struct ir3_program_state *state)
void fd5_emit_shader(struct fd_ringbuffer *ring,
const struct ir3_shader_variant *so);
void fd5_emit_shader_obj(struct fd_ringbuffer *ring,
const struct ir3_shader_variant *so,
uint32_t shader_obj_reg);
void fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
struct fd5_emit *emit);