diff --git a/docs/relnotes/17.4.0.html b/docs/relnotes/17.4.0.html index e4dd6bf7b70..f81b5bd62d3 100644 --- a/docs/relnotes/17.4.0.html +++ b/docs/relnotes/17.4.0.html @@ -44,7 +44,7 @@ Note: some of the new features are only available with certain drivers.

Bug fixes

diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index f141227bda7..037e349fdb0 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -1037,6 +1037,8 @@ brwCreateContext(gl_api api, vbo_use_buffer_objects(ctx); vbo_always_unmap_buffers(ctx); + 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 73202d571f9..853ea98af03 100644 --- a/src/mesa/drivers/dri/i965/brw_disk_cache.c +++ b/src/mesa/drivers/dri/i965/brw_disk_cache.c @@ -26,6 +26,8 @@ #include "compiler/glsl/shader_cache.h" #include "compiler/nir/nir_serialize.h" #include "main/mtypes.h" +#include "util/build_id.h" +#include "util/debug.h" #include "util/disk_cache.h" #include "util/macros.h" #include "util/mesa-sha1.h" @@ -413,3 +415,29 @@ 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("MESA_GLSL_CACHE_DISABLE", true)) + return; + + char renderer[10]; + MAYBE_UNUSED int len = snprintf(renderer, sizeof(renderer), "i965_%04x", + brw->screen->deviceID); + assert(len == sizeof(renderer) - 1); + + const struct build_id_note *note = + build_id_find_nhdr_for_addr(brw_disk_cache_init); + assert(note && build_id_length(note) == 20 /* sha1 */); + + const uint8_t *id_sha1 = build_id_data(note); + assert(id_sha1); + + char timestamp[41]; + _mesa_sha1_format(timestamp, id_sha1); + + brw->ctx.Cache = disk_cache_create(renderer, timestamp, 0); +#endif +} diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index c98b7facd57..927e77920ef 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);