|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum { |
|
|
|
|
|
/* types */ |
|
|
|
|
|
|
|
|
enum type { |
|
|
ATTRIB_TYPE_INTEGER, |
|
|
ATTRIB_TYPE_INTEGER, |
|
|
ATTRIB_TYPE_BOOLEAN, |
|
|
ATTRIB_TYPE_BOOLEAN, |
|
|
ATTRIB_TYPE_BITMASK, |
|
|
ATTRIB_TYPE_BITMASK, |
|
|
ATTRIB_TYPE_ENUM, |
|
|
ATTRIB_TYPE_ENUM, |
|
|
ATTRIB_TYPE_PSEUDO, /* non-queryable */ |
|
|
ATTRIB_TYPE_PSEUDO, /* non-queryable */ |
|
|
ATTRIB_TYPE_PLATFORM, /* platform-dependent */ |
|
|
ATTRIB_TYPE_PLATFORM, /* platform-dependent */ |
|
|
/* criteria */ |
|
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
enum criterion { |
|
|
ATTRIB_CRITERION_EXACT, |
|
|
ATTRIB_CRITERION_EXACT, |
|
|
ATTRIB_CRITERION_ATLEAST, |
|
|
ATTRIB_CRITERION_ATLEAST, |
|
|
ATTRIB_CRITERION_MASK, |
|
|
ATTRIB_CRITERION_MASK, |
|
|
|
|
|
|
|
|
/* EGL spec Table 3.1 and 3.4 */ |
|
|
/* EGL spec Table 3.1 and 3.4 */ |
|
|
static const struct { |
|
|
static const struct { |
|
|
EGLint attr; |
|
|
EGLint attr; |
|
|
EGLint type; |
|
|
|
|
|
EGLint criterion; |
|
|
|
|
|
|
|
|
enum type type; |
|
|
|
|
|
enum criterion criterion; |
|
|
EGLint default_value; |
|
|
EGLint default_value; |
|
|
} _eglValidationTable[] = |
|
|
} _eglValidationTable[] = |
|
|
{ |
|
|
{ |
|
|
|
|
|
|
|
|
if (val != 0) |
|
|
if (val != 0) |
|
|
valid = EGL_FALSE; |
|
|
valid = EGL_FALSE; |
|
|
break; |
|
|
break; |
|
|
default: |
|
|
|
|
|
assert(0); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (!valid && for_matching) { |
|
|
if (!valid && for_matching) { |
|
|
|
|
|
|
|
|
case ATTRIB_CRITERION_SPECIAL: |
|
|
case ATTRIB_CRITERION_SPECIAL: |
|
|
/* ignored here */ |
|
|
/* ignored here */ |
|
|
break; |
|
|
break; |
|
|
default: |
|
|
|
|
|
assert(0); |
|
|
|
|
|
|
|
|
case ATTRIB_CRITERION_IGNORE: |
|
|
|
|
|
unreachable("already handled above"); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
|