mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-17 21:10:35 +01:00
mesa: check that varying variable qualifiers agree
This commit is contained in:
parent
0e2f757413
commit
dc1107c08d
1 changed files with 28 additions and 3 deletions
|
|
@ -75,6 +75,16 @@ link_error(struct gl_shader_program *shProg, const char *msg)
|
|||
|
||||
|
||||
|
||||
/**
|
||||
* Check if the given bit is either set or clear in both bitfields.
|
||||
*/
|
||||
static GLboolean
|
||||
bits_agree(GLbitfield flags1, GLbitfield flags2, GLbitfield bit)
|
||||
{
|
||||
return (flags1 & bit) == (flags2 & bit);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Linking varying vars involves rearranging varying vars so that the
|
||||
* vertex program's output varyings matches the order of the fragment
|
||||
|
|
@ -94,12 +104,27 @@ link_varying_vars(struct gl_shader_program *shProg, struct gl_program *prog)
|
|||
const struct gl_program_parameter *var = prog->Varying->Parameters + i;
|
||||
GLint j = _mesa_lookup_parameter_index(shProg->Varying, -1, var->Name);
|
||||
if (j >= 0) {
|
||||
/* already in list, check size */
|
||||
if (var->Size != shProg->Varying->Parameters[j].Size) {
|
||||
/* error */
|
||||
/* varying is already in list, do some error checking */
|
||||
const struct gl_program_parameter *v =
|
||||
&shProg->Varying->Parameters[j];
|
||||
if (var->Size != v->Size) {
|
||||
link_error(shProg, "mismatched varying variable types");
|
||||
return GL_FALSE;
|
||||
}
|
||||
if (!bits_agree(var->Flags, v->Flags, PROG_PARAM_BIT_CENTROID)) {
|
||||
char msg[100];
|
||||
snprintf(msg, sizeof(msg),
|
||||
"centroid modifier mismatch for '%s'", var->Name);
|
||||
link_error(shProg, msg);
|
||||
return GL_FALSE;
|
||||
}
|
||||
if (!bits_agree(var->Flags, v->Flags, PROG_PARAM_BIT_INVARIANT)) {
|
||||
char msg[100];
|
||||
snprintf(msg, sizeof(msg),
|
||||
"invariant modifier mismatch for '%s'", var->Name);
|
||||
link_error(shProg, msg);
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* not already in linked list */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue