mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 04:20:08 +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)
|
||||
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 &&
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
cmd->state.rp.drawcall_count,
|
||||
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
|
||||
|
|
@ -4260,8 +4261,11 @@ tu_render_pass_state_merge(struct tu_render_pass_state *dst,
|
|||
dst->drawcall_count += src->drawcall_count;
|
||||
dst->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_disabled_at_draw =
|
||||
dst->drawcall_count + src->lrz_disabled_at_draw;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -319,6 +319,7 @@ struct tu_render_pass_state
|
|||
uint32_t drawcall_bandwidth_per_sample_sum;
|
||||
|
||||
const char *lrz_disable_reason;
|
||||
uint32_t lrz_disabled_at_draw;
|
||||
};
|
||||
|
||||
/* These are the states of the suspend/resume state machine. In addition to
|
||||
|
|
|
|||
|
|
@ -55,7 +55,9 @@
|
|||
static inline void
|
||||
tu_lrz_disable_reason(struct tu_cmd_buffer *cmd, const char *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>
|
||||
|
|
@ -274,6 +276,7 @@ tu_lrz_begin_renderpass(struct tu_cmd_buffer *cmd)
|
|||
const struct tu_render_pass *pass = cmd->state.pass;
|
||||
|
||||
cmd->state.rp.lrz_disable_reason = "";
|
||||
cmd->state.rp.lrz_disabled_at_draw = 0;
|
||||
|
||||
int lrz_img_count = 0;
|
||||
for (unsigned i = 0; i < pass->attachment_count; i++) {
|
||||
|
|
@ -620,10 +623,13 @@ TU_GENX(tu_lrz_clear_depth_image);
|
|||
|
||||
template <chip CHIP>
|
||||
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);
|
||||
|
||||
tu_lrz_disable_reason(cmd, reason);
|
||||
|
||||
cmd->state.lrz.valid = false;
|
||||
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>
|
||||
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 */
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ begin_end_tp('render_pass',
|
|||
Arg(type='uint32_t', var='avgPerSampleBandwidth', c_format='%u'),
|
||||
Arg(type='bool', var='lrz', c_format='%s', to_prim_type='({} ? "true" : "false")'),
|
||||
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),])
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue