diff --git a/src/mesa/drivers/dri/i965/brw_link.cpp b/src/mesa/drivers/dri/i965/brw_link.cpp index 1a28e63fcae..988dd3a73d7 100644 --- a/src/mesa/drivers/dri/i965/brw_link.cpp +++ b/src/mesa/drivers/dri/i965/brw_link.cpp @@ -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]);