_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;
+}
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);
/* 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++) {
* 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++) {