modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/pr34091.c (about) 1 typedef unsigned int GLenum; 2 typedef unsigned char GLboolean; 3 typedef int GLint; 4 typedef unsigned short GLushort; 5 typedef unsigned int GLuint; 6 typedef float GLfloat; 7 typedef GLushort GLchan; 8 struct gl_texture_image; 9 typedef struct __GLcontextRec GLcontext; 10 typedef void (*FetchTexelFuncC) (const struct gl_texture_image * texImage, 11 GLint col, GLint row, GLint img, 12 GLchan * texelOut); 13 struct gl_texture_format 14 { 15 }; 16 struct gl_texture_image 17 { 18 GLenum _BaseFormat; 19 GLboolean _IsPowerOfTwo; 20 FetchTexelFuncC FetchTexelc; 21 }; 22 struct gl_texture_object 23 { 24 GLenum Target; 25 GLenum WrapS; 26 GLenum MinFilter; 27 GLenum MagFilter; 28 GLint BaseLevel; 29 GLint _MaxLevel; 30 struct gl_texture_image *Image[6][12]; 31 }; 32 enum _format 33 { 34 MESA_FORMAT_RGBA_DXT3, MESA_FORMAT_RGBA_DXT5, MESA_FORMAT_RGBA, 35 MESA_FORMAT_RGB, MESA_FORMAT_ALPHA, MESA_FORMAT_LUMINANCE, 36 }; 37 typedef void (*texture_sample_func) (GLcontext * ctx, 38 const struct gl_texture_object * tObj, 39 GLuint n, const GLfloat texcoords[][4], 40 const GLfloat lambda[], 41 GLchan rgba[][4]); 42 lerp_2d (GLfloat a, GLfloat b, GLfloat v00, GLfloat v10, GLfloat v01, 43 GLfloat v11) 44 { 45 const GLfloat temp0 = ((v00) + (a) * ((v10) - (v00))); 46 const GLfloat temp1 = ((v01) + (a) * ((v11) - (v01))); 47 return ((temp0) + (b) * ((temp1) - (temp0))); 48 } 49 static __inline__ void 50 lerp_rgba (GLchan result[4], GLfloat t, const GLchan a[4], const GLchan b[4]) 51 { 52 result[0] = (GLchan) (((a[0]) + (t) * ((b[0]) - (a[0]))) + 0.5); 53 result[1] = (GLchan) (((a[1]) + (t) * ((b[1]) - (a[1]))) + 0.5); 54 result[2] = (GLchan) (((a[2]) + (t) * ((b[2]) - (a[2]))) + 0.5); 55 } 56 static __inline__ void 57 lerp_rgba_2d (GLchan result[4], GLfloat a, GLfloat b, const GLchan t00[4], 58 const GLchan t10[4], const GLchan t01[4], const GLchan t11[4]) 59 { 60 result[0] = (GLchan) (lerp_2d (a, b, t00[0], t10[0], t01[0], t11[0]) + 0.5); 61 result[1] = (GLchan) (lerp_2d (a, b, t00[1], t10[1], t01[1], t11[1]) + 0.5); 62 result[2] = (GLchan) (lerp_2d (a, b, t00[2], t10[2], t01[2], t11[2]) + 0.5); 63 } 64 static __inline__ void 65 sample_2d_linear_repeat (GLcontext * ctx, 66 const struct gl_texture_object *tObj, 67 const struct gl_texture_image *img, 68 const GLfloat texcoord[4], GLchan rgba[]) 69 { 70 GLint i0, j0, i1, j1; 71 GLfloat a, b; 72 GLchan t00[4], t10[4], t01[4], t11[4]; 73 { 74 }; 75 img->FetchTexelc (img, i1, j1, 0, t11); 76 lerp_rgba_2d (rgba, a, b, t00, t10, t01, t11); 77 } 78 sample_2d_nearest_mipmap_linear (GLcontext * ctx, 79 const struct gl_texture_object *tObj, 80 GLuint n, const GLfloat texcoord[][4], 81 const GLfloat lambda[], GLchan rgba[][4]) 82 { 83 GLuint i; 84 GLint level = linear_mipmap_level (tObj, lambda[i]); 85 sample_2d_nearest (ctx, tObj, tObj->Image[0][tObj->_MaxLevel], texcoord[i], rgba[i]); 86 GLchan t0[4], t1[4]; 87 sample_2d_nearest (ctx, tObj, tObj->Image[0][level], texcoord[i], t0); 88 sample_2d_nearest (ctx, tObj, tObj->Image[0][level + 1], texcoord[i], t1); 89 } 90 static void 91 sample_2d_linear_mipmap_linear_repeat (GLcontext * ctx, 92 const struct gl_texture_object *tObj, 93 GLuint n, const GLfloat texcoord[][4], 94 const GLfloat lambda[], 95 GLchan rgba[][4]) 96 { 97 GLuint i; 98 for (i = 0; i < n; i++) 99 { 100 GLint level = linear_mipmap_level (tObj, lambda[i]); 101 if (level >= tObj->_MaxLevel) 102 { 103 GLchan t0[4], t1[4]; 104 const GLfloat f = ((lambda[i]) - ifloor (lambda[i])); 105 sample_2d_linear_repeat (ctx, tObj, tObj->Image[0][level], 106 texcoord[i], t0); 107 sample_2d_linear_repeat (ctx, tObj, tObj->Image[0][level + 1], 108 texcoord[i], t1); 109 lerp_rgba (rgba[i], f, t0, t1); 110 } 111 } 112 } 113 static void 114 sample_lambda_2d (GLcontext * ctx, const struct gl_texture_object *tObj, 115 GLuint n, const GLfloat texcoords[][4], 116 const GLfloat lambda[], GLchan rgba[][4]) 117 { 118 const struct gl_texture_image *tImg = tObj->Image[0][tObj->BaseLevel]; 119 GLuint minStart, minEnd; 120 GLuint magStart, magEnd; 121 const GLboolean repeatNoBorderPOT = (tObj->WrapS == 0x2901) 122 && (tImg->_BaseFormat != 0x1900) && tImg->_IsPowerOfTwo; 123 compute_min_mag_ranges (tObj, n, lambda, &minStart, &minEnd, &magStart, 124 &magEnd); 125 if (minStart < minEnd) 126 { 127 const GLuint m = minEnd - minStart; 128 switch (tObj->MinFilter) 129 { 130 case 0x2600: 131 if (repeatNoBorderPOT) 132 { 133 case MESA_FORMAT_RGB: 134 opt_sample_rgb_2d (ctx, tObj, m, texcoords + minStart, 135 ((void *) 0), rgba + minStart); 136 case MESA_FORMAT_RGBA: 137 opt_sample_rgba_2d (ctx, tObj, m, texcoords + minStart, 138 ((void *) 0), rgba + minStart); 139 } 140 { 141 sample_nearest_2d (ctx, tObj, m, texcoords + minStart, 142 ((void *) 0), rgba + minStart); 143 } 144 break; 145 sample_2d_nearest_mipmap_linear (ctx, tObj, m, texcoords + minStart, 146 lambda + minStart, 147 rgba + minStart); 148 case 0x2703: 149 if (repeatNoBorderPOT) 150 sample_2d_linear_mipmap_linear_repeat (ctx, tObj, m, 151 texcoords + minStart, 152 lambda + minStart, 153 rgba + minStart); 154 } 155 switch (tObj->MagFilter) 156 { 157 case MESA_FORMAT_RGB: 158 opt_sample_rgb_2d (ctx, tObj, m, texcoords + magStart, 159 ((void *) 0), rgba + magStart); 160 opt_sample_rgba_2d (ctx, tObj, m, texcoords + magStart, 161 ((void *) 0), rgba + magStart); 162 sample_nearest_2d (ctx, tObj, m, texcoords + magStart, 163 ((void *) 0), rgba + magStart); 164 } 165 } 166 } 167 texture_sample_func 168 _swrast_choose_texture_sample_func (const struct gl_texture_object *t) 169 { 170 switch (t->Target) 171 { 172 case 0x0DE0: 173 return &sample_lambda_2d; 174 } 175 }