if (state) {
for (unsigned i = 0; i < STATE_LENGTH; i++)
paramList->Parameters[oldNum].StateIndexes[i] = state[i];
+ } else {
+ paramList->Parameters[oldNum].StateIndexes[0] = STATE_NOT_STATE_VAR;
}
if (type == PROGRAM_UNIFORM || type == PROGRAM_CONSTANT) {
list->UniformBytes = MAX2(list->UniformBytes, list->NumParameterValues * 4);
}
}
- assert(list->LastUniformIndex < list->FirstStateVarIndex);
}
bool DisallowRealloc;
/* Parameters are optionally sorted as follows. Uniforms and constants
- * are first, then state vars.
+ * are first, then state vars. This should be true in all cases except
+ * ir_to_mesa, which adds constants at the end, and ARB_vp with ARL,
+ * which can't sort parameters.
*/
int UniformBytes;
int LastUniformIndex;
}
return;
+ case STATE_NOT_STATE_VAR:
+ /* Most likely PROGRAM_CONSTANT. This only happens in rare cases, e.g.
+ * ARB_vp with ARL, which can't sort parameters by type.
+ */
+ return;
+
default:
unreachable("Invalid state in _mesa_fetch_state");
return;
return 0;
}
+ case STATE_NOT_STATE_VAR:
+ return 0;
+
default:
_mesa_problem(NULL, "unexpected state[0] in make_state_flags()");
return 0;
state[1] == STATE_CURRENT_ATTRIB_MAYBE_VP_CLAMPED)
append_index(str, state[2], false);
break;
+ case STATE_NOT_STATE_VAR:
+ append(str, "not_state");
+ break;
default:
_mesa_problem(NULL, "Invalid state in _mesa_program_state_string");
break;
if (!paramList)
return;
- assert(paramList->LastUniformIndex < paramList->FirstStateVarIndex);
int num = paramList->NumParameters;
for (int i = paramList->FirstStateVarIndex; i < num; i++) {
struct gl_program_parameter_list *paramList,
uint32_t *dst)
{
- assert(paramList->LastUniformIndex < paramList->FirstStateVarIndex);
int num = paramList->NumParameters;
for (int i = paramList->FirstStateVarIndex; i < num; i++) {
void
_mesa_optimize_state_parameters(struct gl_program_parameter_list *list)
{
- assert(list->LastUniformIndex < list->FirstStateVarIndex);
-
for (int first_param = list->FirstStateVarIndex;
first_param < (int)list->NumParameters; first_param++) {
int last_param = first_param;
int param_diff = 0;
- assert(list->Parameters[first_param].Type == PROGRAM_STATE_VAR);
-
switch (list->Parameters[first_param].StateIndexes[0]) {
case STATE_MODELVIEW_MATRIX:
case STATE_MODELVIEW_MATRIX_INVERSE: