mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 04:20:08 +01:00
glsl: when NIR linker enable use it to resize uniform arrays
Here we turn on uniform array resizing in the NIR linker and disable the GLSL IR resizing pass when the NIR linker is enabled. This will potentially make uniform arrays smaller due to NIR optimising away more uniform uses. Shader-db results (SKL): total instructions in shared programs: 14947192 -> 14944093 (-0.02%) instructions in affected programs: 138088 -> 134989 (-2.24%) helped: 822 HURT: 4 total cycles in shared programs: 324868402 -> 324794597 (-0.02%) cycles in affected programs: 3904170 -> 3830365 (-1.89%) helped: 2333 HURT: 1485 Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4910>
This commit is contained in:
parent
7d1eadb790
commit
a34cc97ca3
2 changed files with 24 additions and 13 deletions
|
|
@ -1522,6 +1522,17 @@ gl_nir_link_uniforms(struct gl_context *ctx,
|
|||
add_var_use_shader(nir, state.referenced_uniforms[stage]);
|
||||
}
|
||||
|
||||
/* Resize uniform arrays based on the maximum array index */
|
||||
for (unsigned stage = 0; stage < MESA_SHADER_STAGES; stage++) {
|
||||
struct gl_linked_shader *sh = prog->_LinkedShaders[stage];
|
||||
if (!sh)
|
||||
continue;
|
||||
|
||||
nir_shader *nir = sh->Program->nir;
|
||||
nir_foreach_variable(var, &nir->uniforms)
|
||||
update_array_sizes(prog, var, state.referenced_uniforms);
|
||||
}
|
||||
|
||||
/* Count total number of uniforms and allocate storage */
|
||||
unsigned storage_size = 0;
|
||||
if (!prog->data->spirv) {
|
||||
|
|
|
|||
|
|
@ -4444,21 +4444,20 @@ static void
|
|||
link_and_validate_uniforms(struct gl_context *ctx,
|
||||
struct gl_shader_program *prog)
|
||||
{
|
||||
assert(!ctx->Const.UseNIRGLSLLinker);
|
||||
|
||||
update_array_sizes(prog);
|
||||
link_assign_uniform_locations(prog, ctx);
|
||||
|
||||
if (!ctx->Const.UseNIRGLSLLinker) {
|
||||
link_assign_uniform_locations(prog, ctx);
|
||||
if (prog->data->LinkStatus == LINKING_FAILURE)
|
||||
return;
|
||||
|
||||
if (prog->data->LinkStatus == LINKING_FAILURE)
|
||||
return;
|
||||
|
||||
link_util_calculate_subroutine_compat(prog);
|
||||
link_util_check_uniform_resources(ctx, prog);
|
||||
link_util_check_subroutine_resources(prog);
|
||||
check_image_resources(ctx, prog);
|
||||
link_assign_atomic_counter_resources(ctx, prog);
|
||||
link_check_atomic_counter_resources(ctx, prog);
|
||||
}
|
||||
link_util_calculate_subroutine_compat(prog);
|
||||
link_util_check_uniform_resources(ctx, prog);
|
||||
link_util_check_subroutine_resources(prog);
|
||||
check_image_resources(ctx, prog);
|
||||
link_assign_atomic_counter_resources(ctx, prog);
|
||||
link_check_atomic_counter_resources(ctx, prog);
|
||||
}
|
||||
|
||||
static bool
|
||||
|
|
@ -4505,7 +4504,8 @@ 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);
|
||||
if (!ctx->Const.UseNIRGLSLLinker)
|
||||
link_and_validate_uniforms(ctx, prog);
|
||||
|
||||
if (!prog->data->LinkStatus)
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue