radeonsi: move emitting draws states out of si_emit_all_states
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23216>
This commit is contained in:
@@ -2073,13 +2073,9 @@ static void si_get_draw_start_count(struct si_context *sctx, const struct pipe_d
|
||||
}
|
||||
}
|
||||
|
||||
template <amd_gfx_level GFX_VERSION, si_has_tess HAS_TESS, si_has_gs HAS_GS, si_has_ngg NGG,
|
||||
si_is_draw_vertex_state IS_DRAW_VERTEX_STATE> ALWAYS_INLINE
|
||||
static void si_emit_all_states(struct si_context *sctx, const struct pipe_draw_info *info,
|
||||
const struct pipe_draw_indirect_info *indirect,
|
||||
enum pipe_prim_type prim, unsigned instance_count,
|
||||
unsigned min_vertex_count, bool primitive_restart,
|
||||
unsigned skip_atom_mask)
|
||||
template <amd_gfx_level GFX_VERSION, si_has_tess HAS_TESS, si_has_gs HAS_GS, si_has_ngg NGG>
|
||||
ALWAYS_INLINE
|
||||
static void si_emit_all_states(struct si_context *sctx, unsigned skip_atom_mask)
|
||||
{
|
||||
si_emit_rasterizer_prim_state<GFX_VERSION, HAS_GS, NGG>(sctx);
|
||||
if (HAS_TESS)
|
||||
@@ -2111,12 +2107,6 @@ static void si_emit_all_states(struct si_context *sctx, const struct pipe_draw_i
|
||||
|
||||
sctx->dirty_states = 0;
|
||||
}
|
||||
|
||||
/* Emit draw states. */
|
||||
si_emit_vs_state<GFX_VERSION, HAS_TESS, HAS_GS, NGG, IS_DRAW_VERTEX_STATE>(sctx, info->index_size);
|
||||
si_emit_draw_registers<GFX_VERSION, HAS_TESS, HAS_GS, NGG, IS_DRAW_VERTEX_STATE>
|
||||
(sctx, indirect, prim, instance_count, primitive_restart,
|
||||
info->restart_index, min_vertex_count);
|
||||
}
|
||||
|
||||
#define DRAW_CLEANUP do { \
|
||||
@@ -2411,9 +2401,14 @@ static void si_draw(struct pipe_context *ctx,
|
||||
bool primitive_restart = !IS_DRAW_VERTEX_STATE && info->primitive_restart;
|
||||
|
||||
/* Emit all states except possibly render condition. */
|
||||
si_emit_all_states<GFX_VERSION, HAS_TESS, HAS_GS, NGG, IS_DRAW_VERTEX_STATE>
|
||||
(sctx, info, indirect, prim, instance_count, min_direct_count,
|
||||
primitive_restart, masked_atoms);
|
||||
si_emit_all_states<GFX_VERSION, HAS_TESS, HAS_GS, NGG>(sctx, masked_atoms);
|
||||
|
||||
/* Emit draw states. */
|
||||
si_emit_vs_state<GFX_VERSION, HAS_TESS, HAS_GS, NGG, IS_DRAW_VERTEX_STATE>(sctx, index_size);
|
||||
si_emit_draw_registers<GFX_VERSION, HAS_TESS, HAS_GS, NGG, IS_DRAW_VERTEX_STATE>
|
||||
(sctx, indirect, prim, instance_count, primitive_restart,
|
||||
info->restart_index, min_direct_count);
|
||||
|
||||
if (sctx->flags)
|
||||
sctx->emit_cache_flush(sctx, &sctx->gfx_cs);
|
||||
/* <-- CUs are idle here if we waited. */
|
||||
|
Reference in New Issue
Block a user