Browse Source

glsl: signal that the program needs to be re-translated when samplers change

tags/mesa_7_5_1
Brian Paul 16 years ago
parent
commit
babb5ba9a9
1 changed files with 15 additions and 4 deletions
  1. 15
    4
      src/mesa/shader/shader_api.c

+ 15
- 4
src/mesa/shader/shader_api.c View File

@@ -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 */

Loading…
Cancel
Save