struct pipe_stream_output_info stream_output;
+ /* The serialized NIR (for the disk cache) and size in bytes. */
+ void *ir_cache_binary;
+ uint32_t ir_cache_binary_size;
+
unsigned program_id;
/** Bitfield of (1 << IRIS_NOS_*) flags. */
#include "util/u_atomic.h"
#include "compiler/nir/nir.h"
#include "compiler/nir/nir_builder.h"
+#include "compiler/nir/nir_serialize.h"
#include "intel/compiler/brw_compiler.h"
#include "intel/compiler/brw_nir.h"
#include "iris_context.h"
update_so_info(&ish->stream_output, nir->info.outputs_written);
}
+ if (screen->disk_cache) {
+ /* Serialize the NIR to a binary blob that we can hash for the disk
+ * cache. First, drop unnecessary information (like variable names)
+ * so the serialized NIR is smaller, and also to let us detect more
+ * isomorphic shaders when hashing, increasing cache hits.
+ *
+ * We skip this step when not using the disk cache, as variable names
+ * are useful for inspecting and debugging shaders.
+ */
+ nir_strip(nir);
+
+ struct blob blob;
+ blob_init(&blob);
+ nir_serialize(&blob, ish->nir);
+ ish->ir_cache_binary = malloc(blob.size);
+ ish->ir_cache_binary_size = blob.size;
+ memcpy(ish->ir_cache_binary, blob.data, blob.size);
+ blob_finish(&blob);
+ }
+
return ish;
}