freedreno/a6xx: use nonbinning VS when GS is used
authorJonathan Marek <jonathan@marek.ca>
Sat, 6 Jun 2020 15:16:16 +0000 (11:16 -0400)
committerJonathan Marek <jonathan@marek.ca>
Mon, 8 Jun 2020 20:23:05 +0000 (16:23 -0400)
The current "ds = state->bs" seems broken, and the "vs = state->bs" is
unnecessary (already set above). Since it was added as part of a GS-related
patch, I think this is what was intended.

Note: tesselation disables GMEM rendering so we shouldn't have to worry
about hs/ds + binning interaction.

Fixes: 0eebedb6190fdab8956769 ("freedreno/a6xx: Emit program state for GS")

Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5370>

src/gallium/drivers/freedreno/a6xx/fd6_program.c

index e012746..4cb1eaa 100644 (file)
@@ -312,10 +312,11 @@ setup_stateobj(struct fd_ringbuffer *ring, struct fd_screen *screen,
        const struct ir3_shader_variant *gs = state->gs;
        const struct ir3_shader_variant *fs = binning_pass ? &dummy_fs : state->fs;
 
-       if (binning_pass && state->ds)
-               ds = state->bs;
-       else if (binning_pass)
-               vs = state->bs;
+       /* binning VS is wrong when GS is present, so use nonbinning VS
+        * TODO: compile both binning VS/GS variants correctly
+        */
+       if (binning_pass && state->gs)
+               vs = state->vs;
 
        bool sample_shading = fs->per_samp | key->sample_shading;