[Mesa-dev] [PATCH 2/2] glsl: be much more aggressive when skipping shader compilation
Marek Olšák
maraeo at gmail.com
Thu Jan 17 16:09:12 UTC 2019
Acked-by: Marek Olšák <marek.olsak at amd.com>
Marek
On Thu, Jan 17, 2019 at 1:17 AM Timothy Arceri <tarceri at itsqueeze.com>
wrote:
> Currently only add a cache key for a shader once it is linked.
> However games like Team Fortress 2 compile a whole bunch of shaders
> which are never actually linked. These compiled shaders can take
> up a bunch of memory.
>
> This patch changes things so that we add the key for the shader to
> the cache as soon as it is compiled. This means on a warm cache we
> can avoid the wasted memory from these shaders. Worst case scenario
> is we need to compile the shaders at link time but this can happen
> anyway if the shader has been evicted from the cache.
>
> Reduces memory use in Team Fortress 2 from 1.3GB -> 770MB on a
> warm cache from start up to the game menu.
> ---
> src/compiler/glsl/glsl_parser_extras.cpp | 9 +++++++++
> src/compiler/glsl/shader_cache.cpp | 7 +------
> 2 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/src/compiler/glsl/glsl_parser_extras.cpp
> b/src/compiler/glsl/glsl_parser_extras.cpp
> index 200df7759b..655399a812 100644
> --- a/src/compiler/glsl/glsl_parser_extras.cpp
> +++ b/src/compiler/glsl/glsl_parser_extras.cpp
> @@ -2155,6 +2155,15 @@ _mesa_glsl_compile_shader(struct gl_context *ctx,
> struct gl_shader *shader,
>
> delete state->symbols;
> ralloc_free(state);
> +
> + if (ctx->Cache) {
> + char sha1_buf[41];
> + disk_cache_put_key(ctx->Cache, shader->sha1);
> + if (ctx->_Shader->Flags & GLSL_CACHE_INFO) {
> + _mesa_sha1_format(sha1_buf, shader->sha1);
> + fprintf(stderr, "marking shader: %s\n", sha1_buf);
> + }
> + }
> }
>
> } /* extern "C" */
> diff --git a/src/compiler/glsl/shader_cache.cpp
> b/src/compiler/glsl/shader_cache.cpp
> index 879511a9d7..581098b88f 100644
> --- a/src/compiler/glsl/shader_cache.cpp
> +++ b/src/compiler/glsl/shader_cache.cpp
> @@ -121,20 +121,15 @@ shader_cache_write_program_metadata(struct
> gl_context *ctx,
> if (!cache_item_metadata.keys)
> goto fail;
>
> - char sha1_buf[41];
> for (unsigned i = 0; i < prog->NumShaders; i++) {
> - disk_cache_put_key(cache, prog->Shaders[i]->sha1);
> memcpy(cache_item_metadata.keys[i], prog->Shaders[i]->sha1,
> sizeof(cache_key));
> - if (ctx->_Shader->Flags & GLSL_CACHE_INFO) {
> - _mesa_sha1_format(sha1_buf, prog->Shaders[i]->sha1);
> - fprintf(stderr, "marking shader: %s\n", sha1_buf);
> - }
> }
>
> disk_cache_put(cache, prog->data->sha1, metadata.data, metadata.size,
> &cache_item_metadata);
>
> + char sha1_buf[41];
> if (ctx->_Shader->Flags & GLSL_CACHE_INFO) {
> _mesa_sha1_format(sha1_buf, prog->data->sha1);
> fprintf(stderr, "putting program metadata in cache: %s\n",
> sha1_buf);
> --
> 2.20.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190117/feace932/attachment.html>
More information about the mesa-dev
mailing list