mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-03 00:00:25 +01:00
radv/sqtt: fix GPU hangs when capturing from the compute queue
S_008D20_FINISH_DONE is a mask of queues and 1 means "wait on the gfx
queue until the value is not 0" which can never happen when the driver
captures from compute. Instead, use the full mask of possible queues.
Cc: 21.3 mesa-stable
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13694>
(cherry picked from commit 379fab74d2)
This commit is contained in:
parent
3327295498
commit
44b5b83593
3 changed files with 4 additions and 13 deletions
|
|
@ -76,7 +76,7 @@
|
|||
"description": "radv/sqtt: fix GPU hangs when capturing from the compute queue",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -389,15 +389,6 @@ radv_handle_thread_trace(VkQueue _queue)
|
|||
#endif
|
||||
|
||||
if (frame_trigger || file_trigger || resize_trigger) {
|
||||
/* FIXME: SQTT on compute hangs. */
|
||||
if (queue->vk.queue_family_index == RADV_QUEUE_COMPUTE) {
|
||||
fprintf(stderr, "RADV: Capturing a SQTT trace on the compute "
|
||||
"queue is currently broken and might hang! "
|
||||
"Please, disable presenting on compute if "
|
||||
"you can.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
radv_begin_thread_trace(queue);
|
||||
assert(!thread_trace_enabled);
|
||||
thread_trace_enabled = true;
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ radv_emit_thread_trace_stop(struct radv_device *device, struct radeon_cmdbuf *cs
|
|||
radeon_emit(cs, R_008D20_SQ_THREAD_TRACE_STATUS >> 2); /* register */
|
||||
radeon_emit(cs, 0);
|
||||
radeon_emit(cs, 0); /* reference value */
|
||||
radeon_emit(cs, S_008D20_FINISH_DONE(1)); /* mask */
|
||||
radeon_emit(cs, ~C_008D20_FINISH_DONE);
|
||||
radeon_emit(cs, 4); /* poll interval */
|
||||
|
||||
/* Disable the thread trace mode. */
|
||||
|
|
@ -285,7 +285,7 @@ radv_emit_thread_trace_stop(struct radv_device *device, struct radeon_cmdbuf *cs
|
|||
radeon_emit(cs, R_008D20_SQ_THREAD_TRACE_STATUS >> 2); /* register */
|
||||
radeon_emit(cs, 0);
|
||||
radeon_emit(cs, 0); /* reference value */
|
||||
radeon_emit(cs, S_008D20_BUSY(1)); /* mask */
|
||||
radeon_emit(cs, ~C_008D20_BUSY); /* mask */
|
||||
radeon_emit(cs, 4); /* poll interval */
|
||||
} else {
|
||||
/* Disable the thread trace mode. */
|
||||
|
|
@ -298,7 +298,7 @@ radv_emit_thread_trace_stop(struct radv_device *device, struct radeon_cmdbuf *cs
|
|||
radeon_emit(cs, R_030CE8_SQ_THREAD_TRACE_STATUS >> 2); /* register */
|
||||
radeon_emit(cs, 0);
|
||||
radeon_emit(cs, 0); /* reference value */
|
||||
radeon_emit(cs, S_030CE8_BUSY(1)); /* mask */
|
||||
radeon_emit(cs, ~C_030CE8_BUSY); /* mask */
|
||||
radeon_emit(cs, 4); /* poll interval */
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue