mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-30 18:00:24 +01:00
tu: Track at which draw call LRZ is disabled
Aside from displaying in a tracepoint, it would be useful in order to decide whether to disable LRZ for the whole renderpass. Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32868>
This commit is contained in:
parent
33083d580a
commit
d6684aedf4
6 changed files with 19 additions and 6 deletions
|
|
@ -4374,7 +4374,7 @@ tu_CmdClearAttachments(VkCommandBuffer commandBuffer,
|
||||||
if ((pAttachments[j].aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT) == 0)
|
if ((pAttachments[j].aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
tu_lrz_disable_during_renderpass<CHIP>(cmd);
|
tu_lrz_disable_during_renderpass<CHIP>(cmd, "CmdClearAttachments");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmd->device->physical_device->info->a7xx.has_generic_clear &&
|
if (cmd->device->physical_device->info->a7xx.has_generic_clear &&
|
||||||
|
|
|
||||||
|
|
@ -2062,7 +2062,8 @@ tu_trace_end_render_pass(struct tu_cmd_buffer *cmd, bool gmem)
|
||||||
trace_end_render_pass(&cmd->trace, &cmd->cs, gmem,
|
trace_end_render_pass(&cmd->trace, &cmd->cs, gmem,
|
||||||
cmd->state.rp.drawcall_count,
|
cmd->state.rp.drawcall_count,
|
||||||
avg_per_sample_bandwidth, cmd->state.lrz.valid,
|
avg_per_sample_bandwidth, cmd->state.lrz.valid,
|
||||||
cmd->state.rp.lrz_disable_reason, addr);
|
cmd->state.rp.lrz_disable_reason,
|
||||||
|
cmd->state.rp.lrz_disabled_at_draw, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -4260,8 +4261,11 @@ tu_render_pass_state_merge(struct tu_render_pass_state *dst,
|
||||||
dst->drawcall_count += src->drawcall_count;
|
dst->drawcall_count += src->drawcall_count;
|
||||||
dst->drawcall_bandwidth_per_sample_sum +=
|
dst->drawcall_bandwidth_per_sample_sum +=
|
||||||
src->drawcall_bandwidth_per_sample_sum;
|
src->drawcall_bandwidth_per_sample_sum;
|
||||||
if (!dst->lrz_disable_reason)
|
if (!dst->lrz_disable_reason && src->lrz_disable_reason) {
|
||||||
dst->lrz_disable_reason = src->lrz_disable_reason;
|
dst->lrz_disable_reason = src->lrz_disable_reason;
|
||||||
|
dst->lrz_disabled_at_draw =
|
||||||
|
dst->drawcall_count + src->lrz_disabled_at_draw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -319,6 +319,7 @@ struct tu_render_pass_state
|
||||||
uint32_t drawcall_bandwidth_per_sample_sum;
|
uint32_t drawcall_bandwidth_per_sample_sum;
|
||||||
|
|
||||||
const char *lrz_disable_reason;
|
const char *lrz_disable_reason;
|
||||||
|
uint32_t lrz_disabled_at_draw;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* These are the states of the suspend/resume state machine. In addition to
|
/* These are the states of the suspend/resume state machine. In addition to
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,9 @@
|
||||||
static inline void
|
static inline void
|
||||||
tu_lrz_disable_reason(struct tu_cmd_buffer *cmd, const char *reason) {
|
tu_lrz_disable_reason(struct tu_cmd_buffer *cmd, const char *reason) {
|
||||||
cmd->state.rp.lrz_disable_reason = reason;
|
cmd->state.rp.lrz_disable_reason = reason;
|
||||||
perf_debug(cmd->device, "Disabling LRZ because '%s'", reason);
|
cmd->state.rp.lrz_disabled_at_draw = cmd->state.rp.drawcall_count;
|
||||||
|
perf_debug(cmd->device, "Disabling LRZ because '%s' at draw %u", reason,
|
||||||
|
cmd->state.rp.lrz_disabled_at_draw);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <chip CHIP>
|
template <chip CHIP>
|
||||||
|
|
@ -274,6 +276,7 @@ tu_lrz_begin_renderpass(struct tu_cmd_buffer *cmd)
|
||||||
const struct tu_render_pass *pass = cmd->state.pass;
|
const struct tu_render_pass *pass = cmd->state.pass;
|
||||||
|
|
||||||
cmd->state.rp.lrz_disable_reason = "";
|
cmd->state.rp.lrz_disable_reason = "";
|
||||||
|
cmd->state.rp.lrz_disabled_at_draw = 0;
|
||||||
|
|
||||||
int lrz_img_count = 0;
|
int lrz_img_count = 0;
|
||||||
for (unsigned i = 0; i < pass->attachment_count; i++) {
|
for (unsigned i = 0; i < pass->attachment_count; i++) {
|
||||||
|
|
@ -620,10 +623,13 @@ TU_GENX(tu_lrz_clear_depth_image);
|
||||||
|
|
||||||
template <chip CHIP>
|
template <chip CHIP>
|
||||||
void
|
void
|
||||||
tu_lrz_disable_during_renderpass(struct tu_cmd_buffer *cmd)
|
tu_lrz_disable_during_renderpass(struct tu_cmd_buffer *cmd,
|
||||||
|
const char *reason)
|
||||||
{
|
{
|
||||||
assert(cmd->state.pass);
|
assert(cmd->state.pass);
|
||||||
|
|
||||||
|
tu_lrz_disable_reason(cmd, reason);
|
||||||
|
|
||||||
cmd->state.lrz.valid = false;
|
cmd->state.lrz.valid = false;
|
||||||
cmd->state.dirty |= TU_CMD_DIRTY_LRZ;
|
cmd->state.dirty |= TU_CMD_DIRTY_LRZ;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,7 @@ tu_lrz_sysmem_end(struct tu_cmd_buffer *cmd, struct tu_cs *cs);
|
||||||
|
|
||||||
template <chip CHIP>
|
template <chip CHIP>
|
||||||
void
|
void
|
||||||
tu_lrz_disable_during_renderpass(struct tu_cmd_buffer *cmd);
|
tu_lrz_disable_during_renderpass(struct tu_cmd_buffer *cmd,
|
||||||
|
const char *reason);
|
||||||
|
|
||||||
#endif /* TU_LRZ_H */
|
#endif /* TU_LRZ_H */
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,7 @@ begin_end_tp('render_pass',
|
||||||
Arg(type='uint32_t', var='avgPerSampleBandwidth', c_format='%u'),
|
Arg(type='uint32_t', var='avgPerSampleBandwidth', c_format='%u'),
|
||||||
Arg(type='bool', var='lrz', c_format='%s', to_prim_type='({} ? "true" : "false")'),
|
Arg(type='bool', var='lrz', c_format='%s', to_prim_type='({} ? "true" : "false")'),
|
||||||
Arg(type='const char *', var='lrzDisableReason', c_format='%s'),
|
Arg(type='const char *', var='lrzDisableReason', c_format='%s'),
|
||||||
|
Arg(type='uint32_t', var='lrzDisabledAtDraw', c_format='%u'),
|
||||||
Arg(type='uint32_t', var='lrzStatus', c_format='%s', to_prim_type='(fd_lrz_gpu_dir_to_str((enum fd_lrz_gpu_dir)({} & 0xff)))', is_indirect=True),])
|
Arg(type='uint32_t', var='lrzStatus', c_format='%s', to_prim_type='(fd_lrz_gpu_dir_to_str((enum fd_lrz_gpu_dir)({} & 0xff)))', is_indirect=True),])
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue