amd,radv,radeonsi: add ac_pm4_emit_commands()

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37956>
This commit is contained in:
Samuel Pitoiset 2025-10-20 09:30:08 +02:00 committed by Marge Bot
parent 22cb7b5fe2
commit 50ec03054c
8 changed files with 25 additions and 37 deletions

View file

@ -5,6 +5,7 @@
*/
#include "ac_debug.h"
#include "ac_cmdbuf.h"
#include "ac_gpu_info.h"
#include "ac_pm4.h"
@ -447,3 +448,11 @@ ac_pm4_free_state(struct ac_pm4_state *state)
free(state);
}
void
ac_pm4_emit_commands(struct ac_cmdbuf *cs, const struct ac_pm4_state *state)
{
ac_cmdbuf_begin(cs);
ac_cmdbuf_emit_array(state->pm4, state->ndw);
ac_cmdbuf_end();
}

View file

@ -13,6 +13,8 @@
extern "C" {
#endif
struct ac_cmdbuf;
struct ac_pm4_state {
const struct radeon_info *info;
@ -69,6 +71,9 @@ ac_pm4_create_sized(const struct radeon_info *info, bool debug_sqtt,
void
ac_pm4_free_state(struct ac_pm4_state *state);
void
ac_pm4_emit_commands(struct ac_cmdbuf *cs, const struct ac_pm4_state *state);
#ifdef __cplusplus
}
#endif

View file

@ -40,9 +40,7 @@ radv_create_shadow_regs_preamble(struct radv_device *device, struct radv_queue_s
if (!pm4)
goto fail_create;
radeon_begin(cs);
radeon_emit_array(pm4->pm4, pm4->ndw);
radeon_end();
ac_pm4_emit_commands(cs->b, pm4);
ws->cs_pad(cs->b, 0);
@ -130,9 +128,7 @@ radv_init_shadowed_regs_buffer_state(const struct radv_device *device, struct ra
goto fail;
}
radeon_begin(cs);
radeon_emit_array(pm4->pm4, pm4->ndw);
radeon_end();
ac_pm4_emit_commands(cs->b, pm4);
ac_pm4_free_state(pm4);
}

View file

@ -384,14 +384,6 @@ void radv_cs_emit_cache_flush(struct radeon_winsys *ws, struct radv_cmd_stream *
uint32_t *flush_cnt, uint64_t flush_va, enum radv_cmd_flush_bits flush_bits,
enum rgp_flush_bits *sqtt_flush_bits, uint64_t gfx9_eop_bug_va);
static inline void
radv_emit_pm4_commands(struct radv_cmd_stream *cs, const struct ac_pm4_state *pm4)
{
radeon_begin(cs);
radeon_emit_array(pm4->pm4, pm4->ndw);
radeon_end();
}
VkResult radv_create_cmd_stream(const struct radv_device *device, const enum amd_ip_type ip_type,
const bool is_secondary, struct radv_cmd_stream **cs_out);

View file

@ -653,7 +653,7 @@ radv_emit_compute(struct radv_device *device, struct radv_cmd_stream *cs, bool i
S_00B8BC_INTERLEAVE_1D(preamble_state.gfx11.compute_dispatch_interleave));
ac_pm4_finalize(pm4);
radv_emit_pm4_commands(cs, pm4);
ac_pm4_emit_commands(cs->b, pm4);
ac_pm4_free_state(pm4);
}
@ -831,7 +831,7 @@ radv_emit_graphics(struct radv_device *device, struct radv_cmd_stream *cs)
}
ac_pm4_finalize(pm4);
radv_emit_pm4_commands(cs, pm4);
ac_pm4_emit_commands(cs->b, pm4);
ac_pm4_free_state(pm4);
radv_emit_compute(device, cs, false);

View file

@ -60,7 +60,7 @@ radv_emit_sqtt_start(const struct radv_device *device, struct radv_cmd_stream *c
ac_pm4_finalize(pm4);
radeon_check_space(device->ws, cs->b, pm4->ndw);
radv_emit_pm4_commands(cs, pm4);
ac_pm4_emit_commands(cs->b, pm4);
ac_pm4_free_state(pm4);
}
@ -80,7 +80,7 @@ radv_emit_sqtt_stop(const struct radv_device *device, struct radv_cmd_stream *cs
ac_pm4_finalize(pm4);
radeon_check_space(device->ws, cs->b, pm4->ndw);
radv_emit_pm4_commands(cs, pm4);
ac_pm4_emit_commands(cs->b, pm4);
ac_pm4_clear_state(pm4, &pdev->info, false, is_compute_queue);
@ -93,7 +93,7 @@ radv_emit_sqtt_stop(const struct radv_device *device, struct radv_cmd_stream *cs
ac_pm4_finalize(pm4);
radeon_check_space(device->ws, cs->b, pm4->ndw);
radv_emit_pm4_commands(cs, pm4);
ac_pm4_emit_commands(cs->b, pm4);
ac_pm4_free_state(pm4);
}

View file

@ -41,9 +41,7 @@ void si_pm4_emit_commands(struct si_context *sctx, struct ac_pm4_state *state)
{
struct radeon_cmdbuf *cs = &sctx->gfx_cs;
radeon_begin(cs);
radeon_emit_array(state->pm4, state->ndw);
radeon_end();
ac_pm4_emit_commands(&cs->current, state);
}
void si_pm4_emit_state(struct si_context *sctx, unsigned index)

View file

@ -63,11 +63,7 @@ static void si_emit_sqtt_start(struct si_context *sctx,
ac_sqtt_emit_start(&sscreen->info, pm4, sctx->sqtt, is_compute_queue);
ac_pm4_finalize(pm4);
radeon_begin(cs);
radeon_emit_array(pm4->pm4, pm4->ndw);
radeon_end();
ac_pm4_emit_commands(&cs->current, pm4);
ac_pm4_free_state(pm4);
}
@ -84,11 +80,7 @@ static void si_emit_sqtt_stop(struct si_context *sctx, struct radeon_cmdbuf *cs,
ac_sqtt_emit_stop(&sscreen->info, pm4, is_compute_queue);
ac_pm4_finalize(pm4);
radeon_begin(cs);
radeon_emit_array(pm4->pm4, pm4->ndw);
radeon_end();
ac_pm4_emit_commands(&cs->current, pm4);
ac_pm4_clear_state(pm4, &sscreen->info, false, is_compute_queue);
if (sctx->screen->info.has_sqtt_rb_harvest_bug) {
@ -101,11 +93,7 @@ static void si_emit_sqtt_stop(struct si_context *sctx, struct radeon_cmdbuf *cs,
ac_sqtt_emit_wait(&sscreen->info, pm4, sctx->sqtt, is_compute_queue);
ac_pm4_finalize(pm4);
radeon_begin_again(cs);
radeon_emit_array(pm4->pm4, pm4->ndw);
radeon_end();
ac_pm4_emit_commands(&cs->current, pm4);
ac_pm4_free_state(pm4);
}