6#ifndef _DVEC_H_INCLUDED
7#define _DVEC_H_INCLUDED
10#if !defined __cplusplus
11#error This file is only supported in C++ compilations!
19#pragma pack(push,_CRT_PACKING)
21#if defined(_ENABLE_VEC_DEBUG)
27#define EXPLICIT explicit
41#define _MM_16UB(element,vector) (*((unsigned char*)&##vector + ##element))
42#define _MM_16B(element,vector) (*((signed char*)&##vector + ##element))
44#define _MM_8UW(element,vector) (*((unsigned short*)&##vector + ##element))
45#define _MM_8W(element,vector) (*((short*)&##vector + ##element))
47#define _MM_4UDW(element,vector) (*((unsigned int*)&##vector + ##element))
48#define _MM_4DW(element,vector) (*((int*)&##vector + ##element))
50#define _MM_2QW(element,vector) (*((__int64*)&##vector + ##element))
54 static const __m128i mask128 =
_mm_set1_epi64(M64(0xffffffffffffffffi64));
67 operator __m128i()
const {
return vec; }
125 assert(
static_cast<unsigned int>(
i) < 2);
131 assert(
static_cast<unsigned int>(
i) < 2);
200#if defined(_ENABLE_VEC_DEBUG)
214 assert(
static_cast<unsigned int>(
i) < 4);
220 assert(
static_cast<unsigned int>(
i) < 4);
238 Iu32vec4(
unsigned int ui3,
unsigned int ui2,
unsigned int ui1,
unsigned int ui0)
264#if defined(_ENABLE_VEC_DEBUG)
278 assert(
static_cast<unsigned int>(
i) < 4);
284 assert(
static_cast<unsigned int>(
i) < 4);
332 Is16vec8(
signed short s7,
signed short s6,
signed short s5,
signed short s4,
signed short s3,
signed short s2,
signed short s1,
signed short s0)
364#if defined(_ENABLE_VEC_DEBUG)
382 assert(
static_cast<unsigned int>(
i) < 8);
388 assert(
static_cast<unsigned int>(
i) < 8);
417 Iu16vec8(
unsigned short s7,
unsigned short s6,
unsigned short s5,
unsigned short s4,
unsigned short s3,
unsigned short s2,
unsigned short s1,
unsigned short s0)
448#if defined(_ENABLE_VEC_DEBUG)
466 assert(
static_cast<unsigned int>(
i) < 8);
472 assert(
static_cast<unsigned int>(
i) < 8);
529#if defined(_ENABLE_VEC_DEBUG)
555 assert(
static_cast<unsigned int>(
i) < 16);
561 assert(
static_cast<unsigned int>(
i) < 16);
593#if defined(_ENABLE_VEC_DEBUG)
619 assert(
static_cast<unsigned int>(
i) < 16);
625 assert(
static_cast<unsigned int>(
i) < 16);
650#define IVEC128_LOGICALS(vect,element) inline I##vect##vec##element operator& (const I##vect##vec##element &a,const I##vect##vec##element &b) { return _mm_and_si128(a,b); } inline I##vect##vec##element operator| (const I##vect##vec##element &a,const I##vect##vec##element &b) { return _mm_or_si128(a,b); } inline I##vect##vec##element operator^ (const I##vect##vec##element &a,const I##vect##vec##element &b) { return _mm_xor_si128(a,b); } inline I##vect##vec##element andnot (const I##vect##vec##element &a,const I##vect##vec##element &b) { return _mm_andnot_si128(a,b); }
663#undef IVEC128_LOGICALS
665#define IVEC128_ADD_SUB(vect,element,opsize) inline I##vect##vec##element operator+ (const I##vect##vec##element &a,const I##vect##vec##element &b) { return _mm_add_##opsize(a,b); } inline I##vect##vec##element operator- (const I##vect##vec##element &a,const I##vect##vec##element &b) { return _mm_sub_##opsize(a,b); }
677#undef IVEC128_ADD_SUB
679#define IVEC128_SELECT(vect12,vect34,element,selop,arg1,arg2) inline I##vect34##vec##element select_##selop (const I##vect12##vec##element &a,const I##vect12##vec##element &b,const I##vect34##vec##element &c,const I##vect34##vec##element &d) { I##vect12##vec##element mask = cmp##selop(a,b); return(I##vect34##vec##element ((mask & arg1) | I##vect12##vec##element ((_mm_andnot_si128(mask,arg2))))); }
731 operator __m128d()
const {
return vec; }
760#define F64vec2_COMP(op) friend F64vec2 cmp##op (const F64vec2 &a,const F64vec2 &b) { return _mm_cmp##op##_pd(a,b); }
776#define F64vec2_COMI(op) friend int comi##op (const F64vec2 &a,const F64vec2 &b) { return _mm_comi##op##_sd(a,b); }
785#define F64vec2_UCOMI(op) friend int ucomi##op (const F64vec2 &a,const F64vec2 &b) { return _mm_ucomi##op##_sd(a,b); }
794#if defined(_ENABLE_VEC_DEBUG)
797 double *dp = (
double*)&
a;
798 os <<
" [1]:" << *(dp+1)
806 double *dp = (
double*)&
vec;
812 double *dp = (
double*)&
vec;
824#define F64vec2_SELECT(op) inline F64vec2 select_##op (const F64vec2 &a,const F64vec2 &b,const F64vec2 &c,const F64vec2 &d) { F64vec2 mask = _mm_cmp##op##_pd(a,b); return((mask & c) | F64vec2((_mm_andnot_pd(mask,d)))); }
basic_ostream< _CharT, _Traits > &_STLP_CALL operator<<(basic_ostream< _CharT, _Traits > &__os, const bitset< _Nb > &__x)
friend F64vec2 operator*(const F64vec2 &a, const F64vec2 &b)
F64vec2 & operator-=(F64vec2 &a)
F64vec2_COMI(eq) F64vec2_COMI(lt) F64vec2_COMI(le) F64vec2_COMI(gt) F64vec2_COMI(ge) F64vec2_COMI(neq) F64vec2_UCOMI(eq) F64vec2_UCOMI(lt) F64vec2_UCOMI(le) F64vec2_UCOMI(gt) F64vec2_UCOMI(ge) F64vec2_UCOMI(neq) const double &operator[](int i) const
EXPLICIT F64vec2(double d)
double & operator[](int i)
friend F64vec2 operator/(const F64vec2 &a, const F64vec2 &b)
friend F64vec2 operator-(const F64vec2 &a, const F64vec2 &b)
F64vec2 & operator/=(F64vec2 &a)
friend F64vec2 operator&(const F64vec2 &a, const F64vec2 &b)
friend F64vec2 simd_max(const F64vec2 &a, const F64vec2 &b)
friend F64vec2 sqrt(const F64vec2 &a)
friend double add_horizontal(F64vec2 &a)
friend F64vec2 operator+(const F64vec2 &a, const F64vec2 &b)
F64vec2 & operator^=(F64vec2 &a)
friend F64vec2 andnot(const F64vec2 &a, const F64vec2 &b)
F64vec2_COMP(eq) F64vec2_COMP(lt) F64vec2_COMP(le) F64vec2_COMP(gt) F64vec2_COMP(ge) F64vec2_COMP(ngt) F64vec2_COMP(nge) F64vec2_COMP(neq) F64vec2_COMP(nlt) F64vec2_COMP(nle) friend F64vec2 simd_min(const F64vec2 &a
F64vec2 & operator+=(F64vec2 &a)
friend F64vec2 operator|(const F64vec2 &a, const F64vec2 &b)
F64vec2 & operator|=(F64vec2 &a)
friend F64vec2 operator^(const F64vec2 &a, const F64vec2 &b)
F64vec2 & operator*=(F64vec2 &a)
F64vec2(double d1, double d0)
F64vec2 & operator&=(F64vec2 &a)
I128vec1 & operator=(const M128 &a)
I128vec1 & operator^=(const M128 &a)
I128vec1 & operator&=(const M128 &a)
I128vec1 & operator|=(const M128 &a)
I16vec8 & operator*=(const I16vec8 &a)
I16vec8 & operator=(const M128 &a)
I16vec8 operator<<(const M128 &a)
I16vec8 & operator&=(const M128 &a)
I16vec8 & operator^=(const M128 &a)
I16vec8 & operator+=(const I16vec8 &a)
I16vec8 & operator|=(const M128 &a)
I16vec8 & operator<<=(const M128 &a)
I16vec8 & operator-=(const I16vec8 &a)
I16vec8 & operator<<=(int count)
I16vec8 operator<<(int count)
I32vec4 & operator+=(const I32vec4 &a)
I32vec4 & operator=(const M128 &a)
I32vec4 & operator&=(const M128 &a)
I32vec4 & operator<<=(int count)
I32vec4 & operator<<=(const I32vec4 &a)
I32vec4 operator<<(int count)
I32vec4 & operator-=(const I32vec4 &a)
I32vec4 & operator|=(const M128 &a)
I32vec4 & operator^=(const M128 &a)
I32vec4 operator<<(const I32vec4 &a)
I64vec2 & operator+=(const I64vec2 &a)
const __int64 & operator[](int i) const
I64vec2 operator>>(const I64vec2 &a)
I64vec2 operator>>(int count)
I64vec2 & operator&=(const M128 &a)
I64vec2 & operator=(const M128 &a)
I64vec2 & operator^=(const M128 &a)
I64vec2 & operator|=(const M128 &a)
__int64 & operator[](int i)
I64vec2 & operator<<=(const I64vec2 &a)
I64vec2 & operator>>=(int count)
I64vec2 & operator>>=(const I64vec2 &a)
I64vec2 & operator-=(const I64vec2 &a)
I64vec2 operator<<(const I64vec2 &a)
I64vec2 & operator<<=(int count)
I64vec2(__m64 q1, __m64 q0)
I64vec2 operator<<(int count)
I8vec16 & operator+=(const I8vec16 &a)
I8vec16 & operator^=(const M128 &a)
I8vec16 & operator=(const M128 &a)
I8vec16 & operator|=(const M128 &a)
I8vec16 & operator&=(const M128 &a)
I8vec16 & operator-=(const I8vec16 &a)
Is16vec8 & operator*=(const I16vec8 &a)
Is16vec8(signed short s7, signed short s6, signed short s5, signed short s4, signed short s3, signed short s2, signed short s1, signed short s0)
Is16vec8 operator>>(const M128 &a)
Is16vec8 & operator>>=(const M128 &a)
const signed short & operator[](int i) const
Is16vec8 & operator<<=(const M128 &a)
Is16vec8 & operator&=(const M128 &a)
Is16vec8 & operator-=(const I16vec8 &a)
Is16vec8 & operator|=(const M128 &a)
Is16vec8 & operator>>=(int count)
Is16vec8 & operator=(const M128 &a)
signed short & operator[](int i)
Is16vec8 & operator+=(const I16vec8 &a)
Is16vec8 operator>>(int count)
Is16vec8 operator<<(int count)
Is16vec8 & operator^=(const M128 &a)
Is16vec8 & operator<<=(int count)
Is16vec8 operator<<(const M128 &a)
Is32vec4 & operator=(const M128 &a)
Is32vec4 operator>>(int count)
Is32vec4 & operator|=(const M128 &a)
Is32vec4 operator<<(int count)
Is32vec4 & operator-=(const I32vec4 &a)
Is32vec4 & operator>>=(int count)
Is32vec4 & operator>>=(const M128 &a)
Is32vec4 operator<<(const M128 &a)
Is32vec4 operator>>(const M128 &a)
Is32vec4 & operator<<=(const M128 &a)
Is32vec4 & operator<<=(int count)
Is32vec4 & operator+=(const I32vec4 &a)
Is32vec4 & operator&=(const M128 &a)
const int & operator[](int i) const
Is32vec4 & operator^=(const M128 &a)
Is32vec4(int i3, int i2, int i1, int i0)
signed char & operator[](int i)
Is8vec16 & operator&=(const M128 &a)
Is8vec16 & operator-=(const I8vec16 &a)
Is8vec16 & operator=(const M128 &a)
Is8vec16 & operator^=(const M128 &a)
Is8vec16 & operator|=(const M128 &a)
Is8vec16 & operator+=(const I8vec16 &a)
const signed char & operator[](int i) const
unsigned short & operator[](int i)
Iu16vec8 & operator&=(const M128 &a)
Iu16vec8 & operator|=(const M128 &a)
Iu16vec8 & operator<<=(int count)
Iu16vec8 & operator-=(const I16vec8 &a)
Iu16vec8 & operator^=(const M128 &a)
Iu16vec8 & operator>>=(int count)
Iu16vec8 & operator*=(const I16vec8 &a)
Iu16vec8 & operator=(const M128 &a)
Iu16vec8 & operator<<=(const M128 &a)
Iu16vec8 & operator+=(const I16vec8 &a)
Iu16vec8 operator>>(const M128 &a)
Iu16vec8 & operator>>=(const M128 &a)
const unsigned short & operator[](int i) const
Iu16vec8 operator>>(int count)
Iu16vec8 operator<<(const M128 &a)
Iu16vec8(unsigned short s7, unsigned short s6, unsigned short s5, unsigned short s4, unsigned short s3, unsigned short s2, unsigned short s1, unsigned short s0)
Iu16vec8 operator<<(int count)
Iu32vec4 & operator-=(const I32vec4 &a)
Iu32vec4 & operator=(const M128 &a)
Iu32vec4 & operator<<=(int count)
Iu32vec4(unsigned int ui3, unsigned int ui2, unsigned int ui1, unsigned int ui0)
Iu32vec4 & operator>>=(int count)
Iu32vec4 & operator^=(const M128 &a)
Iu32vec4 & operator&=(const M128 &a)
Iu32vec4 & operator+=(const I32vec4 &a)
Iu32vec4 operator<<(int count)
Iu32vec4 operator<<(const M128 &a)
Iu32vec4 & operator<<=(const M128 &a)
unsigned int & operator[](int i)
Iu32vec4 & operator|=(const M128 &a)
Iu32vec4 operator>>(int count)
Iu32vec4 & operator>>=(const M128 &a)
Iu32vec4 operator>>(const M128 &a)
const unsigned int & operator[](int i) const
Iu8vec16 & operator^=(const M128 &a)
const unsigned char & operator[](int i) const
Iu8vec16 & operator+=(const I8vec16 &a)
unsigned char & operator[](int i)
Iu8vec16 & operator&=(const M128 &a)
Iu8vec16 & operator=(const M128 &a)
Iu8vec16 & operator|=(const M128 &a)
Iu8vec16 & operator-=(const I8vec16 &a)
M128 & operator|=(const M128 &a)
M128 & operator^=(const M128 &a)
M128 & operator&=(const M128 &a)
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Is16vec8 pack_sat(const Is32vec4 &a, const Is32vec4 &b)
I64vec2 sum_abs(const Iu8vec16 &a, const Iu8vec16 &b)
#define _MM_8UW(element, vector)
Is32vec4 mul_add(const Is16vec8 &a, const Is16vec8 &b)
#define F64vec2_UCOMI(op)
Is32vec4 cmpgt(const Is32vec4 &a, const Is32vec4 &b)
I32vec4 cmpeq(const I32vec4 &a, const I32vec4 &b)
#define _MM_4DW(element, vector)
#define _MM_2QW(element, vector)
F64vec2 IntToF64vec2(const F64vec2 &a, int b)
#define _MM_8W(element, vector)
M128 andnot(const M128 &a, const M128 &b)
I32vec4 cmpneq(const I32vec4 &a, const I32vec4 &b)
void loadu(F64vec2 &a, double *p)
#define IVEC128_ADD_SUB(vect, element, opsize)
Is16vec8 simd_max(const Is16vec8 &a, const Is16vec8 &b)
#define F64vec2_SELECT(op)
M128 operator&(const M128 &a, const M128 &b)
I64vec2 unpack_low(const I64vec2 &a, const I64vec2 &b)
Is32vec4 cmplt(const Is32vec4 &a, const Is32vec4 &b)
I64vec2 unpack_high(const I64vec2 &a, const I64vec2 &b)
F64vec2 F32vec4ToF64vec2(const F32vec4 &a)
I64vec2 operator*(const Iu32vec4 &a, const Iu32vec4 &b)
Iu16vec8 simd_avg(const Iu16vec8 &a, const Iu16vec8 &b)
#define _MM_4UDW(element, vector)
Is16vec8 mul_high(const Is16vec8 &a, const Is16vec8 &b)
#define _MM_16UB(element, vector)
M128 operator^(const M128 &a, const M128 &b)
M128 operator|(const M128 &a, const M128 &b)
F32vec4 F64vec2ToF32vec4(const F64vec2 &a)
void storeu(double *p, const F64vec2 &a)
Iu8vec16 packu_sat(const Is16vec8 &a, const Is16vec8 &b)
#define IVEC128_LOGICALS(vect, element)
Is16vec8 sat_sub(const Is16vec8 &a, const Is16vec8 &b)
Is16vec8 simd_min(const Is16vec8 &a, const Is16vec8 &b)
const __m128i get_mask128()
#define _MM_16B(element, vector)
void store_nta(double *p, F64vec2 &a)
#define IVEC128_SELECT(vect12, vect34, element, selop, arg1, arg2)
int move_mask(const F64vec2 &a)
Is16vec8 sat_add(const Is16vec8 &a, const Is16vec8 &b)
__m128 _mm_cvtpd_ps(__m128d a)
void _mm_storeu_pd(double *dp, __m128d a)
__m128d _mm_add_sd(__m128d a, __m128d b)
__m128i _mm_cmpgt_epi8(__m128i a, __m128i b)
__m128i _mm_adds_epu16(__m128i a, __m128i b)
__m128i _mm_slli_epi64(__m128i a, int count)
__m128i _mm_srl_epi64(__m128i a, __m128i count)
__m128d _mm_add_pd(__m128d a, __m128d b)
__m128i _mm_xor_si128(__m128i a, __m128i b)
__m128i _mm_srli_epi64(__m128i a, int count)
__m128i _mm_set1_epi64(__m64 q)
__m128i _mm_packs_epi32(__m128i a, __m128i b)
__m128i _mm_sad_epu8(__m128i a, __m128i b)
__m128i _mm_packus_epi16(__m128i a, __m128i b)
__m128i _mm_adds_epu8(__m128i a, __m128i b)
__m128i _mm_sub_epi32(__m128i a, __m128i b)
__m128i _mm_add_epi16(__m128i a, __m128i b)
__m128i _mm_mulhi_epu16(__m128i a, __m128i b)
__m128i _mm_slli_epi32(__m128i a, int count)
__m128d _mm_and_pd(__m128d a, __m128d b)
__m128i _mm_mul_epu32(__m128i a, __m128i b)
__m128d _mm_sub_pd(__m128d a, __m128d b)
__m128i _mm_cmpeq_epi8(__m128i a, __m128i b)
__m128d _mm_min_pd(__m128d a, __m128d b)
__m128i _mm_sll_epi32(__m128i a, __m128i count)
__m128i _mm_unpackhi_epi16(__m128i a, __m128i b)
__m128i _mm_subs_epu8(__m128i a, __m128i b)
__m128i _mm_srl_epi32(__m128i a, __m128i count)
__m128i _mm_mulhi_epi16(__m128i a, __m128i b)
#define _mm_shuffle_pd(a, b, i)
__m128d _mm_or_pd(__m128d a, __m128d b)
__m128i _mm_cmpeq_epi16(__m128i a, __m128i b)
__m128i _mm_sra_epi32(__m128i a, __m128i count)
__m128i _mm_srai_epi32(__m128i a, int count)
__m128i _mm_slli_epi16(__m128i a, int count)
__m128i _mm_subs_epi8(__m128i a, __m128i b)
int _mm_movemask_pd(__m128d a)
__m128i _mm_sub_epi64(__m128i a, __m128i b)
__m128i _mm_min_epu8(__m128i a, __m128i b)
__m128d _mm_unpackhi_pd(__m128d a, __m128d b)
int _mm_cvttsd_si32(__m128d a)
__m128i _mm_unpackhi_epi32(__m128i a, __m128i b)
__m128i _mm_add_epi8(__m128i a, __m128i b)
__m128d _mm_loadu_pd(double const *dp)
__m128i _mm_avg_epu16(__m128i a, __m128i b)
__m128i _mm_sll_epi64(__m128i a, __m128i count)
__m128d _mm_cvtsi32_sd(__m128d a, int b)
__m128i _mm_or_si128(__m128i a, __m128i b)
__m128i _mm_subs_epi16(__m128i a, __m128i b)
__m128i _mm_packs_epi16(__m128i a, __m128i b)
__m128i _mm_srli_epi16(__m128i a, int count)
__m128i _mm_sub_epi8(__m128i a, __m128i b)
__m128d _mm_mul_pd(__m128d a, __m128d b)
__m128i _mm_sll_epi16(__m128i a, __m128i count)
__m128d _mm_sqrt_pd(__m128d a)
__m128i _mm_mullo_epi16(__m128i a, __m128i b)
__m128i _mm_sra_epi16(__m128i a, __m128i count)
__m128i _mm_madd_epi16(__m128i a, __m128i b)
__m128i _mm_cmpeq_epi32(__m128i a, __m128i b)
__m128i _mm_srai_epi16(__m128i a, int count)
__m128i _mm_unpackhi_epi8(__m128i a, __m128i b)
__m128d _mm_andnot_pd(__m128d a, __m128d b)
__m128i _mm_min_epi16(__m128i a, __m128i b)
__m128i _mm_andnot_si128(__m128i a, __m128i b)
__m128i _mm_and_si128(__m128i a, __m128i b)
void _mm_stream_pd(double *p, __m128d a)
__m128i _mm_avg_epu8(__m128i a, __m128i b)
__m128i _mm_adds_epi16(__m128i a, __m128i b)
__m128i _mm_unpackhi_epi64(__m128i a, __m128i b)
__m128i _mm_adds_epi8(__m128i a, __m128i b)
__m128i _mm_unpacklo_epi16(__m128i a, __m128i b)
__m128i _mm_cmplt_epi8(__m128i a, __m128i b)
__m128i _mm_max_epi16(__m128i a, __m128i b)
__m128i _mm_unpacklo_epi8(__m128i a, __m128i b)
__m128d _mm_xor_pd(__m128d a, __m128d b)
__m128d _mm_cvtps_pd(__m128 a)
__m128d _mm_set_pd(double w, double x)
__m128i _mm_srli_epi32(__m128i a, int count)
__m128i _mm_cmpgt_epi16(__m128i a, __m128i b)
__m128i _mm_add_epi32(__m128i a, __m128i b)
__m128i _mm_sub_epi16(__m128i a, __m128i b)
__m128i _mm_add_epi64(__m128i a, __m128i b)
__m128i _mm_cmpgt_epi32(__m128i a, __m128i b)
__m128d _mm_set1_pd(double w)
__m128i _mm_unpacklo_epi32(__m128i a, __m128i b)
__m128d _mm_div_pd(__m128d a, __m128d b)
__m128i _mm_srl_epi16(__m128i a, __m128i count)
__m128d _mm_max_pd(__m128d a, __m128d b)
__m128d _mm_unpacklo_pd(__m128d a, __m128d b)
__m128i _mm_subs_epu16(__m128i a, __m128i b)
__m128i _mm_unpacklo_epi64(__m128i a, __m128i b)
__m128i _mm_max_epu8(__m128i a, __m128i b)
GLuint GLuint GLsizei count
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define eq(received, expected, label, type)