diff options
author | Caio Marcelo de Oliveira Filho <[email protected]> | 2019-08-23 06:50:11 -0700 |
---|---|---|
committer | Caio Marcelo de Oliveira Filho <[email protected]> | 2019-09-10 14:36:46 -0700 |
commit | 83fd1e58d8faebb7eb10094899b3175a2b55b24d (patch) | |
tree | 37fb188a45512e99152999e3c069fab8d170098e /src | |
parent | eca8032f20d0970184843d98e2bddb688e94a3a9 (diff) |
glsl/nir: Add and use a gl_nir_link() function
Perform all the NIR linking steps in order. Change iris and i965 to
use it. Suggested by Alejandro.
v2: Add gl_nir_linker_options struct.
Reviewed-by: Alejandro PiƱeiro <[email protected]> [v1]
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/glsl/gl_nir_linker.c | 16 | ||||
-rw-r--r-- | src/compiler/glsl/gl_nir_linker.h | 8 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_link.cpp | 12 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_glsl_to_nir.cpp | 11 |
4 files changed, 32 insertions, 15 deletions
diff --git a/src/compiler/glsl/gl_nir_linker.c b/src/compiler/glsl/gl_nir_linker.c index 4503231c6c2..8b5ff28a399 100644 --- a/src/compiler/glsl/gl_nir_linker.c +++ b/src/compiler/glsl/gl_nir_linker.c @@ -253,3 +253,19 @@ nir_build_program_resource_list(struct gl_context *ctx, _mesa_set_destroy(resource_set, NULL); } + +bool +gl_nir_link(struct gl_context *ctx, struct gl_shader_program *prog, + const struct gl_nir_linker_options *options) +{ + if (!gl_nir_link_uniform_blocks(ctx, prog)) + return false; + + 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_xfb_resources(ctx, prog); + + return true; +} diff --git a/src/compiler/glsl/gl_nir_linker.h b/src/compiler/glsl/gl_nir_linker.h index ecbc3f39090..82c5bf2ab49 100644 --- a/src/compiler/glsl/gl_nir_linker.h +++ b/src/compiler/glsl/gl_nir_linker.h @@ -31,6 +31,14 @@ extern "C" { struct gl_context; struct gl_shader_program; +struct gl_nir_linker_options { + bool fill_parameters; +}; + +bool gl_nir_link(struct gl_context *ctx, + struct gl_shader_program *prog, + const struct gl_nir_linker_options *options); + bool gl_nir_link_uniforms(struct gl_context *ctx, struct gl_shader_program *prog, bool fill_parameters); diff --git a/src/mesa/drivers/dri/i965/brw_link.cpp b/src/mesa/drivers/dri/i965/brw_link.cpp index c726551513a..512206e71e6 100644 --- a/src/mesa/drivers/dri/i965/brw_link.cpp +++ b/src/mesa/drivers/dri/i965/brw_link.cpp @@ -269,15 +269,11 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg) /* SPIR-V programs use a NIR linker */ if (shProg->data->spirv) { - if (!gl_nir_link_uniform_blocks(ctx, shProg)) { + static const gl_nir_linker_options opts = { + .fill_parameters = false, + }; + if (!gl_nir_link(ctx, shProg, &opts)) return GL_FALSE; - } - - if (!gl_nir_link_uniforms(ctx, shProg, /* fill_parameters */ false)) - return GL_FALSE; - - gl_nir_link_assign_atomic_counter_resources(ctx, shProg); - gl_nir_link_assign_xfb_resources(ctx, shProg); } for (stage = 0; stage < ARRAY_SIZE(shProg->_LinkedShaders); stage++) { diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index 39203435515..280a7782170 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -687,15 +687,12 @@ st_link_nir(struct gl_context *ctx, * st_nir_preprocess. */ if (shader_program->data->spirv) { - if (!gl_nir_link_uniform_blocks(ctx, shader_program)) + static const gl_nir_linker_options opts = { + .fill_parameters = true, + }; + if (!gl_nir_link(ctx, shader_program, &opts)) return GL_FALSE; - if (!gl_nir_link_uniforms(ctx, shader_program, /* fill_parameters */ true)) - return GL_FALSE; - - gl_nir_link_assign_atomic_counter_resources(ctx, shader_program); - gl_nir_link_assign_xfb_resources(ctx, shader_program); - nir_build_program_resource_list(ctx, shader_program); for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { |