diff options
author | Timothy Arceri <[email protected]> | 2016-12-04 22:47:17 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-01-19 15:55:02 +1100 |
commit | 62f718bfcb75ab6f8e7276d1acdea767e55feac9 (patch) | |
tree | b43768b161c368c340ea8b2a07f478dcab9938af /src/compiler/glsl/linker.cpp | |
parent | c054bbf0d40350bce931bccfce59d0c4ebca6fd1 (diff) |
glsl: store number of explicit uniform loactions in gl_shader_program
This allows us to cleanup the functions that pass this count around,
but more importantly we will be able to call the uniform linking
functions from that backends linker without having to pass this
information to the backend directly via Driver.LinkShader().
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/compiler/glsl/linker.cpp')
-rw-r--r-- | src/compiler/glsl/linker.cpp | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index 4db3ad1dea4..5f6b27c887b 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -3378,12 +3378,14 @@ reserve_subroutine_explicit_locations(struct gl_shader_program *prog, * any optimizations happen to handle also inactive uniforms and * inactive array elements that may get trimmed away. */ -static unsigned +static void check_explicit_uniform_locations(struct gl_context *ctx, struct gl_shader_program *prog) { + prog->NumExplicitUniformLocations = 0; + if (!ctx->Extensions.ARB_explicit_uniform_location) - return 0; + return; /* This map is used to detect if overlapping explicit locations * occur with the same uniform (from different stage) or a different one. @@ -3392,7 +3394,7 @@ check_explicit_uniform_locations(struct gl_context *ctx, if (!uniform_map) { linker_error(prog, "Out of memory during linking.\n"); - return 0; + return; } unsigned entries_total = 0; @@ -3420,7 +3422,7 @@ check_explicit_uniform_locations(struct gl_context *ctx, } if (!ret) { delete uniform_map; - return 0; + return; } } } @@ -3445,7 +3447,7 @@ check_explicit_uniform_locations(struct gl_context *ctx, } delete uniform_map; - return entries_total; + prog->NumExplicitUniformLocations = entries_total; } static bool @@ -4533,11 +4535,10 @@ disable_varying_optimizations_for_sso(struct gl_shader_program *prog) static void link_and_validate_uniforms(struct gl_context *ctx, - struct gl_shader_program *prog, - unsigned num_explicit_uniform_locs) + struct gl_shader_program *prog) { update_array_sizes(prog); - link_assign_uniform_locations(prog, ctx, num_explicit_uniform_locs); + link_assign_uniform_locations(prog, ctx); link_assign_atomic_counter_resources(ctx, prog); link_calculate_subroutine_compat(prog); @@ -4549,7 +4550,6 @@ link_and_validate_uniforms(struct gl_context *ctx, static bool link_varyings_and_uniforms(unsigned first, unsigned last, - unsigned num_explicit_uniform_locs, struct gl_context *ctx, struct gl_shader_program *prog, void *mem_ctx) { @@ -4595,7 +4595,7 @@ link_varyings_and_uniforms(unsigned first, unsigned last, if (!link_varyings(prog, first, last, ctx, mem_ctx)) return false; - link_and_validate_uniforms(ctx, prog, num_explicit_uniform_locs); + link_and_validate_uniforms(ctx, prog); if (!prog->data->LinkStatus) return false; @@ -4647,8 +4647,6 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) return; } - unsigned int num_explicit_uniform_locs = 0; - void *mem_ctx = ralloc_context(NULL); // temporary linker context prog->ARB_fragment_coord_conventions_enable = false; @@ -4828,7 +4826,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) last = i; } - num_explicit_uniform_locs = check_explicit_uniform_locations(ctx, prog); + check_explicit_uniform_locations(ctx, prog); link_assign_subroutine_types(prog); if (!prog->data->LinkStatus) @@ -4944,8 +4942,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) store_fragdepth_layout(prog); - if(!link_varyings_and_uniforms(first, last, num_explicit_uniform_locs, ctx, - prog, mem_ctx)) + if(!link_varyings_and_uniforms(first, last, ctx, prog, mem_ctx)) goto done; /* OpenGL ES < 3.1 requires that a vertex shader and a fragment shader both |