radeonsi/gfx9: proper workaround for LS/HS VGPR initialization bug
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Tue, 29 Aug 2017 21:11:38 +0000 (23:11 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 6 Sep 2017 08:02:49 +0000 (10:02 +0200)
commit45c5c444518b7e83d9accd9f44702fa49282a3b8
tree62a48cc1753b281930210d160e3f9b2dabedcb29
parent552aaa11ed56d020c3ecd6b5d17a159ad545b901
radeonsi/gfx9: proper workaround for LS/HS VGPR initialization bug

When the HS wave is empty, the hardware writes the LS VGPRs starting at
v0 instead of v2. Workaround by shifting them back into place when
necessary. For simplicity, this is always done in the LS prolog.

According to the hardware team, this will be fixed in future chips,
so take that into account already.

Note that this is not a bug fix, as the bug was already worked
around by commit 166823bfd26 ("radeonsi/gfx9: add a temporary workaround
for a tessellation driver bug"). This change merely replaces the
workaround by one that should be better.

v2: add workaround code to shader only when necessary
v3: clarify the prefer_mono comment

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_pipe.h
src/gallium/drivers/radeonsi/si_shader.c
src/gallium/drivers/radeonsi/si_shader.h
src/gallium/drivers/radeonsi/si_state_draw.c
src/gallium/drivers/radeonsi/si_state_shaders.c