remove_struct_derefs_prep(path.path, &name, &location, &type);
- assert(location < state->shader_program->data->NumUniformStorage &&
- state->shader_program->data->UniformStorage[location].opaque[stage].active);
+ if (state->shader_program) {
+ /* For GLSL programs, look up the bindings in the uniform storage. */
+ assert(location < state->shader_program->data->NumUniformStorage &&
+ state->shader_program->data->UniformStorage[location].opaque[stage].active);
- binding = state->shader_program->data->UniformStorage[location].opaque[stage].index;
+ binding = state->shader_program->data->UniformStorage[location].opaque[stage].index;
+ } else {
+ /* For ARB programs or built-in shaders, assume that whoever created
+ * the shader set the bindings correctly already.
+ */
+ binding = var->data.binding;
+ }
if (var->type == type) {
/* Fast path: We did not encounter any struct derefs. */