i965/link: Serialize program to nir after linking for shader cache
If the shader cache is enabled, after linking the program, we serialize the program to nir. This will be saved out by the glsl shader cache support. Later, if the same program is found in the cache, we can use the nir for a fallback in the unlikely case that the gen binary program is not found in the cache. Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
6b815e405d
commit
0610a624a1
|
@ -27,6 +27,7 @@
|
|||
#include "compiler/glsl/ir.h"
|
||||
#include "compiler/glsl/ir_optimization.h"
|
||||
#include "compiler/glsl/program.h"
|
||||
#include "compiler/nir/nir_serialize.h"
|
||||
#include "program/program.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/shaderapi.h"
|
||||
|
@ -323,6 +324,15 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg)
|
|||
NIR_PASS_V(prog->nir, nir_lower_samplers, shProg);
|
||||
NIR_PASS_V(prog->nir, nir_lower_atomics, shProg);
|
||||
|
||||
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]);
|
||||
|
|
Loading…
Reference in New Issue