radv: Emit a BATCH_BREAK when changing pixel shaders or CB_TARGET_MASK.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sun, 5 Jan 2020 14:03:51 +0000 (15:03 +0100)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Tue, 7 Jan 2020 21:44:31 +0000 (22:44 +0100)
commit7cc0702bbb955010600fcb2685edb4ba703561a8
tree3751493bde214aac15b987c27be23d978288cb1f
parentdd09f1d806bab62e2399d2fc7a5d0922c594eab3
radv: Emit a BATCH_BREAK when changing pixel shaders or CB_TARGET_MASK.

Fixes a hang on Raven with Resident Evil 2.

I did not find anything more restricted to fix it:

- Setting persistent_states_per_bin to 1 fixes it too,
  but likely does an internal break on any descriptor set changes
  too.
- Only breaking the batch when cb_target_mask changes does not fix
  it (and looking at AMDVLK comments, I suspect the code in radeonsi
  should really be doing a FLUSH_DFSM).
- Always doing a FLUSH_DFSM on shader switch helps, but that is more
  often than this and I don't think we should be doing that when DFSM
  is disabled.
- Also emitting the existing break on framebuffer change when DFSM is
  disabled does not fix the issue.

Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/2315
CC: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/amd/vulkan/radv_cmd_buffer.c
src/amd/vulkan/radv_pipeline.c
src/amd/vulkan/radv_private.h