mesa: add PIPE_SHADER_* like constants and conversions to/from enums (v2)
authorLuca Barbieri <luca@luca-barbieri.com>
Sun, 5 Sep 2010 22:56:07 +0000 (00:56 +0200)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 9 Sep 2010 03:36:37 +0000 (20:36 -0700)
Changes in v2:
- No longer adds tessellation enums

src/mesa/main/mtypes.h
src/mesa/main/shaderobj.h
src/mesa/program/program.h

index 40f12eb20dd64beb16fe5a59891b5796e9065053..7d5ce7040b22015889b1707925bd2ce3810fa5bf 100644 (file)
 #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
index 48000463752b8d8bf2c8787d7e8dcca793d41dd2..cbe7ae7b06853150f044bbeb522d3cfff060a98b 100644 (file)
@@ -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
index 286573de1fbfe72e707cc8ef567c55e3bfaa6999..f8f3798086344958e2777e150aa496aef6df43ea 100644 (file)
@@ -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 */