glsl: fix bug in sampler array indexing
authorBrian Paul <brianp@vmware.com>
Wed, 26 Aug 2009 17:39:24 +0000 (11:39 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 26 Aug 2009 17:39:31 +0000 (11:39 -0600)
Need to add the 'offset' parameter when indexing the parameter array.
Before, if we were setting arrays of samplers, we were actually only
setting the 0th sampler's value.

Because of how progs/glsl/samplers.c is constructed, this wasn't showing
up as a failure in the samplers_array output.

src/mesa/shader/shader_api.c

index 14da974a873d002ae474cb42338820cf32bef423..95b7490ca9721dcaac91c49d134214f0c8c37aad 100644 (file)
@@ -1624,7 +1624,6 @@ 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 */
-      GLuint texUnit, sampler;
       GLint i;
 
       /* data type for setting samplers must be int */
@@ -1639,8 +1638,9 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program,
        * common thing...
        */
       for (i = 0; i < count; i++) {
-         sampler = (GLuint) program->Parameters->ParameterValues[index + i][0];
-         texUnit = ((GLuint *) values)[i];
+         GLuint sampler =
+            (GLuint) program->Parameters->ParameterValues[index + offset + i][0];
+         GLuint texUnit = ((GLuint *) values)[i];
 
          /* check that the sampler (tex unit index) is legal */
          if (texUnit >= ctx->Const.MaxTextureImageUnits) {
@@ -1651,6 +1651,10 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program,
 
          /* This maps a sampler to a texture unit: */
          if (sampler < MAX_SAMPLERS) {
+#if 0
+            _mesa_printf("Set program %p sampler %d '%s' to unit %u\n",
+                         program, sampler, param->Name, texUnit);
+#endif
             program->SamplerUnits[sampler] = texUnit;
          }
       }