radv: do not trigger FCE or FMASK decompress on compute queue

A pipeline barrier which contains an image layout transition like
COLOR_ATTACHMENT_OPTIMAL -> TRANSFER_DST_OPTIMAL on compute queue
would just hang. Such a barrier is useless in practice but it's legal.

Prevent GPU hangs by skipping FCE or FMASK_DECOMPRESS when it's not
on the graphics queue.

Fixes dEQP-VK.synchronization2.layout_transition.compute_transition*.

Cc: mesa-stable
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34231>
(cherry picked from commit 086f529bbe)
This commit is contained in:
Samuel Pitoiset 2025-03-27 17:48:33 +01:00 committed by Eric Engestrom
parent 1c85e781ce
commit ffa6fd4bee
2 changed files with 7 additions and 1 deletions

View file

@ -794,7 +794,7 @@
"description": "radv: do not trigger FCE or FMASK decompress on compute queue",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null

View file

@ -456,6 +456,9 @@ radv_fast_clear_eliminate(struct radv_cmd_buffer *cmd_buffer, struct radv_image
{
struct radv_barrier_data barrier = {0};
if (cmd_buffer->qf != RADV_QUEUE_GENERAL)
return;
barrier.layout_transitions.fast_clear_eliminate = 1;
radv_describe_layout_transition(cmd_buffer, &barrier);
@ -468,6 +471,9 @@ radv_fmask_decompress(struct radv_cmd_buffer *cmd_buffer, struct radv_image *ima
{
struct radv_barrier_data barrier = {0};
if (cmd_buffer->qf != RADV_QUEUE_GENERAL)
return;
barrier.layout_transitions.fmask_decompress = 1;
radv_describe_layout_transition(cmd_buffer, &barrier);