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 <Mathias.Froehlich@web.de>
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Mathias Froehlich
2011-12-29 13:10:00 +01:00
committed by Mathias Fröhlich
parent f60e892c50
commit 2a207c4bf9
2 changed files with 41 additions and 0 deletions
+37
View 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
+4
View 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)