Mesa (master): mesa/sso: Add support for GL_PROGRAM_SEPARABLE query

Ian Romanick idr at kemper.freedesktop.org
Fri Feb 21 23:41:21 UTC 2014


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

Author: Gregory Hainaut <gregory.hainaut at gmail.com>
Date:   Fri Jun 28 14:05:49 2013 -0700

mesa/sso: Add support for GL_PROGRAM_SEPARABLE query

This was originally included in another patch, but it was split out by
Ian Romanick.

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>

---

 src/mesa/main/mtypes.h    |    6 ++++++
 src/mesa/main/shaderapi.c |   25 +++++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index c998cc6..fbbca55 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2586,6 +2586,12 @@ struct gl_shader_program
     */
    GLboolean InternalSeparateShader;
 
+   /**
+    * Indicates whether program can be bound for individual pipeline stages
+    * using UseProgramStages after it is next linked.
+    */
+   GLboolean SeparateShader;
+
    GLuint NumShaders;          /**< number of attached shaders */
    struct gl_shader **Shaders; /**< List of attached the shaders */
 
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index ac95dc7..79ef149 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -696,6 +696,12 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname, GLint *param
          params[i] = shProg->Comp.LocalSize[i];
       return;
    }
+   case GL_PROGRAM_SEPARABLE:
+      if (!ctx->Extensions.ARB_separate_shader_objects)
+         break;
+
+      *params = shProg->SeparateShader;
+      return;
    default:
       break;
    }
@@ -1736,6 +1742,25 @@ _mesa_ProgramParameteri(GLuint program, GLenum pname, GLint value)
        */
       shProg->BinaryRetreivableHint = value;
       return;
+
+   case GL_PROGRAM_SEPARABLE:
+      if (!ctx->Extensions.ARB_separate_shader_objects)
+         break;
+
+      /* Spec imply that the behavior is the same as ARB_get_program_binary
+       * Chapter 7.3 Program Objects
+       */
+      if (value != GL_TRUE && value != GL_FALSE) {
+         _mesa_error(ctx, GL_INVALID_VALUE,
+                     "glProgramParameteri(pname=%s, value=%d): "
+                     "value must be 0 or 1.",
+                     _mesa_lookup_enum_by_nr(pname),
+                     value);
+         return;
+      }
+      shProg->SeparateShader = value;
+      return;
+
    default:
       break;
    }




More information about the mesa-commit mailing list