Mesa (master): mesa: add PIPE_SHADER_* like constants and conversions to/ from enums (v2)

Ian Romanick idr at kemper.freedesktop.org
Thu Sep 9 03:57:35 UTC 2010


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

Author: Luca Barbieri <luca at luca-barbieri.com>
Date:   Mon Sep  6 00:56:07 2010 +0200

mesa: add PIPE_SHADER_* like constants and conversions to/from enums (v2)

Changes in v2:
- No longer adds tessellation enums

---

 src/mesa/main/mtypes.h     |    9 +++++++++
 src/mesa/main/shaderobj.h  |   31 +++++++++++++++++++++++++++++++
 src/mesa/program/program.h |   32 ++++++++++++++++++++++++++++++++
 3 files changed, 72 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 40f12eb..7d5ce70 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -41,6 +41,15 @@
 #include "math/m_matrix.h"	/* GLmatrix */
 #include "main/simple_list.h"	/* struct simple_node */
 
+/* Shader stages. Note that these will become 5 with tessellation.
+ * These MUST have the same values as PIPE_SHADER_*
+ */
+#define MESA_SHADER_VERTEX   0
+#define MESA_SHADER_FRAGMENT 1
+#define MESA_SHADER_GEOMETRY 2
+#define MESA_SHADER_TYPES    3
+
+
 /**
  * Internal token
  *  Must be simply different than GL_VERTEX_PROGRAM
diff --git a/src/mesa/main/shaderobj.h b/src/mesa/main/shaderobj.h
index 4800046..cbe7ae7 100644
--- a/src/mesa/main/shaderobj.h
+++ b/src/mesa/main/shaderobj.h
@@ -96,6 +96,37 @@ _mesa_init_shader_state(GLcontext *ctx);
 extern void
 _mesa_free_shader_state(GLcontext *ctx);
 
+static INLINE GLuint
+_mesa_shader_type_to_index(GLenum v)
+{
+   switch(v)
+   {
+   case GL_VERTEX_SHADER:
+      return MESA_SHADER_VERTEX;
+   case GL_FRAGMENT_SHADER:
+      return MESA_SHADER_FRAGMENT;
+   case GL_GEOMETRY_SHADER:
+      return MESA_SHADER_GEOMETRY;
+   default:
+      ASSERT(0);
+      return ~0;
+   }
+}
+
+static INLINE GLenum
+_mesa_shader_index_to_type(GLuint i)
+{
+   GLenum enums[MESA_SHADER_TYPES] = {
+         GL_VERTEX_SHADER,
+         GL_FRAGMENT_SHADER,
+         GL_GEOMETRY_SHADER ,
+   };
+   if(i >= MESA_SHADER_TYPES)
+      return 0;
+   else
+      return enums[i];
+}
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/mesa/program/program.h b/src/mesa/program/program.h
index 286573d..f8f3798 100644
--- a/src/mesa/program/program.h
+++ b/src/mesa/program/program.h
@@ -167,5 +167,37 @@ _mesa_find_free_register(const GLboolean used[],
 extern void
 _mesa_postprocess_program(GLcontext *ctx, struct gl_program *prog);
 
+/* keep these in the same order as TGSI_PROCESSOR_* */
+
+static INLINE GLuint
+_mesa_program_target_to_index(GLenum v)
+{
+   switch(v)
+   {
+   case GL_VERTEX_PROGRAM_ARB:
+      return MESA_SHADER_VERTEX;
+   case GL_FRAGMENT_PROGRAM_ARB:
+      return MESA_SHADER_FRAGMENT;
+   case GL_GEOMETRY_PROGRAM_NV:
+      return MESA_SHADER_GEOMETRY;
+   default:
+      ASSERT(0);
+      return ~0;
+   }
+}
+
+static INLINE GLenum
+_mesa_program_index_to_target(GLuint i)
+{
+   GLenum enums[MESA_SHADER_TYPES] = {
+         GL_VERTEX_PROGRAM_ARB,
+         GL_FRAGMENT_PROGRAM_ARB,
+         GL_GEOMETRY_PROGRAM_NV,
+   };
+   if(i >= MESA_SHADER_TYPES)
+      return 0;
+   else
+      return enums[i];
+}
 
 #endif /* PROGRAM_H */




More information about the mesa-commit mailing list