[Mesa-dev] [PATCH v3 28/34] i965: add cache fallback support using serialized nir
Jordan Justen
jordan.l.justen at intel.com
Mon Oct 30 00:21:47 UTC 2017
On 2017-10-29 01:11:32, Kenneth Graunke wrote:
> On Sunday, October 22, 2017 1:01:36 PM PDT Jordan Justen wrote:
> > If the i965 gen program cannot be loaded from the cache, then we
> > fallback to using a serialized nir program.
> >
> > This is based on "i965: add cache fallback support" by Timothy Arceri
> > <timothy.arceri at collabora.com>. Tim's version was written to fallback
> > to compiling from source, and therefore had to be much more complex.
> > After Connor and Jason implemented nir serialization, I was able to
> > rewrite and greatly simplify this patch.
> >
> > Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
> > Acked-by: Timothy Arceri <tarceri at itsqueeze.com>
> > ---
> > src/mesa/drivers/dri/i965/brw_disk_cache.c | 27 ++++++++++++++++++++++++++-
> > 1 file changed, 26 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_disk_cache.c b/src/mesa/drivers/dri/i965/brw_disk_cache.c
> > index 503c6c7b499..9af893d40a7 100644
> > --- a/src/mesa/drivers/dri/i965/brw_disk_cache.c
> > +++ b/src/mesa/drivers/dri/i965/brw_disk_cache.c
> > @@ -24,6 +24,7 @@
> > #include "compiler/blob.h"
> > #include "compiler/glsl/ir_uniform.h"
> > #include "compiler/glsl/shader_cache.h"
> > +#include "compiler/nir/nir_serialize.h"
> > #include "main/mtypes.h"
> > #include "util/disk_cache.h"
> > #include "util/macros.h"
> > @@ -58,6 +59,27 @@ gen_shader_sha1(struct brw_context *brw, struct gl_program *prog,
> > _mesa_sha1_compute(manifest, strlen(manifest), out_sha1);
> > }
> >
> > +static void
> > +fallback_to_full_recompile(struct brw_context *brw, struct gl_program *prog,
>
> It's not exactly a full recompile anymore, maybe rename this to
> recompile_from_nir? Or fallback_to_partial_recompile?
Good point. I guess eventually we'll recompile from nir, but at this
point we are just restoring the nir program. What about
restore_serialized_nir_shader? Reviewed-by from you with that?
-Jordan
>
> > + gl_shader_stage stage)
> > +{
> > + prog->program_written_to_cache = false;
> > + if (brw->ctx._Shader->Flags & GLSL_CACHE_INFO) {
> > + fprintf(stderr, "falling back to nir %s.\n",
> > + _mesa_shader_stage_to_abbrev(prog->info.stage));
> > + }
> > +
> > + if (!prog->nir) {
> > + assert(prog->driver_cache_blob && prog->driver_cache_blob_size > 0);
> > + const struct nir_shader_compiler_options *options =
> > + brw->ctx.Const.ShaderCompilerOptions[stage].NirOptions;
> > + struct blob_reader reader;
> > + blob_reader_init(&reader, prog->driver_cache_blob,
> > + prog->driver_cache_blob_size);
> > + prog->nir = nir_deserialize(NULL, options, &reader);
> > + }
> > +}
> > +
> > static void
> > write_blob_program_data(struct blob *binary, const void *program,
> > size_t program_size,
> > @@ -280,6 +302,9 @@ brw_disk_cache_upload_program(struct brw_context *brw, gl_shader_stage stage)
> > prog->sh.LinkedTransformFeedback->api_enabled)
> > return false;
> >
> > + if (brw->ctx._Shader->Flags & GLSL_CACHE_FALLBACK)
> > + goto FAIL;
> > +
> > if (prog->sh.data->LinkStatus != linking_skipped)
> > goto FAIL;
> >
> > @@ -293,7 +318,7 @@ brw_disk_cache_upload_program(struct brw_context *brw, gl_shader_stage stage)
> > return true;
> >
> > FAIL:
> > - /*FIXME: Fall back and compile from source here. */
> > + fallback_to_full_recompile(brw, prog, stage);
> > return false;
> > }
> >
> >
>
More information about the mesa-dev
mailing list