Mesa (master): mesa: do integer FB / shader validation check in _mesa_valid_to_render()

Brian Paul brianp at kemper.freedesktop.org
Wed Oct 27 00:22:44 UTC 2010


Module: Mesa
Branch: master
Commit: 705978e2831eb8b8bb23bd11ee08ce51d9b2915c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=705978e2831eb8b8bb23bd11ee08ce51d9b2915c

Author: Brian Paul <brianp at vmware.com>
Date:   Tue Oct 26 18:01:06 2010 -0600

mesa: do integer FB / shader validation check in _mesa_valid_to_render()

---

 src/mesa/main/context.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 9401e3d..3e265fb 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1700,7 +1700,7 @@ _mesa_valid_to_render(struct gl_context *ctx, const char *where)
    if (ctx->Shader.CurrentProgram) {
       struct gl_shader_program *const prog = ctx->Shader.CurrentProgram;
 
-      /* using shaders */
+      /* The current shader program must be successfully linked */
       if (!prog->LinkStatus) {
          _mesa_error(ctx, GL_INVALID_OPERATION,
                      "%s(shader not linked)", where);
@@ -1728,6 +1728,16 @@ _mesa_valid_to_render(struct gl_context *ctx, const char *where)
 	 prog->_LinkedShaders[MESA_SHADER_FRAGMENT] != NULL;
    }
 
+   /* If drawing to integer-valued color buffers, there must be an
+    * active fragment shader (GL_EXT_texture_integer).
+    */
+   if (ctx->DrawBuffer && ctx->DrawBuffer->_IntegerColor) {
+      if (!frag_from_glsl_shader) {
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                     "%s(integer format but no fragment shader)", where);
+         return GL_FALSE;
+      }
+   }
 
    /* Any shader stages that are not supplied by the GLSL shader and have
     * assembly shaders enabled must now be validated.




More information about the mesa-commit mailing list