Просмотр исходного кода

glsl: don't skip GLSL IR opts on first-time compiles

This basically reverts c2bc0aa7b1.

By running the opts we reduce  memory using in Team Fortress 2
from 1.5GB -> 1.3GB from start-up to game menu.

This will likely increase Deus Ex start up times as per commit
c2bc0aa7b1. However currently 32bit games like Team Fortress 2
can run out of memory on low memory systems, so that seems more
important.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
tags/19.0-branchpoint
Timothy Arceri 6 лет назад
Родитель
Сommit
c9d7b0f184
3 измененных файлов: 2 добавлений и 34 удалений
  1. 1
    15
      src/compiler/glsl/glsl_parser_extras.cpp
  2. 0
    17
      src/compiler/glsl/shader_cache.cpp
  3. 1
    2
      src/mesa/main/mtypes.h

+ 1
- 15
src/compiler/glsl/glsl_parser_extras.cpp Просмотреть файл

@@ -2090,14 +2090,6 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader,
*/
if (shader->CompileStatus == COMPILE_SUCCESS)
return;

if (shader->CompileStatus == COMPILED_NO_OPTS) {
opt_shader_and_create_symbol_table(ctx,
NULL, /* source_symbols */
shader);
shader->CompileStatus = COMPILE_SUCCESS;
return;
}
}

struct _mesa_glsl_parse_state *state =
@@ -2153,13 +2145,7 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader,
if (!state->error && !shader->ir->is_empty()) {
assign_subroutine_indexes(state);
lower_subroutine(shader->ir, state);

if (!ctx->Cache || force_recompile)
opt_shader_and_create_symbol_table(ctx, state->symbols, shader);
else {
reparent_ir(shader->ir, shader->ir);
shader->CompileStatus = COMPILED_NO_OPTS;
}
opt_shader_and_create_symbol_table(ctx, state->symbols, shader);
}

if (!force_recompile) {

+ 0
- 17
src/compiler/glsl/shader_cache.cpp Просмотреть файл

@@ -264,23 +264,6 @@ shader_cache_read_program_metadata(struct gl_context *ctx,
/* This is used to flag a shader retrieved from cache */
prog->data->LinkStatus = LINKING_SKIPPED;

/* Since the program load was successful, CompileStatus of all shaders at
* this point should normally be compile_skipped. However because of how
* the eviction works, it may happen that some of the individual shader keys
* have been evicted, resulting in unnecessary recompiles on this load, so
* mark them again to skip such recompiles next time.
*/
char sha1_buf[41];
for (unsigned i = 0; i < prog->NumShaders; i++) {
if (prog->Shaders[i]->CompileStatus == COMPILED_NO_OPTS) {
disk_cache_put_key(cache, prog->Shaders[i]->sha1);
if (ctx->_Shader->Flags & GLSL_CACHE_INFO) {
_mesa_sha1_format(sha1_buf, prog->Shaders[i]->sha1);
fprintf(stderr, "re-marking shader: %s\n", sha1_buf);
}
}
}

free (buffer);

return true;

+ 1
- 2
src/mesa/main/mtypes.h Просмотреть файл

@@ -2576,8 +2576,7 @@ enum gl_compile_status
{
COMPILE_FAILURE = 0,
COMPILE_SUCCESS,
COMPILE_SKIPPED,
COMPILED_NO_OPTS
COMPILE_SKIPPED
};

/**

Загрузка…
Отмена
Сохранить