Mesa (master): mesa/sso: Refactor implementation of _mesa_CreateShaderProgramEXT

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


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

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

mesa/sso: Refactor implementation of _mesa_CreateShaderProgramEXT

This will allow the guts of the implementation to be shared with
_mesa_CreateShaderProgramv.

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/shaderapi.c |   26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 79ef149..f981900 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -1832,19 +1832,16 @@ _mesa_ActiveProgramEXT(GLuint program)
    return;
 }
 
-
-/**
- * For GL_EXT_separate_shader_objects
- */
-GLuint GLAPIENTRY
-_mesa_CreateShaderProgramEXT(GLenum type, const GLchar *string)
+static GLuint
+_mesa_create_shader_program(struct gl_context* ctx, GLboolean separate,
+                            GLenum type, GLsizei count, const GLchar* const *strings)
 {
-   GET_CURRENT_CONTEXT(ctx);
    const GLuint shader = create_shader(ctx, type);
    GLuint program = 0;
 
    if (shader) {
-      shader_source(ctx, shader, _mesa_strdup(string));
+      _mesa_ShaderSource(shader, count, strings, NULL);
+
       compile_shader(ctx, shader);
 
       program = create_shader_program(ctx);
@@ -1856,6 +1853,8 @@ _mesa_CreateShaderProgramEXT(GLenum type, const GLchar *string)
 	 shProg = _mesa_lookup_shader_program(ctx, program);
 	 sh = _mesa_lookup_shader(ctx, shader);
 
+	 shProg->SeparateShader = separate;
+
 	 get_shaderiv(ctx, shader, GL_COMPILE_STATUS, &compiled);
 	 if (compiled) {
 	    attach_shader(ctx, program, shader);
@@ -1919,6 +1918,17 @@ _mesa_copy_linked_program_data(gl_shader_stage type,
 
 
 /**
+ * For GL_EXT_separate_shader_objects
+ */
+GLuint GLAPIENTRY
+_mesa_CreateShaderProgramEXT(GLenum type, const GLchar *string)
+{
+   GET_CURRENT_CONTEXT(ctx);
+
+   return _mesa_create_shader_program(ctx, GL_FALSE, type, 1, &string);
+}
+
+/**
  * ARB_separate_shader_objects: Compile & Link Program
  */
 GLuint GLAPIENTRY




More information about the mesa-commit mailing list