Mesa (master): i965: Always reserve clip distance VUE slots in SSO mode.

Kenneth Graunke kwg at kemper.freedesktop.org
Thu Nov 24 05:24:32 UTC 2016


Module: Mesa
Branch: master
Commit: ec1f159ac81ed964415d102eed4a0a29be8e7937
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ec1f159ac81ed964415d102eed4a0a29be8e7937

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Wed Aug 17 13:48:44 2016 -0700

i965: Always reserve clip distance VUE slots in SSO mode.

This fixes rendering in Dolphin on Vulkan since we enabled clip
distances.  (Dolphin on GL has a similar bug because the linker
fails to eliminate unused clip distance built-in arrays, but it
isn't using SSO...so that needs more fixing.)

Also fixes a Piglit test:
spec/glsl-1.50/execution/geometry.clip-distance-vs-gs-out-sso

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Tested-by: Emmanuel Gil Peyrot <linkmauve at linkmauve.fr>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/mesa/drivers/dri/i965/brw_vue_map.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_vue_map.c b/src/mesa/drivers/dri/i965/brw_vue_map.c
index f1af221..4d509d3 100644
--- a/src/mesa/drivers/dri/i965/brw_vue_map.c
+++ b/src/mesa/drivers/dri/i965/brw_vue_map.c
@@ -68,6 +68,19 @@ brw_compute_vue_map(const struct gen_device_info *devinfo,
    if (devinfo->gen < 6)
       separate = false;
 
+   if (separate) {
+      /* In SSO mode, we don't know whether the adjacent stage will
+       * read/write gl_ClipDistance, which has a fixed slot location.
+       * We have to assume the worst and reserve a slot for it, or else
+       * the rest of our varyings will be off by a slot.
+       *
+       * Note that we don't have to worry about COL/BFC, as those built-in
+       * variables only exist in legacy GL, which only supports VS and FS.
+       */
+      slots_valid |= BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST0);
+      slots_valid |= BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST1);
+   }
+
    vue_map->slots_valid = slots_valid;
    vue_map->separate = separate;
 




More information about the mesa-commit mailing list