Based on what you pasted on IRC the other day, I'm guessing the problem was the missing unify_interfaces(). In any case, this looks much better. The closer serialization happens to back-end shader compilation, the better.
Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net> On Fri, Dec 1, 2017 at 3:08 PM, Jordan Justen <jordan.l.jus...@intel.com> wrote: > Fixes MESA_GLSL=cache_fb with piglit > tests/spec/glsl-1.50/execution/geometry/clip- > distance-vs-gs-out.shader_test > > Fixes: 0610a624a12 i965/link: Serialize program to nir after linking for > shader cache > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103988 > Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com> > --- > src/mesa/drivers/dri/i965/brw_link.cpp | 25 ++++++++++++++++--------- > 1 file changed, 16 insertions(+), 9 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_link.cpp > b/src/mesa/drivers/dri/i965/brw_link.cpp > index d18521e792d..6177c8f5ebd 100644 > --- a/src/mesa/drivers/dri/i965/brw_link.cpp > +++ b/src/mesa/drivers/dri/i965/brw_link.cpp > @@ -302,15 +302,6 @@ brw_link_shader(struct gl_context *ctx, struct > gl_shader_program *shProg) > NIR_PASS_V(prog->nir, nir_lower_atomics_to_ssbo, > prog->nir->info.num_abos); > > - if (brw->ctx.Cache) { > - struct blob writer; > - blob_init(&writer); > - nir_serialize(&writer, prog->nir); > - prog->driver_cache_blob = ralloc_size(NULL, writer.size); > - memcpy(prog->driver_cache_blob, writer.data, writer.size); > - prog->driver_cache_blob_size = writer.size; > - } > - > infos[stage] = &prog->nir->info; > > update_xfb_info(prog->sh.LinkedTransformFeedback, infos[stage]); > @@ -357,6 +348,22 @@ brw_link_shader(struct gl_context *ctx, struct > gl_shader_program *shProg) > } > } > > + if (brw->ctx.Cache) { > + for (stage = 0; stage < ARRAY_SIZE(shProg->_LinkedShaders); > stage++) { > + struct gl_linked_shader *shader = shProg->_LinkedShaders[stage]; > + if (!shader) > + continue; > + > + struct gl_program *prog = shader->Program; > + struct blob writer; > + blob_init(&writer); > + nir_serialize(&writer, prog->nir); > + prog->driver_cache_blob = ralloc_size(NULL, writer.size); > + memcpy(prog->driver_cache_blob, writer.data, writer.size); > + prog->driver_cache_blob_size = writer.size; > + } > + } > + > if (brw->precompile && !brw_shader_precompile(ctx, shProg)) > return false; > > -- > 2.15.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev