glsl: signal that the program needs to be re-translated when samplers change
This commit is contained in:
@@ -1624,6 +1624,7 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program,
|
||||
|
||||
if (param->Type == PROGRAM_SAMPLER) {
|
||||
/* This controls which texture unit which is used by a sampler */
|
||||
GLboolean changed = GL_FALSE;
|
||||
GLint i;
|
||||
|
||||
/* data type for setting samplers must be int */
|
||||
@@ -1655,13 +1656,23 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program,
|
||||
_mesa_printf("Set program %p sampler %d '%s' to unit %u\n",
|
||||
program, sampler, param->Name, texUnit);
|
||||
#endif
|
||||
program->SamplerUnits[sampler] = texUnit;
|
||||
if (program->SamplerUnits[sampler] != texUnit) {
|
||||
program->SamplerUnits[sampler] = texUnit;
|
||||
changed = GL_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_mesa_update_shader_textures_used(program);
|
||||
|
||||
FLUSH_VERTICES(ctx, _NEW_TEXTURE);
|
||||
if (changed) {
|
||||
/* When a sampler's value changes it usually requires rewriting
|
||||
* a GPU program's TEX instructions since there may not be a
|
||||
* sampler->texture lookup table. We signal this with the
|
||||
* ProgramStringNotify() callback.
|
||||
*/
|
||||
FLUSH_VERTICES(ctx, _NEW_TEXTURE | _NEW_PROGRAM);
|
||||
_mesa_update_shader_textures_used(program);
|
||||
ctx->Driver.ProgramStringNotify(ctx, program->Target, program);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* ordinary uniform variable */
|
||||
|
||||
Reference in New Issue
Block a user