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 > <[email protected]>. 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 <[email protected]> > Acked-by: Timothy Arceri <[email protected]> > --- > 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?
> + 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;
> }
>
>
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
