We use the build-id of i965_dri.so for the timestamp, and the name from i965_pci_ids.h for the device name.
Signed-off-by: Jordan Justen <[email protected]> --- src/mesa/drivers/dri/i965/brw_context.c | 2 ++ src/mesa/drivers/dri/i965/brw_disk_cache.c | 45 ++++++++++++++++++++++++++++++ src/mesa/drivers/dri/i965/brw_state.h | 1 + 3 files changed, 48 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 3904bc708b..5d7d555f79 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -1014,6 +1014,8 @@ brwCreateContext(gl_api api, brw->dri_config_options_sha1); brw->ctx.Const.dri_config_options_sha1 = brw->dri_config_options_sha1; + brw_disk_cache_init(brw); + return true; } diff --git a/src/mesa/drivers/dri/i965/brw_disk_cache.c b/src/mesa/drivers/dri/i965/brw_disk_cache.c index 036b56225e..ef5380126a 100644 --- a/src/mesa/drivers/dri/i965/brw_disk_cache.c +++ b/src/mesa/drivers/dri/i965/brw_disk_cache.c @@ -29,6 +29,8 @@ #include "main/mtypes.h" #include "main/shaderobj.h" #include "program/program.h" +#include "util/build_id.h" +#include "util/debug.h" #include "util/disk_cache.h" #include "util/macros.h" #include "util/mesa-sha1.h" @@ -652,3 +654,46 @@ brw_disk_cache_write_compute_program(struct brw_context *brw) MESA_SHADER_COMPUTE); } } + +void +brw_disk_cache_init(struct brw_context *brw) +{ +#ifdef ENABLE_SHADER_CACHE + if (!env_var_as_boolean("INTEL_SHADER_CACHE", false)) + return; + + char *renderer = NULL; + int len = asprintf(&renderer, "i965_%04x", brw->screen->deviceID); + if (len < 0) { + renderer = strdup("i965"); + } + if (renderer == NULL) + return; + + const struct build_id_note *note = build_id_find_nhdr("i965_dri.so"); + int id_size = note ? build_id_length(note) : 0; + char *timestamp; + if (id_size > 0) { + timestamp = malloc(2 * id_size + 1); + if (!timestamp) + id_size = 0; + } + if (id_size > 0) { + const uint8_t *data = build_id_data(note); + int i; + + for (i = 0; i < id_size; i++) + snprintf(×tamp[2 * i], 3, "%02x", data[i]); + } else { + timestamp = strdup("now"); + } + if (timestamp == NULL) { + free(renderer); + return; + } + + brw->ctx.Cache = disk_cache_create(renderer, timestamp, 0); + free(renderer); + free(timestamp); +#endif +} diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index ff8f1b5157..695446f175 100644 --- a/src/mesa/drivers/dri/i965/brw_state.h +++ b/src/mesa/drivers/dri/i965/brw_state.h @@ -132,6 +132,7 @@ void gen8_write_pma_stall_bits(struct brw_context *brw, uint32_t pma_stall_bits); /* brw_disk_cache.c */ +void brw_disk_cache_init(struct brw_context *brw); bool brw_disk_cache_upload_program(struct brw_context *brw, gl_shader_stage stage); void brw_disk_cache_write_compute_program(struct brw_context *brw); -- 2.14.0 _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
