mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 13:48:06 +02:00
radv: fix GPU hangs with PS epilogs and secondaries properly
The previous fix was incomplete because if the same graphics pipeline and the same PS epilog are rebind after vkCmdExecuteCommands(), the PS epilog state wouldn't be re-emitted, and it will use a wrong VA (in case both fragment shader user SGPRs aren't similar either). Resetting the PS epilog to NULL in the primary should prevent any issues, but this tracking still need to be improved because it caused two issues recently. Fixes:1a00587c44("radv: fix a GPU hang with PS epilogs and secondary command buffers") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/work_items/15176 Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> (cherry picked from commita73fc90bcd) Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41269>
This commit is contained in:
parent
c0c2df0d0e
commit
a1a37bcab0
2 changed files with 4 additions and 2 deletions
|
|
@ -3044,7 +3044,7 @@
|
|||
"description": "radv: fix GPU hangs with PS epilogs and secondaries properly",
|
||||
"nominated": true,
|
||||
"nomination_type": 2,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "1a00587c44ecb97d9978cd6bed8e76e56c6697f5",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -9780,7 +9780,6 @@ radv_CmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCou
|
|||
primary->state.emitted_compute_pipeline = secondary->state.emitted_compute_pipeline;
|
||||
primary->state.emitted_rt_pipeline = secondary->state.emitted_rt_pipeline;
|
||||
|
||||
primary->state.ps_epilog = secondary->state.ps_epilog;
|
||||
primary->state.emitted_vs_prolog = secondary->state.emitted_vs_prolog;
|
||||
|
||||
if (secondary->state.last_ia_multi_vgt_param) {
|
||||
|
|
@ -9839,6 +9838,9 @@ radv_CmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCou
|
|||
primary->state.last_first_instance = -1;
|
||||
primary->state.last_drawid = -1;
|
||||
primary->state.last_vertex_offset_valid = false;
|
||||
|
||||
/* Make sure to re-emit the PS epilog if the same graphics pipeline is bind again. */
|
||||
primary->state.ps_epilog = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue