mesa: glsl: add check for exceeding max number of constants/uniforms
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 20 Aug 2008 20:39:10 +0000 (14:39 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 20 Aug 2008 20:39:10 +0000 (14:39 -0600)
src/mesa/shader/slang/slang_emit.c

index c5a0fcb6c776be07a738117c04931846b9e8f9b8..f5f41eb116dcff9ee08b5942bb81d0071f8fdd7e 100644 (file)
@@ -1971,6 +1971,7 @@ _slang_emit_code(slang_ir_node *n, slang_var_table *vt,
    GET_CURRENT_CONTEXT(ctx);
    GLboolean success;
    slang_emit_info emitInfo;
+   GLuint maxUniforms;
 
    emitInfo.log = log;
    emitInfo.vt = vt;
@@ -1987,6 +1988,19 @@ _slang_emit_code(slang_ir_node *n, slang_var_table *vt,
       emitInfo.EmitHighLevelInstructions = GL_TRUE;
    }      
 
+   /* Check uniform/constant limits */
+   if (prog->Target == GL_FRAGMENT_PROGRAM_ARB) {
+      maxUniforms = ctx->Const.FragmentProgram.MaxUniformComponents / 4;
+   }
+   else {
+      assert(prog->Target == GL_VERTEX_PROGRAM_ARB);
+      maxUniforms = ctx->Const.VertexProgram.MaxUniformComponents / 4;
+   }
+   if (prog->Parameters->NumParameters > maxUniforms) {
+      slang_info_log_error(log, "Constant/uniform register limit exceeded");
+      return GL_FALSE;
+   }
+
    (void) emit(&emitInfo, n);
 
    /* finish up by adding the END opcode to program */