main: Allow ctx == NULL in _mesa_validate_shader_target().
authorPaul Berry <stereotype441@gmail.com>
Thu, 9 Jan 2014 23:30:10 +0000 (15:30 -0800)
committerPaul Berry <stereotype441@gmail.com>
Wed, 22 Jan 2014 04:24:54 +0000 (20:24 -0800)
This will allow this function to be used in circumstances where there
is no context available, such as when building built-in GLSL
functions.

Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/main/shaderapi.c

index 716e65968f3e6fc3da39bdaa200fc6f07e5deeda..2ab0a0cfde2633cc8a4f6e193b2b655771144767 100644 (file)
@@ -174,13 +174,20 @@ _mesa_copy_string(GLchar *dst, GLsizei maxLength,
 bool
 _mesa_validate_shader_target(const struct gl_context *ctx, GLenum type)
 {
+   /* Note: when building built-in GLSL functions, this function may be
+    * invoked with ctx == NULL.  In that case, we can only validate that it's
+    * a shader target we recognize, not that it's supported in the current
+    * context.  But that's fine--we don't need any further validation than
+    * that when building built-in GLSL functions.
+    */
+
    switch (type) {
    case GL_FRAGMENT_SHADER:
-      return ctx->Extensions.ARB_fragment_shader;
+      return ctx == NULL || ctx->Extensions.ARB_fragment_shader;
    case GL_VERTEX_SHADER:
-      return ctx->Extensions.ARB_vertex_shader;
+      return ctx == NULL || ctx->Extensions.ARB_vertex_shader;
    case GL_GEOMETRY_SHADER_ARB:
-      return _mesa_has_geometry_shaders(ctx);
+      return ctx == NULL || _mesa_has_geometry_shaders(ctx);
    default:
       return false;
    }