mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
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:
parent
22cb7b5fe2
commit
50ec03054c
8 changed files with 25 additions and 37 deletions
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue