aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCaio Marcelo de Oliveira Filho <[email protected]>2019-08-23 06:50:11 -0700
committerCaio Marcelo de Oliveira Filho <[email protected]>2019-09-10 14:36:46 -0700
commit83fd1e58d8faebb7eb10094899b3175a2b55b24d (patch)
tree37fb188a45512e99152999e3c069fab8d170098e /src
parenteca8032f20d0970184843d98e2bddb688e94a3a9 (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.c16
-rw-r--r--src/compiler/glsl/gl_nir_linker.h8
-rw-r--r--src/mesa/drivers/dri/i965/brw_link.cpp12
-rw-r--r--src/mesa/state_tracker/st_glsl_to_nir.cpp11
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++) {