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