turnip: fix HW binning with geometry shader
authorJonathan Marek <jonathan@marek.ca>
Sat, 6 Jun 2020 15:26:11 +0000 (11:26 -0400)
committerJonathan Marek <jonathan@marek.ca>
Mon, 8 Jun 2020 20:23:05 +0000 (16:23 -0400)
Fixes failures with TU_DEBUG=forcebin and geometry shaders, for example:
dEQP-VK.binding_model.*geometry*
dEQP-VK.transform_feedback.simple.query*

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

src/freedreno/vulkan/tu_pipeline.c

index f95b9e174ac5cafd70fbd78515f5e6e85862be21..a036923544408655bcb7eb1f00c5c98872d11898 100644 (file)
@@ -1578,9 +1578,13 @@ tu6_emit_program(struct tu_cs *cs,
    if (binning_pass) {
       /* if we have streamout, use full VS in binning pass, as the
        * binning pass VS will have outputs on other than position/psize
-       * stripped out:
+       * stripped out
+       *
+       * GS also can have streamout, but we completely disable the
+       * the binning pass variant when GS is present because we don't
+       * support compiling correct binning pass variants with GS
        */
-      if (vs->shader->stream_output.num_outputs == 0) {
+      if (vs->shader->stream_output.num_outputs == 0 && !has_gs) {
          vs = &builder->shaders[MESA_SHADER_VERTEX]->variants[1];
          vs_offset = builder->binning_vs_offset;
       }