<div dir="ltr">You grabbed the setup from the "precompile" version which is just a guess.  We need the version from wm_populate_key which pulls from the geometry or vertex VUE map.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 10, 2017 at 6:35 AM, Lionel Landwerlin <span dir="ltr"><<a href="mailto:lionel.g.landwerlin@intel.com" target="_blank">lionel.g.landwerlin@intel.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">With shaders using a lot of inputs/outputs, like this (from Gtk+) :<br>
<br>
layout(location = 0) in vec2 inPos;<br>
layout(location = 1) in float inGradientPos;<br>
layout(location = 2) in flat int inRepeating;<br>
layout(location = 3) in flat int inStopCount;<br>
layout(location = 4) in flat vec4 inClipBounds;<br>
layout(location = 5) in flat vec4 inClipWidths;<br>
layout(location = 6) in flat ColorStop inStops[8];<br>
<br>
layout(location = 0) out vec4 outColor;<br>
<br>
we're missing the programming of the input_slots_valid field leading<br>
to an assert further down the backend code.<br>
<br>
Note that we need the shader to be translated from spirv before we can<br>
get the number of inputs/outputs so we set this in a post function and<br>
leave the field at 0 for hashing.<br>
<br>
Signed-off-by: Lionel Landwerlin <<a href="mailto:lionel.g.landwerlin@intel.com">lionel.g.landwerlin@intel.com</a><wbr>><br>
Cc: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br>
Cc: Kenneth Graunke <<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>><br>
---<br>
 src/intel/vulkan/anv_pipeline.<wbr>c | 14 ++++++++++++--<br>
 1 file changed, 12 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/src/intel/vulkan/anv_<wbr>pipeline.c b/src/intel/vulkan/anv_<wbr>pipeline.c<br>
index 2c46ef5bf9..297d7fecc3 100644<br>
--- a/src/intel/vulkan/anv_<wbr>pipeline.c<br>
+++ b/src/intel/vulkan/anv_<wbr>pipeline.c<br>
@@ -266,8 +266,6 @@ populate_wm_prog_key(const struct gen_device_info *devinfo,<br>
<br>
    populate_sampler_prog_key(<wbr>devinfo, &key->tex);<br>
<br>
-   /* TODO: Fill out key->input_slots_valid */<br>
-<br>
    /* Vulkan doesn't specify a default */<br>
    key->high_quality_derivatives = false;<br>
<br>
@@ -293,6 +291,16 @@ populate_wm_prog_key(const struct gen_device_info *devinfo,<br>
 }<br>
<br>
 static void<br>
+post_populate_wm_prog_key(<wbr>const nir_shader *nir,<br>
+                          struct brw_wm_prog_key *key)<br>
+{<br>
+   if (_mesa_bitcount_64(nir->info-><wbr>inputs_read &<br>
+                         BRW_FS_VARYING_INPUT_MASK) > 16) {<br>
+      key->input_slots_valid = nir->info->inputs_read | VARYING_BIT_POS;<br>
+   }<br>
+}<br>
+<br>
+static void<br>
 populate_cs_prog_key(const struct gen_device_info *devinfo,<br>
                      struct brw_cs_prog_key *key)<br>
 {<br>
@@ -616,6 +624,8 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline,<br>
       if (nir == NULL)<br>
          return vk_error(VK_ERROR_OUT_OF_HOST_<wbr>MEMORY);<br>
<br>
+      post_populate_wm_prog_key(nir, &key);<br>
+<br>
       unsigned num_rts = 0;<br>
       struct anv_pipeline_binding rt_bindings[8];<br>
       nir_function_impl *impl = nir_shader_get_entrypoint(nir)<wbr>;<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.11.0<br>
<br>
</font></span></blockquote></div><br></div>