From: Mathias Froehlich Date: Thu, 29 Dec 2011 12:10:00 +0000 (+0100) Subject: mesa: Introduce enabled bitfield helper functions. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2a207c4bf95312b68093280b97229cc4316f5724;p=mesa.git mesa: Introduce enabled bitfield helper functions. 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 Reviewed-by: Brian Paul --- diff --git a/src/mesa/main/arrayobj.h b/src/mesa/main/arrayobj.h index 0b5a0130370..717c7916e3a 100644 --- a/src/mesa/main/arrayobj.h +++ b/src/mesa/main/arrayobj.h @@ -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 diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index b381ad28218..f8ef01d4e0a 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -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)