From 4d6e866b7b685ef6c37ba9bc2789ecadc5d6c2f7 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 7 Jan 2022 11:08:33 +1000 Subject: [PATCH] glsl/linker: get rid of gl_context from atomic counters paths Reviewed-by: Timothy Arceri Part-of: --- src/compiler/glsl/gl_nir_link_atomics.c | 24 ++++++++++++------------ src/compiler/glsl/gl_nir_linker.c | 6 +++--- src/compiler/glsl/gl_nir_linker.h | 5 +++-- src/compiler/glsl/link_atomics.cpp | 26 +++++++++++++------------- src/compiler/glsl/linker.cpp | 4 ++-- src/compiler/glsl/linker.h | 4 ++-- 6 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/compiler/glsl/gl_nir_link_atomics.c b/src/compiler/glsl/gl_nir_link_atomics.c index 5a1a789..38846c7 100644 --- a/src/compiler/glsl/gl_nir_link_atomics.c +++ b/src/compiler/glsl/gl_nir_link_atomics.c @@ -131,14 +131,14 @@ process_atomic_variable(const struct glsl_type *t, } static struct active_atomic_buffer * -find_active_atomic_counters(struct gl_context *ctx, +find_active_atomic_counters(const struct gl_constants *consts, struct gl_shader_program *prog, unsigned *num_buffers) { struct active_atomic_buffer *buffers = rzalloc_array(NULL, /* ctx */ struct active_atomic_buffer, - ctx->Const.MaxAtomicBufferBindings); + consts->MaxAtomicBufferBindings); *num_buffers = 0; for (unsigned i = 0; i < MESA_SHADER_STAGES; ++i) { @@ -190,13 +190,13 @@ cmp_active_counter_offsets(const void *a, const void *b) } void -gl_nir_link_assign_atomic_counter_resources(struct gl_context *ctx, +gl_nir_link_assign_atomic_counter_resources(const struct gl_constants *consts, struct gl_shader_program *prog) { unsigned num_buffers; unsigned num_atomic_buffers[MESA_SHADER_STAGES] = {0}; struct active_atomic_buffer *abs = - find_active_atomic_counters(ctx, prog, &num_buffers); + find_active_atomic_counters(consts, prog, &num_buffers); prog->data->AtomicBuffers = rzalloc_array(prog->data, struct gl_active_atomic_buffer, num_buffers); @@ -204,7 +204,7 @@ gl_nir_link_assign_atomic_counter_resources(struct gl_context *ctx, unsigned buffer_idx = 0; for (unsigned binding = 0; - binding < ctx->Const.MaxAtomicBufferBindings; + binding < consts->MaxAtomicBufferBindings; binding++) { /* If the binding was not used, skip. @@ -301,12 +301,12 @@ gl_nir_link_assign_atomic_counter_resources(struct gl_context *ctx, } void -gl_nir_link_check_atomic_counter_resources(struct gl_context *ctx, +gl_nir_link_check_atomic_counter_resources(const struct gl_constants *consts, struct gl_shader_program *prog) { unsigned num_buffers; struct active_atomic_buffer *abs = - find_active_atomic_counters(ctx, prog, &num_buffers); + find_active_atomic_counters(consts, prog, &num_buffers); unsigned atomic_counters[MESA_SHADER_STAGES] = {0}; unsigned atomic_buffers[MESA_SHADER_STAGES] = {0}; unsigned total_atomic_counters = 0; @@ -317,7 +317,7 @@ gl_nir_link_check_atomic_counter_resources(struct gl_context *ctx, * against the combined limit -- That's the behavior the spec * requires. */ - for (unsigned i = 0; i < ctx->Const.MaxAtomicBufferBindings; i++) { + for (unsigned i = 0; i < consts->MaxAtomicBufferBindings; i++) { if (abs[i].size == 0) continue; @@ -354,19 +354,19 @@ gl_nir_link_check_atomic_counter_resources(struct gl_context *ctx, /* Check that they are within the supported limits. */ for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (atomic_counters[i] > ctx->Const.Program[i].MaxAtomicCounters) + if (atomic_counters[i] > consts->Program[i].MaxAtomicCounters) linker_error(prog, "Too many %s shader atomic counters", _mesa_shader_stage_to_string(i)); - if (atomic_buffers[i] > ctx->Const.Program[i].MaxAtomicBuffers) + if (atomic_buffers[i] > consts->Program[i].MaxAtomicBuffers) linker_error(prog, "Too many %s shader atomic counter buffers", _mesa_shader_stage_to_string(i)); } - if (total_atomic_counters > ctx->Const.MaxCombinedAtomicCounters) + if (total_atomic_counters > consts->MaxCombinedAtomicCounters) linker_error(prog, "Too many combined atomic counters"); - if (total_atomic_buffers > ctx->Const.MaxCombinedAtomicBuffers) + if (total_atomic_buffers > consts->MaxCombinedAtomicBuffers) linker_error(prog, "Too many combined atomic buffers"); ralloc_free(abs); diff --git a/src/compiler/glsl/gl_nir_linker.c b/src/compiler/glsl/gl_nir_linker.c index 78f7007..44273c1 100644 --- a/src/compiler/glsl/gl_nir_linker.c +++ b/src/compiler/glsl/gl_nir_linker.c @@ -621,7 +621,7 @@ gl_nir_link_spirv(struct gl_context *ctx, struct gl_shader_program *prog, if (!gl_nir_link_uniforms(ctx, prog, options->fill_parameters)) return false; - gl_nir_link_assign_atomic_counter_resources(ctx, prog); + gl_nir_link_assign_atomic_counter_resources(&ctx->Const, prog); gl_nir_link_assign_xfb_resources(ctx, prog); return true; @@ -687,8 +687,8 @@ gl_nir_link_glsl(struct gl_context *ctx, struct gl_shader_program *prog) link_util_check_uniform_resources(&ctx->Const, prog); link_util_check_subroutine_resources(prog); check_image_resources(ctx, prog); - gl_nir_link_assign_atomic_counter_resources(ctx, prog); - gl_nir_link_check_atomic_counter_resources(ctx, prog); + gl_nir_link_assign_atomic_counter_resources(&ctx->Const, prog); + gl_nir_link_check_atomic_counter_resources(&ctx->Const, prog); if (prog->data->LinkStatus == LINKING_FAILURE) return false; diff --git a/src/compiler/glsl/gl_nir_linker.h b/src/compiler/glsl/gl_nir_linker.h index 5b9e9de..b652ebc 100644 --- a/src/compiler/glsl/gl_nir_linker.h +++ b/src/compiler/glsl/gl_nir_linker.h @@ -29,6 +29,7 @@ extern "C" { #endif struct gl_context; +struct gl_constants; struct gl_shader_program; struct gl_nir_linker_options { @@ -58,10 +59,10 @@ void nir_build_program_resource_list(struct gl_context *ctx, struct gl_shader_program *prog, bool rebuild_resourse_list); -void gl_nir_link_assign_atomic_counter_resources(struct gl_context *ctx, +void gl_nir_link_assign_atomic_counter_resources(const struct gl_constants *consts, struct gl_shader_program *prog); -void gl_nir_link_check_atomic_counter_resources(struct gl_context *ctx, +void gl_nir_link_check_atomic_counter_resources(const struct gl_constants *consts, struct gl_shader_program *prog); void gl_nir_link_assign_xfb_resources(struct gl_context *ctx, diff --git a/src/compiler/glsl/link_atomics.cpp b/src/compiler/glsl/link_atomics.cpp index bc03d64..d98edcc 100644 --- a/src/compiler/glsl/link_atomics.cpp +++ b/src/compiler/glsl/link_atomics.cpp @@ -147,12 +147,12 @@ namespace { } active_atomic_buffer * - find_active_atomic_counters(struct gl_context *ctx, + find_active_atomic_counters(const struct gl_constants *consts, struct gl_shader_program *prog, unsigned *num_buffers) { active_atomic_buffer *const buffers = - new active_atomic_buffer[ctx->Const.MaxAtomicBufferBindings]; + new active_atomic_buffer[consts->MaxAtomicBufferBindings]; *num_buffers = 0; @@ -173,7 +173,7 @@ namespace { } } - for (unsigned i = 0; i < ctx->Const.MaxAtomicBufferBindings; i++) { + for (unsigned i = 0; i < consts->MaxAtomicBufferBindings; i++) { if (buffers[i].size == 0) continue; @@ -201,13 +201,13 @@ namespace { } void -link_assign_atomic_counter_resources(struct gl_context *ctx, +link_assign_atomic_counter_resources(const struct gl_constants *consts, struct gl_shader_program *prog) { unsigned num_buffers; unsigned num_atomic_buffers[MESA_SHADER_STAGES] = {}; active_atomic_buffer *abs = - find_active_atomic_counters(ctx, prog, &num_buffers); + find_active_atomic_counters(consts, prog, &num_buffers); prog->data->AtomicBuffers = rzalloc_array(prog->data, gl_active_atomic_buffer, num_buffers); @@ -215,7 +215,7 @@ link_assign_atomic_counter_resources(struct gl_context *ctx, unsigned i = 0; for (unsigned binding = 0; - binding < ctx->Const.MaxAtomicBufferBindings; + binding < consts->MaxAtomicBufferBindings; binding++) { /* If the binding was not used, skip. @@ -300,12 +300,12 @@ link_assign_atomic_counter_resources(struct gl_context *ctx, } void -link_check_atomic_counter_resources(struct gl_context *ctx, +link_check_atomic_counter_resources(const struct gl_constants *consts, struct gl_shader_program *prog) { unsigned num_buffers; active_atomic_buffer *const abs = - find_active_atomic_counters(ctx, prog, &num_buffers); + find_active_atomic_counters(consts, prog, &num_buffers); unsigned atomic_counters[MESA_SHADER_STAGES] = {}; unsigned atomic_buffers[MESA_SHADER_STAGES] = {}; unsigned total_atomic_counters = 0; @@ -316,7 +316,7 @@ link_check_atomic_counter_resources(struct gl_context *ctx, * against the combined limit -- That's the behavior the spec * requires. */ - for (unsigned i = 0; i < ctx->Const.MaxAtomicBufferBindings; i++) { + for (unsigned i = 0; i < consts->MaxAtomicBufferBindings; i++) { if (abs[i].size == 0) continue; @@ -334,19 +334,19 @@ link_check_atomic_counter_resources(struct gl_context *ctx, /* Check that they are within the supported limits. */ for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (atomic_counters[i] > ctx->Const.Program[i].MaxAtomicCounters) + if (atomic_counters[i] > consts->Program[i].MaxAtomicCounters) linker_error(prog, "Too many %s shader atomic counters", _mesa_shader_stage_to_string(i)); - if (atomic_buffers[i] > ctx->Const.Program[i].MaxAtomicBuffers) + if (atomic_buffers[i] > consts->Program[i].MaxAtomicBuffers) linker_error(prog, "Too many %s shader atomic counter buffers", _mesa_shader_stage_to_string(i)); } - if (total_atomic_counters > ctx->Const.MaxCombinedAtomicCounters) + if (total_atomic_counters > consts->MaxCombinedAtomicCounters) linker_error(prog, "Too many combined atomic counters"); - if (total_atomic_buffers > ctx->Const.MaxCombinedAtomicBuffers) + if (total_atomic_buffers > consts->MaxCombinedAtomicBuffers) linker_error(prog, "Too many combined atomic buffers"); delete [] abs; diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index f2668f5..57d6391 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -4514,8 +4514,8 @@ link_and_validate_uniforms(struct gl_context *ctx, link_util_check_uniform_resources(&ctx->Const, 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_assign_atomic_counter_resources(&ctx->Const, prog); + link_check_atomic_counter_resources(&ctx->Const, prog); } static bool diff --git a/src/compiler/glsl/linker.h b/src/compiler/glsl/linker.h index 98c8263..fd7fb1b 100644 --- a/src/compiler/glsl/linker.h +++ b/src/compiler/glsl/linker.h @@ -83,11 +83,11 @@ validate_interstage_uniform_blocks(struct gl_shader_program *prog, gl_linked_shader **stages); extern void -link_assign_atomic_counter_resources(struct gl_context *ctx, +link_assign_atomic_counter_resources(const struct gl_constants *consts, struct gl_shader_program *prog); extern void -link_check_atomic_counter_resources(struct gl_context *ctx, +link_check_atomic_counter_resources(const struct gl_constants *consts, struct gl_shader_program *prog); -- 2.7.4