track state flags which might invalidate parameter lists
This commit is contained in:
@@ -45,6 +45,9 @@
|
|||||||
static const char *
|
static const char *
|
||||||
make_state_string(const GLint stateTokens[6]);
|
make_state_string(const GLint stateTokens[6]);
|
||||||
|
|
||||||
|
static GLuint
|
||||||
|
make_state_flags(const GLint state[]);
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
/* Utility functions */
|
/* Utility functions */
|
||||||
@@ -459,6 +462,9 @@ _mesa_add_state_reference(struct program_parameter_list *paramList,
|
|||||||
for (i = 0; i < 6; i++)
|
for (i = 0; i < 6; i++)
|
||||||
paramList->Parameters[index].StateIndexes[i]
|
paramList->Parameters[index].StateIndexes[i]
|
||||||
= (enum state_index) stateTokens[i];
|
= (enum state_index) stateTokens[i];
|
||||||
|
|
||||||
|
paramList->StateFlags |=
|
||||||
|
make_state_flags(stateTokens);
|
||||||
}
|
}
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
@@ -899,6 +905,77 @@ _mesa_fetch_state(GLcontext *ctx, const enum state_index state[],
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Return a bit mask of the Mesa state flags under which a parameter's
|
||||||
|
* value might change.
|
||||||
|
*/
|
||||||
|
static GLuint make_state_flags(const GLint state[])
|
||||||
|
{
|
||||||
|
switch (state[0]) {
|
||||||
|
case STATE_MATERIAL:
|
||||||
|
case STATE_LIGHT:
|
||||||
|
case STATE_LIGHTMODEL_AMBIENT:
|
||||||
|
case STATE_LIGHTMODEL_SCENECOLOR:
|
||||||
|
case STATE_LIGHTPROD:
|
||||||
|
return _NEW_LIGHT;
|
||||||
|
|
||||||
|
case STATE_TEXGEN:
|
||||||
|
case STATE_TEXENV_COLOR:
|
||||||
|
return _NEW_TEXTURE;
|
||||||
|
|
||||||
|
case STATE_FOG_COLOR:
|
||||||
|
case STATE_FOG_PARAMS:
|
||||||
|
return _NEW_FOG;
|
||||||
|
|
||||||
|
case STATE_CLIPPLANE:
|
||||||
|
return _NEW_TRANSFORM;
|
||||||
|
|
||||||
|
case STATE_POINT_SIZE:
|
||||||
|
case STATE_POINT_ATTENUATION:
|
||||||
|
return _NEW_POINT;
|
||||||
|
|
||||||
|
case STATE_MATRIX:
|
||||||
|
switch (state[1]) {
|
||||||
|
case STATE_MODELVIEW:
|
||||||
|
return _NEW_MODELVIEW;
|
||||||
|
case STATE_PROJECTION:
|
||||||
|
return _NEW_PROJECTION;
|
||||||
|
case STATE_MVP:
|
||||||
|
return _NEW_MODELVIEW | _NEW_PROJECTION;
|
||||||
|
case STATE_TEXTURE:
|
||||||
|
return _NEW_TEXTURE_MATRIX;
|
||||||
|
case STATE_PROGRAM:
|
||||||
|
return _NEW_TRACK_MATRIX;
|
||||||
|
default:
|
||||||
|
assert(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case STATE_DEPTH_RANGE:
|
||||||
|
return _NEW_VIEWPORT;
|
||||||
|
|
||||||
|
case STATE_FRAGMENT_PROGRAM:
|
||||||
|
case STATE_VERTEX_PROGRAM:
|
||||||
|
return _NEW_PROGRAM;
|
||||||
|
|
||||||
|
case STATE_INTERNAL:
|
||||||
|
switch (state[1]) {
|
||||||
|
case STATE_NORMAL_SCALE:
|
||||||
|
return _NEW_MODELVIEW;
|
||||||
|
default:
|
||||||
|
assert(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
assert(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
append(char *dst, const char *src)
|
append(char *dst, const char *src)
|
||||||
{
|
{
|
||||||
|
@@ -204,6 +204,9 @@ struct program_parameter_list
|
|||||||
GLuint NumParameters; /** number of parameters in arrays */
|
GLuint NumParameters; /** number of parameters in arrays */
|
||||||
struct program_parameter *Parameters; /** Array [Size] */
|
struct program_parameter *Parameters; /** Array [Size] */
|
||||||
GLfloat (*ParameterValues)[4]; /** Array [Size] */
|
GLfloat (*ParameterValues)[4]; /** Array [Size] */
|
||||||
|
GLuint StateFlags; /** _NEW_* flags indicating which
|
||||||
|
statechanges might invalidate
|
||||||
|
ParameterValues[] */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user