mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 10:40:11 +01:00
tu/autotune: Use CP_EVENT_WRITE7::ZPASS_DONE on A7XX
The `RB_SAMPLE_COUNT_ADDR` register no longer exists on A7XX and the address is provided as a part of `CP_EVENT_WRITE7`. Signed-off-by: Mark Collins <mark@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26461>
This commit is contained in:
parent
45b415a044
commit
4e6a1f8852
5 changed files with 34 additions and 15 deletions
|
|
@ -2839,7 +2839,7 @@ to upconvert to 32b float internally?
|
|||
</reg32>
|
||||
</array>
|
||||
<!-- 0x891b-0x8926 invalid -->
|
||||
<reg64 offset="0x8927" name="RB_SAMPLE_COUNT_ADDR" type="waddress" align="16" usage="cmd"/>
|
||||
<reg64 offset="0x8927" name="RB_SAMPLE_COUNT_ADDR" type="waddress" align="16" usage="cmd" variants="A6XX"/>
|
||||
<!-- 0x8929-0x89ff invalid -->
|
||||
|
||||
<!-- TODO: there are some registers in the 0x8a00-0x8bff range -->
|
||||
|
|
|
|||
|
|
@ -621,6 +621,7 @@ tu_autotune_use_bypass(struct tu_autotune *at,
|
|||
return fallback_use_bypass(pass, framebuffer, cmd_buffer);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
void
|
||||
tu_autotune_begin_renderpass(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
|
|
@ -649,12 +650,21 @@ tu_autotune_begin_renderpass(struct tu_cmd_buffer *cmd,
|
|||
|
||||
tu_cs_emit_regs(cs, A6XX_RB_SAMPLE_COUNT_CONTROL(.copy = true));
|
||||
|
||||
tu_cs_emit_regs(cs, A6XX_RB_SAMPLE_COUNT_ADDR(.qword = result_iova));
|
||||
/* A7XX TODO: Fixup ZPASS_DONE */
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE, 1);
|
||||
tu_cs_emit(cs, ZPASS_DONE);
|
||||
if (CHIP >= A7XX) {
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE7, 3);
|
||||
tu_cs_emit(cs, CP_EVENT_WRITE7_0(.event = ZPASS_DONE,
|
||||
.write_sample_count = true).value);
|
||||
tu_cs_emit_qw(cs, result_iova);
|
||||
} else {
|
||||
tu_cs_emit_regs(cs,
|
||||
A6XX_RB_SAMPLE_COUNT_ADDR(.qword = result_iova));
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE, 1);
|
||||
tu_cs_emit(cs, ZPASS_DONE);
|
||||
}
|
||||
}
|
||||
TU_GENX(tu_autotune_begin_renderpass);
|
||||
|
||||
template <chip CHIP>
|
||||
void tu_autotune_end_renderpass(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
struct tu_renderpass_result *autotune_result)
|
||||
|
|
@ -670,9 +680,16 @@ void tu_autotune_end_renderpass(struct tu_cmd_buffer *cmd,
|
|||
|
||||
tu_cs_emit_regs(cs, A6XX_RB_SAMPLE_COUNT_CONTROL(.copy = true));
|
||||
|
||||
tu_cs_emit_regs(cs, A6XX_RB_SAMPLE_COUNT_ADDR(.qword = result_iova));
|
||||
|
||||
/* A7XX TODO: Fixup ZPASS_DONE */
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE, 1);
|
||||
tu_cs_emit(cs, ZPASS_DONE);
|
||||
if (CHIP >= A7XX) {
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE7, 3);
|
||||
tu_cs_emit(cs, CP_EVENT_WRITE7_0(.event = ZPASS_DONE,
|
||||
.write_sample_count = true).value);
|
||||
tu_cs_emit_qw(cs, result_iova);
|
||||
} else {
|
||||
tu_cs_emit_regs(cs,
|
||||
A6XX_RB_SAMPLE_COUNT_ADDR(.qword = result_iova));
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE, 1);
|
||||
tu_cs_emit(cs, ZPASS_DONE);
|
||||
}
|
||||
}
|
||||
TU_GENX(tu_autotune_end_renderpass);
|
||||
|
|
|
|||
|
|
@ -141,10 +141,12 @@ struct tu_cs *tu_autotune_on_submit(struct tu_device *dev,
|
|||
|
||||
struct tu_autotune_results_buffer;
|
||||
|
||||
template <chip CHIP>
|
||||
void tu_autotune_begin_renderpass(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
struct tu_renderpass_result *autotune_result);
|
||||
|
||||
template <chip CHIP>
|
||||
void tu_autotune_end_renderpass(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
struct tu_renderpass_result *autotune_result);
|
||||
|
|
|
|||
|
|
@ -1750,7 +1750,7 @@ tu6_sysmem_render_begin(struct tu_cmd_buffer *cmd, struct tu_cs *cs,
|
|||
tu_cs_emit_pkt7(cs, CP_SET_MODE, 1);
|
||||
tu_cs_emit(cs, 0x0);
|
||||
|
||||
tu_autotune_begin_renderpass(cmd, cs, autotune_result);
|
||||
tu_autotune_begin_renderpass<CHIP>(cmd, cs, autotune_result);
|
||||
|
||||
tu_cs_sanity_check(cs);
|
||||
}
|
||||
|
|
@ -1760,7 +1760,7 @@ static void
|
|||
tu6_sysmem_render_end(struct tu_cmd_buffer *cmd, struct tu_cs *cs,
|
||||
struct tu_renderpass_result *autotune_result)
|
||||
{
|
||||
tu_autotune_end_renderpass(cmd, cs, autotune_result);
|
||||
tu_autotune_end_renderpass<CHIP>(cmd, cs, autotune_result);
|
||||
|
||||
/* Do any resolves of the last subpass. These are handled in the
|
||||
* tile_store_cs in the gmem path.
|
||||
|
|
@ -1863,7 +1863,7 @@ tu6_tile_render_begin(struct tu_cmd_buffer *cmd, struct tu_cs *cs,
|
|||
}
|
||||
}
|
||||
|
||||
tu_autotune_begin_renderpass(cmd, cs, autotune_result);
|
||||
tu_autotune_begin_renderpass<CHIP>(cmd, cs, autotune_result);
|
||||
|
||||
tu_cs_sanity_check(cs);
|
||||
}
|
||||
|
|
@ -1916,7 +1916,7 @@ static void
|
|||
tu6_tile_render_end(struct tu_cmd_buffer *cmd, struct tu_cs *cs,
|
||||
struct tu_renderpass_result *autotune_result)
|
||||
{
|
||||
tu_autotune_end_renderpass(cmd, cs, autotune_result);
|
||||
tu_autotune_end_renderpass<CHIP>(cmd, cs, autotune_result);
|
||||
|
||||
tu_cs_emit_call(cs, &cmd->draw_epilogue_cs);
|
||||
|
||||
|
|
|
|||
|
|
@ -1171,7 +1171,7 @@ emit_end_occlusion_query(struct tu_cmd_buffer *cmdbuf,
|
|||
}
|
||||
} else {
|
||||
/* A7XX TODO: Calculate (end - begin) via ZPASS_DONE. */
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE, 3);
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE7, 3);
|
||||
tu_cs_emit(cs, CP_EVENT_WRITE7_0(.event = ZPASS_DONE,
|
||||
.write_sample_count = true).value);
|
||||
tu_cs_emit_qw(cs, end_iova);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue