mesa: Introduce enabled bitfield helper functions.
authorMathias Froehlich <Mathias.Froehlich@web.de>
Thu, 29 Dec 2011 12:10:00 +0000 (13:10 +0100)
committerMathias Fröhlich <Mathias.Froehlich@gmx.net>
Fri, 20 Jan 2012 06:24:11 +0000 (07:24 +0100)
Depending on the installed shader type, different arrays are used
from gl_array_object. Provide helper functions that compute
the bitmask of these arrays that are finally enabled for a given
shader type. The will be used in a followup change.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/main/arrayobj.h
src/mesa/main/mtypes.h

index 0b5a01303701c87334d719383b86e33c8b2ed3d6..717c7916e3a0515e42ce54244f17bcc9062c92c3 100644 (file)
@@ -29,6 +29,7 @@
 #define ARRAYOBJ_H
 
 #include "glheader.h"
+#include "mtypes.h"
 
 struct gl_context;
 
@@ -64,6 +65,42 @@ extern void
 _mesa_update_array_object_max_element(struct gl_context *ctx,
                                       struct gl_array_object *arrayObj);
 
+/** Returns the bitmask of all enabled arrays in fixed function mode.
+ *
+ *  In fixed function mode only the traditional fixed function arrays
+ *  are available.
+ */
+static inline GLbitfield64
+_mesa_array_object_get_enabled_ff(const struct gl_array_object *arrayObj)
+{
+   return arrayObj->_Enabled & VERT_BIT_FF_ALL;
+}
+
+/** Returns the bitmask of all enabled arrays in nv shader mode.
+ *
+ *  In nv shader mode, the nv generic arrays take precedence over
+ *  the legacy arrays.
+ */
+static inline GLbitfield64
+_mesa_array_object_get_enabled_nv(const struct gl_array_object *arrayObj)
+{
+   GLbitfield64 enabled = arrayObj->_Enabled;
+   return enabled & ~(VERT_BIT_FF_NVALIAS & (enabled >> VERT_ATTRIB_GENERIC0));
+}
+
+/** Returns the bitmask of all enabled arrays in arb/glsl shader mode.
+ *
+ *  In arb/glsl shader mode all the fixed function and the arb/glsl generic
+ *  arrays are available. Only the first generic array takes
+ *  precedence over the legacy position array.
+ */
+static inline GLbitfield64
+_mesa_array_object_get_enabled_arb(const struct gl_array_object *arrayObj)
+{
+   GLbitfield64 enabled = arrayObj->_Enabled;
+   return enabled & ~(VERT_BIT_POS & (enabled >> VERT_ATTRIB_GENERIC0));
+}
+
 
 /*
  * API functions
index b381ad2821881b944ceb12a1a933993582963980..f8ef01d4e0af6c77f382e1c51690b0c899858259 100644 (file)
@@ -206,9 +206,13 @@ typedef enum
 #define VERT_BIT_TEX(i)          VERT_BIT(VERT_ATTRIB_TEX(i))
 #define VERT_BIT_TEX_ALL         \
    BITFIELD64_RANGE(VERT_ATTRIB_TEX(0), VERT_ATTRIB_TEX_MAX)
+#define VERT_BIT_FF_NVALIAS      \
+   BITFIELD64_RANGE(VERT_ATTRIB_POS, VERT_ATTRIB_TEX(VERT_ATTRIB_TEX_MAX))
+
 #define VERT_BIT_GENERIC_NV(i)   VERT_BIT(VERT_ATTRIB_GENERIC_NV(i))
 #define VERT_BIT_GENERIC_NV_ALL  \
    BITFIELD64_RANGE(VERT_ATTRIB_GENERIC_NV(0), VERT_ATTRIB_GENERIC_NV_MAX)
+
 #define VERT_BIT_GENERIC(i)      VERT_BIT(VERT_ATTRIB_GENERIC(i))
 #define VERT_BIT_GENERIC_ALL     \
    BITFIELD64_RANGE(VERT_ATTRIB_GENERIC(0), VERT_ATTRIB_GENERIC_MAX)