mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 13:10:10 +01:00
radeonsi: fix a compute shader hang with big threadgroups on SI & CI
ported from Vulkan Cc: 12.0 <mesa-stable@lists.freedesktop.org> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
b433cb51e5
commit
1e8adb0ee4
1 changed files with 18 additions and 0 deletions
|
|
@ -443,6 +443,21 @@ static void si_launch_grid(
|
|||
struct si_context *sctx = (struct si_context*)ctx;
|
||||
struct si_compute *program = sctx->cs_shader_state.program;
|
||||
int i;
|
||||
/* HW bug workaround when CS threadgroups > 256 threads and async
|
||||
* compute isn't used, i.e. only one compute job can run at a time.
|
||||
* If async compute is possible, the threadgroup size must be limited
|
||||
* to 256 threads on all queues to avoid the bug.
|
||||
* Only SI and certain CIK chips are affected.
|
||||
*/
|
||||
bool cs_regalloc_hang =
|
||||
(sctx->b.chip_class == SI ||
|
||||
sctx->b.family == CHIP_BONAIRE ||
|
||||
sctx->b.family == CHIP_KABINI) &&
|
||||
info->block[0] * info->block[1] * info->block[2] > 256;
|
||||
|
||||
if (cs_regalloc_hang)
|
||||
sctx->b.flags |= SI_CONTEXT_PS_PARTIAL_FLUSH |
|
||||
SI_CONTEXT_CS_PARTIAL_FLUSH;
|
||||
|
||||
si_decompress_compute_textures(sctx);
|
||||
|
||||
|
|
@ -493,6 +508,9 @@ static void si_launch_grid(
|
|||
sctx->b.num_compute_calls++;
|
||||
if (sctx->cs_shader_state.uses_scratch)
|
||||
sctx->b.num_spill_compute_calls++;
|
||||
|
||||
if (cs_regalloc_hang)
|
||||
sctx->b.flags |= SI_CONTEXT_CS_PARTIAL_FLUSH;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue