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:
committed by
Mathias Fröhlich
parent
f60e892c50
commit
2a207c4bf9
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user