nv50: emit predicate for interp
[mesa.git] / src / mesa / main / uniforms.c
index aac4177f4081eed27a87a0b8f1fc2871fd9afcc4..d68a7768df55eef74618f5213edd3ee47381c60b 100644 (file)
@@ -132,6 +132,11 @@ get_uniform_parameter(const struct gl_shader_program *shProg, GLuint index)
       progPos = shProg->Uniforms->Uniforms[index].FragPos;
       if (progPos >= 0) {
          prog = &shProg->FragmentProgram->Base;
+      } else {
+         progPos = shProg->Uniforms->Uniforms[index].GeomPos;
+         if (progPos >= 0) {
+            prog = &shProg->GeometryProgram->Base;
+         }
       }
    }
 
@@ -172,6 +177,11 @@ _mesa_get_active_uniform(GLcontext *ctx, GLuint program, GLuint index,
       progPos = shProg->Uniforms->Uniforms[index].FragPos;
       if (progPos >= 0) {
          prog = &shProg->FragmentProgram->Base;
+      } else {
+         progPos = shProg->Uniforms->Uniforms[index].GeomPos;
+         if (progPos >= 0) {
+            prog = &shProg->GeometryProgram->Base;
+         }
       }
    }
 
@@ -310,6 +320,11 @@ lookup_uniform_parameter(GLcontext *ctx, GLuint program, GLint location,
             progPos = shProg->Uniforms->Uniforms[location].FragPos;
             if (progPos >= 0) {
                prog = &shProg->FragmentProgram->Base;
+            } else {
+               progPos = shProg->Uniforms->Uniforms[location].GeomPos;
+               if (progPos >= 0) {
+                  prog = &shProg->GeometryProgram->Base;
+               }
             }
          }
       }
@@ -824,6 +839,15 @@ _mesa_uniform(GLcontext *ctx, GLint location, GLsizei count,
       }
    }
 
+   if (shProg->GeometryProgram) {
+      /* convert uniform location to program parameter index */
+      GLint index = uniform->GeomPos;
+      if (index >= 0) {
+         set_program_uniform(ctx, &shProg->GeometryProgram->Base,
+                             index, offset, type, count, elems, values);
+      }
+   }
+
    uniform->Initialized = GL_TRUE;
 }
 
@@ -957,6 +981,16 @@ _mesa_uniform_matrix(GLcontext *ctx, GLint cols, GLint rows,
       }
    }
 
+   if (shProg->GeometryProgram) {
+      /* convert uniform location to program parameter index */
+      GLint index = uniform->GeomPos;
+      if (index >= 0) {
+         set_program_uniform_matrix(ctx, &shProg->GeometryProgram->Base,
+                                    index, offset,
+                                    count, rows, cols, transpose, values);
+      }
+   }
+
    uniform->Initialized = GL_TRUE;
 }
 
@@ -1288,6 +1322,7 @@ _mesa_GetActiveUniformARB(GLhandleARB program, GLuint index,
 void
 _mesa_init_shader_uniform_dispatch(struct _glapi_table *exec)
 {
+#if FEATURE_GL
    SET_Uniform1fARB(exec, _mesa_Uniform1fARB);
    SET_Uniform2fARB(exec, _mesa_Uniform2fARB);
    SET_Uniform3fARB(exec, _mesa_Uniform3fARB);
@@ -1331,4 +1366,5 @@ _mesa_init_shader_uniform_dispatch(struct _glapi_table *exec)
    (void) _mesa_Uniform2uiv;
    (void) _mesa_Uniform3uiv;
    (void) _mesa_Uniform4uiv;
+#endif /* FEATURE_GL */
 }