amd: mark more registers that need RESET_FILTER_CAM in PM4
For SQTT. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29499>
This commit is contained in:

committed by
Marge Bot

parent
0c08673656
commit
2fab42ad2e
@@ -228,15 +228,37 @@ ac_pm4_cmd_add(struct ac_pm4_state *state, uint32_t dw)
|
|||||||
state->last_opcode = 255; /* invalid opcode */
|
state->last_opcode = 255; /* invalid opcode */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
need_reset_filter_cam(const struct ac_pm4_state *state)
|
||||||
|
{
|
||||||
|
const struct radeon_info *info = state->info;
|
||||||
|
|
||||||
|
/* All SET_*_PAIRS* packets on the gfx queue must set RESET_FILTER_CAM. */
|
||||||
|
if (!state->is_compute_queue &&
|
||||||
|
(opcode_is_pairs(state->last_opcode) ||
|
||||||
|
opcode_is_pairs_packed(state->last_opcode)))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
const uint32_t last_reg = state->last_reg << 2;
|
||||||
|
|
||||||
|
if (info->gfx_level >= GFX11 && !state->is_compute_queue &&
|
||||||
|
(last_reg + CIK_UCONFIG_REG_OFFSET == R_0367A4_SQ_THREAD_TRACE_BUF0_SIZE ||
|
||||||
|
last_reg + CIK_UCONFIG_REG_OFFSET == R_0367A0_SQ_THREAD_TRACE_BUF0_BASE ||
|
||||||
|
last_reg + CIK_UCONFIG_REG_OFFSET == R_0367B4_SQ_THREAD_TRACE_MASK ||
|
||||||
|
last_reg + CIK_UCONFIG_REG_OFFSET == R_0367B8_SQ_THREAD_TRACE_TOKEN_MASK ||
|
||||||
|
last_reg + CIK_UCONFIG_REG_OFFSET == R_0367B0_SQ_THREAD_TRACE_CTRL))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ac_pm4_cmd_end(struct ac_pm4_state *state, bool predicate)
|
ac_pm4_cmd_end(struct ac_pm4_state *state, bool predicate)
|
||||||
{
|
{
|
||||||
unsigned count;
|
unsigned count;
|
||||||
count = state->ndw - state->last_pm4 - 2;
|
count = state->ndw - state->last_pm4 - 2;
|
||||||
/* All SET_*_PAIRS* packets on the gfx queue must set RESET_FILTER_CAM. */
|
/* All SET_*_PAIRS* packets on the gfx queue must set RESET_FILTER_CAM. */
|
||||||
bool reset_filter_cam = !state->is_compute_queue &&
|
bool reset_filter_cam = need_reset_filter_cam(state);
|
||||||
(opcode_is_pairs(state->last_opcode) ||
|
|
||||||
opcode_is_pairs_packed(state->last_opcode));
|
|
||||||
|
|
||||||
state->pm4[state->last_pm4] = PKT3(state->last_opcode, count, predicate) |
|
state->pm4[state->last_pm4] = PKT3(state->last_opcode, count, predicate) |
|
||||||
PKT3_RESET_FILTER_CAM_S(reset_filter_cam);
|
PKT3_RESET_FILTER_CAM_S(reset_filter_cam);
|
||||||
|
Reference in New Issue
Block a user