mesa: add KHR_no_error support for glBindProgramPipeline()
authorTimothy Arceri <tarceri@itsqueeze.com>
Wed, 3 May 2017 05:34:52 +0000 (15:34 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Thu, 11 May 2017 00:56:08 +0000 (10:56 +1000)
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mapi/glapi/gen/ARB_separate_shader_objects.xml
src/mesa/main/pipelineobj.c
src/mesa/main/pipelineobj.h

index c3385e9370c858746e336d152ae5522722544562..54c1be3fe73b285d4b817950bf6507ba80efdd6a 100644 (file)
@@ -30,7 +30,7 @@
          <param name="strings" type="const GLchar * const *" />
          <return type="GLuint"/>
       </function>
-      <function name="BindProgramPipeline" es2="3.1">
+      <function name="BindProgramPipeline" es2="3.1" no_error="true">
          <param name="pipeline" type="GLuint" />
       </function>
       <function name="DeleteProgramPipelines" es2="3.1">
index 993fc0a0b1707a3a7689f99faeb2592d5b6997f2..f7c911f2e4467ad2c7a3ff466fabf11f45ef1191 100644 (file)
@@ -431,6 +431,32 @@ _mesa_ActiveShaderProgram(GLuint pipeline, GLuint program)
    _mesa_reference_shader_program(ctx, &pipe->ActiveProgram, shProg);
 }
 
+void GLAPIENTRY
+_mesa_BindProgramPipeline_no_error(GLuint pipeline)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   struct gl_pipeline_object *newObj = NULL;
+
+   /* Rebinding the same pipeline object: no change.
+    */
+   if (ctx->_Shader->Name == pipeline)
+      return;
+
+   /* Get pointer to new pipeline object (newObj)
+    */
+   if (pipeline) {
+      /* non-default pipeline object */
+      newObj = _mesa_lookup_pipeline_object(ctx, pipeline);
+
+      /* Object is created by any Pipeline call but glGenProgramPipelines,
+       * glIsProgramPipeline and GetProgramPipelineInfoLog
+       */
+      newObj->EverBound = GL_TRUE;
+   }
+
+   _mesa_bind_pipeline(ctx, newObj);
+}
+
 /**
  * Make program of the pipeline current
  */
index 54aa40959edc3e56ec2488ffc20107dec07f10d4..1bf6b713169ebf9d650288649872ad51351145e2 100644 (file)
@@ -82,6 +82,8 @@ _mesa_ActiveShaderProgram_no_error(GLuint pipeline, GLuint program);
 extern void GLAPIENTRY
 _mesa_ActiveShaderProgram(GLuint pipeline, GLuint program);
 
+void GLAPIENTRY
+_mesa_BindProgramPipeline_no_error(GLuint pipeline);
 extern void GLAPIENTRY
 _mesa_BindProgramPipeline(GLuint pipeline);