glsl: move check_subroutine_resources() into the shared util code

We will make use of this in the nir linker in the following patch.

Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
This commit is contained in:
Timothy Arceri 2020-01-07 10:08:15 +11:00
parent 3dec68e682
commit a6fd1c7752
3 changed files with 20 additions and 15 deletions

View file

@ -3436,20 +3436,6 @@ link_calculate_subroutine_compat(struct gl_shader_program *prog)
}
}
static void
check_subroutine_resources(struct gl_shader_program *prog)
{
unsigned mask = prog->data->linked_stages;
while (mask) {
const int i = u_bit_scan(&mask);
struct gl_program *p = prog->_LinkedShaders[i]->Program;
if (p->sh.NumSubroutineUniformRemapTable > MAX_SUBROUTINE_UNIFORM_LOCATIONS) {
linker_error(prog, "Too many %s shader subroutine uniforms\n",
_mesa_shader_stage_to_string(i));
}
}
}
/**
* Validate shader image resources.
*/
@ -4535,7 +4521,7 @@ link_and_validate_uniforms(struct gl_context *ctx,
link_calculate_subroutine_compat(prog);
check_resources(ctx, prog);
check_subroutine_resources(prog);
link_util_check_subroutine_resources(prog);
if (!ctx->Const.UseNIRGLSLLinker) {
check_image_resources(ctx, prog);

View file

@ -23,6 +23,7 @@
*/
#include "main/mtypes.h"
#include "linker_util.h"
#include "util/bitscan.h"
#include "util/set.h"
#include "ir_uniform.h" /* for gl_uniform_storage */
@ -154,3 +155,18 @@ link_util_update_empty_uniform_locations(struct gl_shader_program *prog)
}
}
}
void
link_util_check_subroutine_resources(struct gl_shader_program *prog)
{
unsigned mask = prog->data->linked_stages;
while (mask) {
const int i = u_bit_scan(&mask);
struct gl_program *p = prog->_LinkedShaders[i]->Program;
if (p->sh.NumSubroutineUniformRemapTable > MAX_SUBROUTINE_UNIFORM_LOCATIONS) {
linker_error(prog, "Too many %s shader subroutine uniforms\n",
_mesa_shader_stage_to_string(i));
}
}
}

View file

@ -70,6 +70,9 @@ link_util_find_empty_block(struct gl_shader_program *prog,
void
link_util_update_empty_uniform_locations(struct gl_shader_program *prog);
void
link_util_check_subroutine_resources(struct gl_shader_program *prog);
#ifdef __cplusplus
}
#endif