<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 14, 2016 at 5:41 PM, Kenneth Graunke <span dir="ltr"><<a href="mailto:kenneth@whitecape.org" target="_blank">kenneth@whitecape.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Signed-off-by: Kenneth Graunke <<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>><br>
---<br>
 src/intel/vulkan/anv_private.h        | 18 ++++++++++++++++++<br>
 src/intel/vulkan/gen8_<wbr>pipeline.c      | 15 ++++++++-------<br>
 src/intel/vulkan/genX_<wbr>pipeline_util.h |  5 +++++<br>
 3 files changed, 31 insertions(+), 7 deletions(-)<br>
<br>
diff --git a/src/intel/vulkan/anv_<wbr>private.h b/src/intel/vulkan/anv_<wbr>private.h<br>
index 30deb02..eef2926 100644<br>
--- a/src/intel/vulkan/anv_<wbr>private.h<br>
+++ b/src/intel/vulkan/anv_<wbr>private.h<br>
@@ -1445,6 +1445,24 @@ ANV_DECL_GET_PROG_DATA_FUNC(<wbr>gs, MESA_SHADER_GEOMETRY)<br>
 ANV_DECL_GET_PROG_DATA_FUNC(<wbr>wm, MESA_SHADER_FRAGMENT)<br>
 ANV_DECL_GET_PROG_DATA_FUNC(<wbr>cs, MESA_SHADER_COMPUTE)<br>
<br>
+/**<br>
+ * Get the brw_vue_prog_data for the last stage which outputs VUEs.<br>
+ */<br>
+static inline struct brw_vue_prog_data *<br>
+get_last_vue_prog_data(struct anv_pipeline *pipeline)<br>
+{<br>
+   const unsigned pre_clip_stages =<br>
+      pipeline->active_stages & (VK_SHADER_STAGE_FRAGMENT_BIT - 1);<br>
+   const unsigned last_bit = util_last_bit(pre_clip_stages)<wbr>;<br></blockquote><div><br></div><div>This seems a bit... over-designed?<br><br></div><div>for (int s = MESA_SHADER_GEOMETRY; s >= 0; s--) {<br></div><div>   if (pipeline->shaders[s])<br></div><div>      return (struct brw_vue_prog_data *)pipeline->shaders[s]->prog_data;<br>}<br><br></div><div>would work just as well.<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+<br>
+   if (last_bit == 0)<br>
+      return NULL;<br>
+<br>
+   struct anv_shader_bin *bin = pipeline->shaders[last_bit - 1];<br>
+<br>
+   return (struct brw_vue_prog_data *) bin->prog_data;<br>
+}<br>
+<br>
 VkResult<br>
 anv_pipeline_init(struct anv_pipeline *pipeline, struct anv_device *device,<br>
                   struct anv_pipeline_cache *cache,<br>
diff --git a/src/intel/vulkan/gen8_<wbr>pipeline.c b/src/intel/vulkan/gen8_<wbr>pipeline.c<br>
index 6cf55f5..4fad8cd 100644<br>
--- a/src/intel/vulkan/gen8_<wbr>pipeline.c<br>
+++ b/src/intel/vulkan/gen8_<wbr>pipeline.c<br>
@@ -158,10 +158,10 @@ genX(graphics_pipeline_create)<wbr>(<br>
             gs_prog_data->static_vertex_<wbr>count >= 0 ?<br>
             gs_prog_data->static_vertex_<wbr>count : 0;<br>
<br>
-         /* FIXME: mesa sets this based on ctx->Transform.<wbr>ClipPlanesEnabled:<br>
-          * UserClipDistanceClipTestEnable<wbr>Bitmask_3DSTATE_GS(v)<br>
-          * UserClipDistanceCullTestEnable<wbr>Bitmask(v)<br>
-          */<br>
+         gs.<wbr>UserClipDistanceClipTestEnable<wbr>Bitmask =<br>
+            gs_prog_data->base.clip_<wbr>distance_mask;<br>
+         gs.<wbr>UserClipDistanceCullTestEnable<wbr>Bitmask =<br>
+            gs_prog_data->base.cull_<wbr>distance_mask;<br>
<br>
          gs.<wbr>VertexURBEntryOutputReadOffset = offset;<br>
          gs.VertexURBEntryOutputLength = length;<br>
@@ -224,9 +224,10 @@ genX(graphics_pipeline_create)<wbr>(<br>
          vs.<wbr>VertexURBEntryOutputReadOffset = offset;<br>
          vs.VertexURBEntryOutputLength    = length;<br>
<br>
-         /* TODO */<br>
-         vs.<wbr>UserClipDistanceClipTestEnable<wbr>Bitmask = 0;<br>
-         vs.<wbr>UserClipDistanceCullTestEnable<wbr>Bitmask = 0;<br>
+         vs.<wbr>UserClipDistanceClipTestEnable<wbr>Bitmask =<br>
+            vs_prog_data->base.clip_<wbr>distance_mask;<br>
+         vs.<wbr>UserClipDistanceCullTestEnable<wbr>Bitmask =<br>
+            vs_prog_data->base.cull_<wbr>distance_mask;<br>
       }<br>
    }<br>
<br>
diff --git a/src/intel/vulkan/genX_<wbr>pipeline_util.h b/src/intel/vulkan/genX_<wbr>pipeline_util.h<br>
index 129ae94..5bee80c 100644<br>
--- a/src/intel/vulkan/genX_<wbr>pipeline_util.h<br>
+++ b/src/intel/vulkan/genX_<wbr>pipeline_util.h<br>
@@ -940,6 +940,11 @@ emit_3dstate_clip(struct anv_pipeline *pipeline,<br>
       clip.FrontWinding            = vk_to_gen_front_face[rs_info-><wbr>frontFace];<br>
       clip.CullMode                = vk_to_gen_cullmode[rs_info-><wbr>cullMode];<br>
       clip.ViewportZClipTestEnable = !pipeline->depth_clamp_enable;<br>
+      const struct brw_vue_prog_data *last = get_last_vue_prog_data(<wbr>pipeline);<br>
+      if (last) {<br>
+         clip.<wbr>UserClipDistanceClipTestEnable<wbr>Bitmask = last->clip_distance_mask;<br>
+         clip.<wbr>UserClipDistanceCullTestEnable<wbr>Bitmask = last->cull_distance_mask;<br>
+      }<br>
 #else<br>
       clip.<wbr>NonPerspectiveBarycentricEnabl<wbr>e = wm_prog_data ?<br>
          (wm_prog_data->barycentric_<wbr>interp_modes & 0x38) != 0 : 0;<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.10.2<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>