[Mesa-dev] [PATCH 07/12] sso: update meta state

2013-04-12 Thread gregory
V2: formatting improvement

save and restore _Shader/Pipeline binding point. Rational we don't want any 
conflict
when the program will be unattached.
---
 src/mesa/drivers/common/meta.c |   28 +---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index 927573d..01a63bd 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -51,6 +51,7 @@
 #include main/macros.h
 #include main/matrix.h
 #include main/mipmap.h
+#include main/pipelineobj.h
 #include main/pixel.h
 #include main/pbo.h
 #include main/polygon.h
@@ -142,6 +143,8 @@ struct save_state
struct gl_shader_program *GeometryShader;
struct gl_shader_program *FragmentShader;
struct gl_shader_program *ActiveShader;
+   struct gl_pipeline_object   *_Shader;
+   struct gl_pipeline_object   *Pipeline;
 
/** MESA_META_STENCIL_TEST */
struct gl_stencil_attrib Stencil;
@@ -615,6 +618,14 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)
  _mesa_set_enable(ctx, GL_FRAGMENT_SHADER_ATI, GL_FALSE);
   }
 
+  if (ctx-Extensions.ARB_separate_shader_objects) {
+ /* Warning it must be done before _mesa_UseProgram call */
+ _mesa_reference_pipeline_object(ctx, save-_Shader, ctx-_Shader);
+ _mesa_reference_pipeline_object(ctx, save-Pipeline,
+ ctx-Pipeline.Current);
+ _mesa_BindProgramPipeline(0);
+  }
+
   if (ctx-Extensions.ARB_shader_objects) {
 _mesa_reference_shader_program(ctx, save-VertexShader,
ctx-_Shader-CurrentVertexProgram);
@@ -954,16 +965,26 @@ _mesa_meta_end(struct gl_context *ctx)
   save-ATIFragmentShaderEnabled);
   }
 
+  /* Warning it must be done before _mesa_use_shader_program call */
+  if (ctx-Extensions.ARB_separate_shader_objects) {
+ _mesa_reference_pipeline_object(ctx, ctx-_Shader, save-_Shader);
+ _mesa_reference_pipeline_object(ctx, ctx-Pipeline.Current,
+ save-Pipeline);
+ _mesa_reference_pipeline_object(ctx, save-Pipeline, NULL);
+  }
+
   if (ctx-Extensions.ARB_vertex_shader)
-_mesa_use_shader_program(ctx, GL_VERTEX_SHADER, save-VertexShader);
+_mesa_use_shader_program(ctx, GL_VERTEX_SHADER, save-VertexShader,
+  ctx-_Shader);
 
   if (ctx-Extensions.ARB_geometry_shader4)
 _mesa_use_shader_program(ctx, GL_GEOMETRY_SHADER_ARB,
- save-GeometryShader);
+ save-GeometryShader, ctx-_Shader);
 
   if (ctx-Extensions.ARB_fragment_shader)
 _mesa_use_shader_program(ctx, GL_FRAGMENT_SHADER,
- save-FragmentShader);
+ save-FragmentShader, ctx-_Shader);
+
 
   _mesa_reference_shader_program(ctx, ctx-_Shader-ActiveProgram,
 save-ActiveShader);
@@ -972,6 +993,7 @@ _mesa_meta_end(struct gl_context *ctx)
   _mesa_reference_shader_program(ctx, save-GeometryShader, NULL);
   _mesa_reference_shader_program(ctx, save-FragmentShader, NULL);
   _mesa_reference_shader_program(ctx, save-ActiveShader, NULL);
+  _mesa_reference_pipeline_object(ctx, save-_Shader, NULL);
}
 
if (state  MESA_META_STENCIL_TEST) {
-- 
1.7.10.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 07/12] sso: update meta state

2013-04-05 Thread gregory
save and restore _Shader/Pipeline binding point. Rational we don't want any 
conflict
when the program will be unattached.
---
 src/mesa/drivers/common/meta.c |   25 ++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index 139e240..62f6ffa 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -51,6 +51,7 @@
 #include main/macros.h
 #include main/matrix.h
 #include main/mipmap.h
+#include main/pipelineobj.h
 #include main/pixel.h
 #include main/pbo.h
 #include main/polygon.h
@@ -142,6 +143,8 @@ struct save_state
struct gl_shader_program *GeometryShader;
struct gl_shader_program *FragmentShader;
struct gl_shader_program *ActiveShader;
+   struct gl_shader_state   *_Shader;
+   struct gl_shader_state   *Pipeline;
 
/** MESA_META_STENCIL_TEST */
struct gl_stencil_attrib Stencil;
@@ -615,6 +618,13 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)
  _mesa_set_enable(ctx, GL_FRAGMENT_SHADER_ATI, GL_FALSE);
   }
 
+  if (ctx-Extensions.ARB_separate_shader_objects) {
+ /* Warning it must be done before _mesa_UseProgram call */
+ _mesa_reference_pipeline_object(ctx, save-_Shader, ctx-_Shader);
+ _mesa_reference_pipeline_object(ctx, save-Pipeline, 
ctx-Pipeline.PipelineObj);
+ _mesa_BindProgramPipeline(0);
+  }
+
   if (ctx-Extensions.ARB_shader_objects) {
 _mesa_reference_shader_program(ctx, save-VertexShader,
ctx-_Shader-CurrentVertexProgram);
@@ -952,16 +962,24 @@ _mesa_meta_end(struct gl_context *ctx)
   save-ATIFragmentShaderEnabled);
   }
 
+  /* Warning it must be done before _mesa_use_shader_program call */
+  if (ctx-Extensions.ARB_separate_shader_objects) {
+ _mesa_reference_pipeline_object(ctx, ctx-_Shader, save-_Shader);
+ _mesa_reference_pipeline_object(ctx, ctx-Pipeline.PipelineObj, 
save-Pipeline);
+ _mesa_reference_pipeline_object(ctx, save-Pipeline, NULL);
+  }
+
   if (ctx-Extensions.ARB_vertex_shader)
-_mesa_use_shader_program(ctx, GL_VERTEX_SHADER, save-VertexShader);
+_mesa_use_shader_program(ctx, GL_VERTEX_SHADER, save-VertexShader, 
ctx-_Shader);
 
   if (ctx-Extensions.ARB_geometry_shader4)
 _mesa_use_shader_program(ctx, GL_GEOMETRY_SHADER_ARB,
- save-GeometryShader);
+ save-GeometryShader, ctx-_Shader);
 
   if (ctx-Extensions.ARB_fragment_shader)
 _mesa_use_shader_program(ctx, GL_FRAGMENT_SHADER,
- save-FragmentShader);
+ save-FragmentShader, ctx-_Shader);
+
 
   _mesa_reference_shader_program(ctx, ctx-_Shader-ActiveProgram,
 save-ActiveShader);
@@ -970,6 +988,7 @@ _mesa_meta_end(struct gl_context *ctx)
   _mesa_reference_shader_program(ctx, save-GeometryShader, NULL);
   _mesa_reference_shader_program(ctx, save-FragmentShader, NULL);
   _mesa_reference_shader_program(ctx, save-ActiveShader, NULL);
+  _mesa_reference_pipeline_object(ctx, save-_Shader, NULL);
}
 
if (state  MESA_META_STENCIL_TEST) {
-- 
1.7.10.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev