glsl: don't reprocess or clear UBOs on cache fallback

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Timothy Arceri 2016-06-20 11:09:34 +10:00 committed by Timothy Arceri
parent 01d1e5a7ad
commit cad1a9bfde
2 changed files with 40 additions and 34 deletions

View File

@ -2252,6 +2252,7 @@ link_intrastage_shaders(void *mem_ctx,
v.run(linked->ir);
v.fixup_unnamed_interface_types();
if (!prog->data->cache_fallback) {
/* Link up uniform blocks defined within this stage. */
link_uniform_blocks(mem_ctx, ctx, prog, linked, &ubo_blocks,
&num_ubo_blocks, &ssbo_blocks, &num_ssbo_blocks);
@ -2278,6 +2279,7 @@ link_intrastage_shaders(void *mem_ctx,
linked->Program->sh.ShaderStorageBlocks[i] = &ssbo_blocks[i];
}
linked->Program->info.num_ssbos = num_ssbo_blocks;
}
/* At this point linked should contain all of the linked IR, so
* validate it to make sure nothing went wrong.
@ -4870,6 +4872,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
if (prog->SeparateShader)
disable_varying_optimizations_for_sso(prog);
if (!prog->data->cache_fallback) {
/* Process UBOs */
if (!interstage_cross_validate_uniform_blocks(prog, false))
goto done;
@ -4877,6 +4880,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
/* Process SSBOs */
if (!interstage_cross_validate_uniform_blocks(prog, true))
goto done;
}
/* Do common optimization before assigning storage for attributes,
* uniforms, and varyings. Later optimization could possibly make

View File

@ -351,6 +351,7 @@ _mesa_clear_shader_program_data(struct gl_context *ctx,
ralloc_free(shProg->data->InfoLog);
shProg->data->InfoLog = ralloc_strdup(shProg->data, "");
if (!shProg->data->cache_fallback) {
ralloc_free(shProg->data->UniformBlocks);
shProg->data->UniformBlocks = NULL;
shProg->data->NumUniformBlocks = 0;
@ -358,6 +359,7 @@ _mesa_clear_shader_program_data(struct gl_context *ctx,
ralloc_free(shProg->data->ShaderStorageBlocks);
shProg->data->ShaderStorageBlocks = NULL;
shProg->data->NumShaderStorageBlocks = 0;
}
if (shProg->data->AtomicBuffers && !shProg->data->cache_fallback) {
ralloc_free(shProg->data->AtomicBuffers);