Coverage Report

Created: 2025-07-23 08:13

/src/cairo/subprojects/pixman-0.44.2/pixman/pixman-access.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 *
3
 * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
4
 *             2005 Lars Knoll & Zack Rusin, Trolltech
5
 *             2008 Aaron Plattner, NVIDIA Corporation
6
 *
7
 * Permission to use, copy, modify, distribute, and sell this software and its
8
 * documentation for any purpose is hereby granted without fee, provided that
9
 * the above copyright notice appear in all copies and that both that
10
 * copyright notice and this permission notice appear in supporting
11
 * documentation, and that the name of Keith Packard not be used in
12
 * advertising or publicity pertaining to distribution of the software without
13
 * specific, written prior permission.  Keith Packard makes no
14
 * representations about the suitability of this software for any purpose.  It
15
 * is provided "as is" without express or implied warranty.
16
 *
17
 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
18
 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
19
 * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
 * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
21
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
22
 * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
23
 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
24
 * SOFTWARE.
25
 */
26
27
#ifdef HAVE_CONFIG_H
28
#include <pixman-config.h>
29
#endif
30
31
#include <stdlib.h>
32
#include <string.h>
33
#include <assert.h>
34
#include <math.h>
35
36
#include "pixman-accessor.h"
37
#include "pixman-private.h"
38
39
#define CONVERT_RGB24_TO_Y15(s)           \
40
0
    (((((s) >> 16) & 0xff) * 153 +          \
41
0
      (((s) >>  8) & 0xff) * 301 +          \
42
0
      (((s)      ) & 0xff) * 58) >> 2)
43
44
#define CONVERT_RGB24_TO_RGB15(s)                                       \
45
    ((((s) >> 3) & 0x001f) |                                            \
46
     (((s) >> 6) & 0x03e0) |                                            \
47
     (((s) >> 9) & 0x7c00))
48
49
/* Fetch macros */
50
51
#ifdef WORDS_BIGENDIAN
52
#define FETCH_1(img,l,o)            \
53
    (((READ ((img), ((uint32_t *)(l)) + ((o) >> 5))) >> (0x1f - ((o) & 0x1f))) & 0x1)
54
#else
55
#define FETCH_1(img,l,o)            \
56
0
    ((((READ ((img), ((uint32_t *)(l)) + ((o) >> 5))) >> ((o) & 0x1f))) & 0x1)
57
#endif
58
59
0
#define FETCH_8(img,l,o)    (READ (img, (((uint8_t *)(l)) + ((o) >> 3))))
60
61
#ifdef WORDS_BIGENDIAN
62
#define FETCH_4(img,l,o)            \
63
    (((4 * (o)) & 4) ? (FETCH_8 (img,l, 4 * (o)) & 0xf) : (FETCH_8 (img,l,(4 * (o))) >> 4))
64
#else
65
#define FETCH_4(img,l,o)            \
66
0
    (((4 * (o)) & 4) ? (FETCH_8 (img, l, 4 * (o)) >> 4) : (FETCH_8 (img, l, (4 * (o))) & 0xf))
67
#endif
68
69
#ifdef WORDS_BIGENDIAN
70
#define FETCH_24(img,l,o)                                              \
71
    ((uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 0)) << 16)    |       \
72
     (uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 1)) << 8)     |       \
73
     (uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 2)) << 0))
74
#else
75
#define FETCH_24(img,l,o)           \
76
0
    ((uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 0)) << 0)  | \
77
0
     (uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 1)) << 8)  | \
78
0
     (uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 2)) << 16))
79
#endif
80
81
/* Store macros */
82
83
#ifdef WORDS_BIGENDIAN
84
#define STORE_1(img,l,o,v)            \
85
    do                  \
86
    {                 \
87
  uint32_t  *__d = ((uint32_t *)(l)) + ((o) >> 5);    \
88
  uint32_t __m, __v;            \
89
                  \
90
  __m = 1U << (0x1f - ((o) & 0x1f));        \
91
  __v = (v)? __m : 0;           \
92
                  \
93
  WRITE((img), __d, (READ((img), __d) & ~__m) | __v);   \
94
    }                 \
95
    while (0)
96
#else
97
#define STORE_1(img,l,o,v)            \
98
0
    do                  \
99
0
    {                 \
100
0
  uint32_t  *__d = ((uint32_t *)(l)) + ((o) >> 5);    \
101
0
  uint32_t __m, __v;            \
102
0
                  \
103
0
  __m = 1U << ((o) & 0x1f);         \
104
0
  __v = (v)? __m : 0;           \
105
0
                  \
106
0
  WRITE((img), __d, (READ((img), __d) & ~__m) | __v);    \
107
0
    }                 \
108
0
    while (0)
109
#endif
110
111
0
#define STORE_8(img,l,o,v)  (WRITE (img, (uint8_t *)(l) + ((o) >> 3), (v)))
112
113
#ifdef WORDS_BIGENDIAN
114
#define STORE_4(img,l,o,v)            \
115
    do                  \
116
    {                 \
117
  int bo = 4 * (o);           \
118
  int v4 = (v) & 0x0f;            \
119
                  \
120
  STORE_8 (img, l, bo, (            \
121
         bo & 4 ?           \
122
         (FETCH_8 (img, l, bo) & 0xf0) | (v4) :   \
123
         (FETCH_8 (img, l, bo) & 0x0f) | (v4 << 4))); \
124
    } while (0)
125
#else
126
#define STORE_4(img,l,o,v)            \
127
0
    do                  \
128
0
    {                 \
129
0
  int bo = 4 * (o);           \
130
0
  int v4 = (v) & 0x0f;            \
131
0
                  \
132
0
  STORE_8 (img, l, bo, (           \
133
0
         bo & 4 ?           \
134
0
         (FETCH_8 (img, l, bo) & 0x0f) | (v4 << 4) :  \
135
0
         (FETCH_8 (img, l, bo) & 0xf0) | (v4)));    \
136
0
    } while (0)
137
#endif
138
139
#ifdef WORDS_BIGENDIAN
140
#define STORE_24(img,l,o,v)                                            \
141
    do                                                                 \
142
    {                                                                  \
143
  uint8_t *__tmp = (l) + 3 * (o);              \
144
                             \
145
  WRITE ((img), __tmp++, ((v) & 0x00ff0000) >> 16);        \
146
  WRITE ((img), __tmp++, ((v) & 0x0000ff00) >>  8);        \
147
  WRITE ((img), __tmp++, ((v) & 0x000000ff) >>  0);        \
148
    }                                                                  \
149
    while (0)
150
#else
151
#define STORE_24(img,l,o,v)                                            \
152
0
    do                                                                 \
153
0
    {                                                                  \
154
0
  uint8_t *__tmp = (l) + 3 * (o);              \
155
0
                             \
156
0
  WRITE ((img), __tmp++, ((v) & 0x000000ff) >>  0);         \
157
0
  WRITE ((img), __tmp++, ((v) & 0x0000ff00) >>  8);         \
158
0
  WRITE ((img), __tmp++, ((v) & 0x00ff0000) >> 16);         \
159
0
    }                      \
160
0
    while (0)
161
#endif
162
163
/*
164
 * YV12 setup and access macros
165
 */
166
167
#define YV12_SETUP(image)                                               \
168
0
    bits_image_t *__bits_image = (bits_image_t *)image;                 \
169
0
    uint32_t *bits = __bits_image->bits;                                \
170
0
    int stride = __bits_image->rowstride;                               \
171
0
    int offset0 = stride < 0 ?                                          \
172
0
    ((-stride) >> 1) * ((__bits_image->height - 1) >> 1) - stride :  \
173
0
    stride * __bits_image->height;         \
174
0
    int offset1 = stride < 0 ?                                          \
175
0
    offset0 + ((-stride) >> 1) * ((__bits_image->height) >> 1) :  \
176
0
  offset0 + (offset0 >> 2)
177
178
/* Note no trailing semicolon on the above macro; if it's there, then
179
 * the typical usage of YV12_SETUP(image); will have an extra trailing ;
180
 * that some compilers will interpret as a statement -- and then any further
181
 * variable declarations will cause an error.
182
 */
183
184
#define YV12_Y(line)                                                    \
185
0
    ((uint8_t *) ((bits) + (stride) * (line)))
186
187
#define YV12_U(line)                                                    \
188
0
    ((uint8_t *) ((bits) + offset1 +                                    \
189
0
                  ((stride) >> 1) * ((line) >> 1)))
190
191
#define YV12_V(line)                                                    \
192
0
    ((uint8_t *) ((bits) + offset0 +                                    \
193
0
                  ((stride) >> 1) * ((line) >> 1)))
194
195
/* Misc. helpers */
196
197
static force_inline void
198
get_shifts (pixman_format_code_t  format,
199
      int      *a,
200
      int      *r,
201
      int                  *g,
202
      int                  *b)
203
1.61k
{
204
1.61k
    switch (PIXMAN_FORMAT_TYPE (format))
205
1.61k
    {
206
805
    case PIXMAN_TYPE_A:
207
805
  *b = 0;
208
805
  *g = 0;
209
805
  *r = 0;
210
805
  *a = 0;
211
805
  break;
212
213
805
    case PIXMAN_TYPE_ARGB:
214
805
    case PIXMAN_TYPE_ARGB_SRGB:
215
805
  *b = 0;
216
805
  *g = *b + PIXMAN_FORMAT_B (format);
217
805
  *r = *g + PIXMAN_FORMAT_G (format);
218
805
  *a = *r + PIXMAN_FORMAT_R (format);
219
805
  break;
220
221
0
    case PIXMAN_TYPE_ABGR:
222
0
  *r = 0;
223
0
  *g = *r + PIXMAN_FORMAT_R (format);
224
0
  *b = *g + PIXMAN_FORMAT_G (format);
225
0
  *a = *b + PIXMAN_FORMAT_B (format);
226
0
  break;
227
228
0
    case PIXMAN_TYPE_BGRA:
229
  /* With BGRA formats we start counting at the high end of the pixel */
230
0
  *b = PIXMAN_FORMAT_BPP (format) - PIXMAN_FORMAT_B (format);
231
0
  *g = *b - PIXMAN_FORMAT_B (format);
232
0
  *r = *g - PIXMAN_FORMAT_G (format);
233
0
  *a = *r - PIXMAN_FORMAT_R (format);
234
0
  break;
235
236
0
    case PIXMAN_TYPE_RGBA:
237
  /* With BGRA formats we start counting at the high end of the pixel */
238
0
  *r = PIXMAN_FORMAT_BPP (format) - PIXMAN_FORMAT_R (format);
239
0
  *g = *r - PIXMAN_FORMAT_R (format);
240
0
  *b = *g - PIXMAN_FORMAT_G (format);
241
0
  *a = *b - PIXMAN_FORMAT_B (format);
242
0
  break;
243
244
0
    default:
245
0
  assert (0);
246
0
  break;
247
1.61k
    }
248
1.61k
}
pixman-access.c:get_shifts
Line
Count
Source
203
1.61k
{
204
1.61k
    switch (PIXMAN_FORMAT_TYPE (format))
205
1.61k
    {
206
805
    case PIXMAN_TYPE_A:
207
805
  *b = 0;
208
805
  *g = 0;
209
805
  *r = 0;
210
805
  *a = 0;
211
805
  break;
212
213
805
    case PIXMAN_TYPE_ARGB:
214
805
    case PIXMAN_TYPE_ARGB_SRGB:
215
805
  *b = 0;
216
805
  *g = *b + PIXMAN_FORMAT_B (format);
217
805
  *r = *g + PIXMAN_FORMAT_G (format);
218
805
  *a = *r + PIXMAN_FORMAT_R (format);
219
805
  break;
220
221
0
    case PIXMAN_TYPE_ABGR:
222
0
  *r = 0;
223
0
  *g = *r + PIXMAN_FORMAT_R (format);
224
0
  *b = *g + PIXMAN_FORMAT_G (format);
225
0
  *a = *b + PIXMAN_FORMAT_B (format);
226
0
  break;
227
228
0
    case PIXMAN_TYPE_BGRA:
229
  /* With BGRA formats we start counting at the high end of the pixel */
230
0
  *b = PIXMAN_FORMAT_BPP (format) - PIXMAN_FORMAT_B (format);
231
0
  *g = *b - PIXMAN_FORMAT_B (format);
232
0
  *r = *g - PIXMAN_FORMAT_G (format);
233
0
  *a = *r - PIXMAN_FORMAT_R (format);
234
0
  break;
235
236
0
    case PIXMAN_TYPE_RGBA:
237
  /* With BGRA formats we start counting at the high end of the pixel */
238
0
  *r = PIXMAN_FORMAT_BPP (format) - PIXMAN_FORMAT_R (format);
239
0
  *g = *r - PIXMAN_FORMAT_R (format);
240
0
  *b = *g - PIXMAN_FORMAT_G (format);
241
0
  *a = *b - PIXMAN_FORMAT_B (format);
242
0
  break;
243
244
0
    default:
245
0
  assert (0);
246
0
  break;
247
1.61k
    }
248
1.61k
}
Unexecuted instantiation: pixman-access-accessors.c:get_shifts
249
250
static force_inline uint32_t
251
convert_channel (uint32_t pixel, uint32_t def_value,
252
     int n_from_bits, int from_shift,
253
     int n_to_bits, int to_shift)
254
3.22k
{
255
3.22k
    uint32_t v;
256
257
3.22k
    if (n_from_bits && n_to_bits)
258
805
  v  = unorm_to_unorm (pixel >> from_shift, n_from_bits, n_to_bits);
259
2.41k
    else if (n_to_bits)
260
0
  v = def_value;
261
2.41k
    else
262
2.41k
  v = 0;
263
264
3.22k
    return (v & ((1 << n_to_bits) - 1)) << to_shift;
265
3.22k
}
pixman-access.c:convert_channel
Line
Count
Source
254
3.22k
{
255
3.22k
    uint32_t v;
256
257
3.22k
    if (n_from_bits && n_to_bits)
258
805
  v  = unorm_to_unorm (pixel >> from_shift, n_from_bits, n_to_bits);
259
2.41k
    else if (n_to_bits)
260
0
  v = def_value;
261
2.41k
    else
262
2.41k
  v = 0;
263
264
3.22k
    return (v & ((1 << n_to_bits) - 1)) << to_shift;
265
3.22k
}
Unexecuted instantiation: pixman-access-accessors.c:convert_channel
266
267
static force_inline uint32_t
268
convert_pixel (pixman_format_code_t from, pixman_format_code_t to, uint32_t pixel)
269
805
{
270
805
    int a_from_shift, r_from_shift, g_from_shift, b_from_shift;
271
805
    int a_to_shift, r_to_shift, g_to_shift, b_to_shift;
272
805
    uint32_t a, r, g, b;
273
274
805
    get_shifts (from, &a_from_shift, &r_from_shift, &g_from_shift, &b_from_shift);
275
805
    get_shifts (to, &a_to_shift, &r_to_shift, &g_to_shift, &b_to_shift);
276
277
805
    a = convert_channel (pixel, ~0,
278
805
       PIXMAN_FORMAT_A (from), a_from_shift,
279
805
       PIXMAN_FORMAT_A (to), a_to_shift);
280
281
805
    r = convert_channel (pixel, 0,
282
805
       PIXMAN_FORMAT_R (from), r_from_shift,
283
805
       PIXMAN_FORMAT_R (to), r_to_shift);
284
285
805
    g = convert_channel (pixel, 0,
286
805
       PIXMAN_FORMAT_G (from), g_from_shift,
287
805
       PIXMAN_FORMAT_G (to), g_to_shift);
288
289
805
    b = convert_channel (pixel, 0,
290
805
       PIXMAN_FORMAT_B (from), b_from_shift,
291
805
       PIXMAN_FORMAT_B (to), b_to_shift);
292
293
805
    return a | r | g | b;
294
805
}
pixman-access.c:convert_pixel
Line
Count
Source
269
805
{
270
805
    int a_from_shift, r_from_shift, g_from_shift, b_from_shift;
271
805
    int a_to_shift, r_to_shift, g_to_shift, b_to_shift;
272
805
    uint32_t a, r, g, b;
273
274
805
    get_shifts (from, &a_from_shift, &r_from_shift, &g_from_shift, &b_from_shift);
275
805
    get_shifts (to, &a_to_shift, &r_to_shift, &g_to_shift, &b_to_shift);
276
277
805
    a = convert_channel (pixel, ~0,
278
805
       PIXMAN_FORMAT_A (from), a_from_shift,
279
805
       PIXMAN_FORMAT_A (to), a_to_shift);
280
281
805
    r = convert_channel (pixel, 0,
282
805
       PIXMAN_FORMAT_R (from), r_from_shift,
283
805
       PIXMAN_FORMAT_R (to), r_to_shift);
284
285
805
    g = convert_channel (pixel, 0,
286
805
       PIXMAN_FORMAT_G (from), g_from_shift,
287
805
       PIXMAN_FORMAT_G (to), g_to_shift);
288
289
805
    b = convert_channel (pixel, 0,
290
805
       PIXMAN_FORMAT_B (from), b_from_shift,
291
805
       PIXMAN_FORMAT_B (to), b_to_shift);
292
293
805
    return a | r | g | b;
294
805
}
Unexecuted instantiation: pixman-access-accessors.c:convert_pixel
295
296
static force_inline uint32_t
297
convert_pixel_to_a8r8g8b8 (bits_image_t *image,
298
         pixman_format_code_t format,
299
         uint32_t pixel)
300
0
{
301
0
    if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_GRAY    ||
302
0
  PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_COLOR)
303
0
    {
304
0
  return image->indexed->rgba[pixel];
305
0
    }
306
0
    else
307
0
    {
308
0
  return convert_pixel (format, PIXMAN_a8r8g8b8, pixel);
309
0
    }
310
0
}
Unexecuted instantiation: pixman-access.c:convert_pixel_to_a8r8g8b8
Unexecuted instantiation: pixman-access-accessors.c:convert_pixel_to_a8r8g8b8
311
312
static force_inline uint32_t
313
convert_pixel_from_a8r8g8b8 (pixman_image_t *image,
314
           pixman_format_code_t format, uint32_t pixel)
315
805
{
316
805
    if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_GRAY)
317
0
    {
318
0
  pixel = CONVERT_RGB24_TO_Y15 (pixel);
319
320
0
  return image->bits.indexed->ent[pixel & 0x7fff];
321
0
    }
322
805
    else if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_COLOR)
323
0
    {
324
0
  pixel = convert_pixel (PIXMAN_a8r8g8b8, PIXMAN_x1r5g5b5, pixel);
325
326
0
  return image->bits.indexed->ent[pixel & 0x7fff];
327
0
    }
328
805
    else
329
805
    {
330
805
  return convert_pixel (PIXMAN_a8r8g8b8, format, pixel);
331
805
    }
332
805
}
pixman-access.c:convert_pixel_from_a8r8g8b8
Line
Count
Source
315
805
{
316
805
    if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_GRAY)
317
0
    {
318
0
  pixel = CONVERT_RGB24_TO_Y15 (pixel);
319
320
0
  return image->bits.indexed->ent[pixel & 0x7fff];
321
0
    }
322
805
    else if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_COLOR)
323
0
    {
324
0
  pixel = convert_pixel (PIXMAN_a8r8g8b8, PIXMAN_x1r5g5b5, pixel);
325
326
0
  return image->bits.indexed->ent[pixel & 0x7fff];
327
0
    }
328
805
    else
329
805
    {
330
805
  return convert_pixel (PIXMAN_a8r8g8b8, format, pixel);
331
805
    }
332
805
}
Unexecuted instantiation: pixman-access-accessors.c:convert_pixel_from_a8r8g8b8
333
334
static force_inline uint32_t
335
fetch_and_convert_pixel (bits_image_t *   image,
336
       const uint8_t *  bits,
337
       int      offset,
338
       pixman_format_code_t format)
339
0
{
340
0
    uint32_t pixel;
341
342
0
    switch (PIXMAN_FORMAT_BPP (format))
343
0
    {
344
0
    case 1:
345
0
  pixel = FETCH_1 (image, bits, offset);
346
0
  break;
347
348
0
    case 4:
349
0
  pixel = FETCH_4 (image, bits, offset);
350
0
  break;
351
352
0
    case 8:
353
0
  pixel = READ (image, bits + offset);
354
0
  break;
355
356
0
    case 16:
357
0
  pixel = READ (image, ((uint16_t *)bits + offset));
358
0
  break;
359
360
0
    case 24:
361
0
  pixel = FETCH_24 (image, bits, offset);
362
0
  break;
363
364
0
    case 32:
365
0
  pixel = READ (image, ((uint32_t *)bits + offset));
366
0
  break;
367
368
0
    default:
369
0
  pixel = 0xffff00ff; /* As ugly as possible to detect the bug */
370
0
  break;
371
0
    }
372
373
0
    return convert_pixel_to_a8r8g8b8 (image, format, pixel);
374
0
}
Unexecuted instantiation: pixman-access.c:fetch_and_convert_pixel
Unexecuted instantiation: pixman-access-accessors.c:fetch_and_convert_pixel
375
376
static force_inline void
377
convert_and_store_pixel (bits_image_t *   image,
378
       uint8_t *    dest,
379
       int                    offset,
380
       pixman_format_code_t format,
381
       uint32_t   pixel)
382
805
{
383
805
    uint32_t converted = convert_pixel_from_a8r8g8b8 (
384
805
  (pixman_image_t *)image, format, pixel);
385
386
805
    switch (PIXMAN_FORMAT_BPP (format))
387
805
    {
388
0
    case 1:
389
0
  STORE_1 (image, dest, offset, converted & 0x01);
390
0
  break;
391
392
0
    case 4:
393
0
  STORE_4 (image, dest, offset, converted & 0xf);
394
0
  break;
395
396
805
    case 8:
397
805
  WRITE (image, (dest + offset), converted & 0xff);
398
805
  break;
399
400
0
    case 16:
401
0
  WRITE (image, ((uint16_t *)dest + offset), converted & 0xffff);
402
0
  break;
403
404
0
    case 24:
405
0
  STORE_24 (image, dest, offset, converted);
406
0
  break;
407
408
0
    case 32:
409
0
  WRITE (image, ((uint32_t *)dest + offset), converted);
410
0
  break;
411
412
0
    default:
413
0
  *dest = 0x0;
414
0
  break;
415
805
    }
416
805
}
pixman-access.c:convert_and_store_pixel
Line
Count
Source
382
805
{
383
805
    uint32_t converted = convert_pixel_from_a8r8g8b8 (
384
805
  (pixman_image_t *)image, format, pixel);
385
386
805
    switch (PIXMAN_FORMAT_BPP (format))
387
805
    {
388
0
    case 1:
389
0
  STORE_1 (image, dest, offset, converted & 0x01);
390
0
  break;
391
392
0
    case 4:
393
0
  STORE_4 (image, dest, offset, converted & 0xf);
394
0
  break;
395
396
805
    case 8:
397
805
  WRITE (image, (dest + offset), converted & 0xff);
398
805
  break;
399
400
0
    case 16:
401
0
  WRITE (image, ((uint16_t *)dest + offset), converted & 0xffff);
402
0
  break;
403
404
0
    case 24:
405
0
  STORE_24 (image, dest, offset, converted);
406
0
  break;
407
408
0
    case 32:
409
0
  WRITE (image, ((uint32_t *)dest + offset), converted);
410
0
  break;
411
412
0
    default:
413
0
  *dest = 0x0;
414
0
  break;
415
805
    }
416
805
}
Unexecuted instantiation: pixman-access-accessors.c:convert_and_store_pixel
417
418
#define MAKE_ACCESSORS(format)            \
419
    static void               \
420
    fetch_scanline_ ## format (bits_image_t *image,     \
421
             int         x,     \
422
             int             y,     \
423
             int             width,     \
424
             uint32_t *      buffer,      \
425
             const uint32_t *mask)      \
426
0
    {                 \
427
0
  uint8_t *bits =             \
428
0
      (uint8_t *)(image->bits + y * image->rowstride);    \
429
0
  int i;                \
430
0
                  \
431
0
  for (i = 0; i < width; ++i)         \
432
0
  {               \
433
0
      *buffer++ =             \
434
0
    fetch_and_convert_pixel (image, bits, x + i, PIXMAN_ ## format); \
435
0
  }                \
436
0
    }                  \
Unexecuted instantiation: pixman-access.c:fetch_scanline_a8r8g8b8
Unexecuted instantiation: pixman-access.c:fetch_scanline_x8r8g8b8
Unexecuted instantiation: pixman-access.c:fetch_scanline_a8b8g8r8
Unexecuted instantiation: pixman-access.c:fetch_scanline_x8b8g8r8
Unexecuted instantiation: pixman-access.c:fetch_scanline_b8g8r8a8
Unexecuted instantiation: pixman-access.c:fetch_scanline_b8g8r8x8
Unexecuted instantiation: pixman-access.c:fetch_scanline_r8g8b8a8
Unexecuted instantiation: pixman-access.c:fetch_scanline_r8g8b8x8
Unexecuted instantiation: pixman-access.c:fetch_scanline_x14r6g6b6
Unexecuted instantiation: pixman-access.c:fetch_scanline_r8g8b8
Unexecuted instantiation: pixman-access.c:fetch_scanline_b8g8r8
Unexecuted instantiation: pixman-access.c:fetch_scanline_r5g6b5
Unexecuted instantiation: pixman-access.c:fetch_scanline_b5g6r5
Unexecuted instantiation: pixman-access.c:fetch_scanline_a1r5g5b5
Unexecuted instantiation: pixman-access.c:fetch_scanline_x1r5g5b5
Unexecuted instantiation: pixman-access.c:fetch_scanline_a1b5g5r5
Unexecuted instantiation: pixman-access.c:fetch_scanline_x1b5g5r5
Unexecuted instantiation: pixman-access.c:fetch_scanline_a4r4g4b4
Unexecuted instantiation: pixman-access.c:fetch_scanline_x4r4g4b4
Unexecuted instantiation: pixman-access.c:fetch_scanline_a4b4g4r4
Unexecuted instantiation: pixman-access.c:fetch_scanline_x4b4g4r4
Unexecuted instantiation: pixman-access.c:fetch_scanline_a8
Unexecuted instantiation: pixman-access.c:fetch_scanline_r3g3b2
Unexecuted instantiation: pixman-access.c:fetch_scanline_b2g3r3
Unexecuted instantiation: pixman-access.c:fetch_scanline_a2r2g2b2
Unexecuted instantiation: pixman-access.c:fetch_scanline_a2b2g2r2
Unexecuted instantiation: pixman-access.c:fetch_scanline_c8
Unexecuted instantiation: pixman-access.c:fetch_scanline_g8
Unexecuted instantiation: pixman-access.c:fetch_scanline_x4a4
Unexecuted instantiation: pixman-access.c:fetch_scanline_a4
Unexecuted instantiation: pixman-access.c:fetch_scanline_r1g2b1
Unexecuted instantiation: pixman-access.c:fetch_scanline_b1g2r1
Unexecuted instantiation: pixman-access.c:fetch_scanline_a1r1g1b1
Unexecuted instantiation: pixman-access.c:fetch_scanline_a1b1g1r1
Unexecuted instantiation: pixman-access.c:fetch_scanline_c4
Unexecuted instantiation: pixman-access.c:fetch_scanline_g4
Unexecuted instantiation: pixman-access.c:fetch_scanline_a1
Unexecuted instantiation: pixman-access.c:fetch_scanline_g1
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a8r8g8b8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x8r8g8b8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a8b8g8r8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x8b8g8r8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b8g8r8a8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b8g8r8x8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r8g8b8a8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r8g8b8x8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x14r6g6b6
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r8g8b8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b8g8r8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r5g6b5
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b5g6r5
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a1r5g5b5
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x1r5g5b5
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a1b5g5r5
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x1b5g5r5
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a4r4g4b4
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x4r4g4b4
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a4b4g4r4
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x4b4g4r4
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r3g3b2
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b2g3r3
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a2r2g2b2
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a2b2g2r2
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_c8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_g8
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x4a4
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a4
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r1g2b1
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b1g2r1
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a1r1g1b1
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a1b1g1r1
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_c4
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_g4
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a1
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_g1
437
                  \
438
    static void               \
439
    store_scanline_ ## format (bits_image_t *  image,     \
440
             int             x,     \
441
             int             y,     \
442
             int             width,     \
443
             const uint32_t *values)      \
444
35
    {                 \
445
35
  uint8_t *dest =             \
446
35
      (uint8_t *)(image->bits + y * image->rowstride);    \
447
35
  int i;                \
448
35
                  \
449
840
  for (i = 0; i < width; ++i)         \
450
805
  {               \
451
805
      convert_and_store_pixel (         \
452
805
    image, dest, i + x, PIXMAN_ ## format, values[i]);  \
453
805
  }                \
454
35
    }                  \
Unexecuted instantiation: pixman-access.c:store_scanline_a8r8g8b8
Unexecuted instantiation: pixman-access.c:store_scanline_x8r8g8b8
Unexecuted instantiation: pixman-access.c:store_scanline_a8b8g8r8
Unexecuted instantiation: pixman-access.c:store_scanline_x8b8g8r8
Unexecuted instantiation: pixman-access.c:store_scanline_b8g8r8a8
Unexecuted instantiation: pixman-access.c:store_scanline_b8g8r8x8
Unexecuted instantiation: pixman-access.c:store_scanline_r8g8b8a8
Unexecuted instantiation: pixman-access.c:store_scanline_r8g8b8x8
Unexecuted instantiation: pixman-access.c:store_scanline_x14r6g6b6
Unexecuted instantiation: pixman-access.c:store_scanline_r8g8b8
Unexecuted instantiation: pixman-access.c:store_scanline_b8g8r8
Unexecuted instantiation: pixman-access.c:store_scanline_r5g6b5
Unexecuted instantiation: pixman-access.c:store_scanline_b5g6r5
Unexecuted instantiation: pixman-access.c:store_scanline_a1r5g5b5
Unexecuted instantiation: pixman-access.c:store_scanline_x1r5g5b5
Unexecuted instantiation: pixman-access.c:store_scanline_a1b5g5r5
Unexecuted instantiation: pixman-access.c:store_scanline_x1b5g5r5
Unexecuted instantiation: pixman-access.c:store_scanline_a4r4g4b4
Unexecuted instantiation: pixman-access.c:store_scanline_x4r4g4b4
Unexecuted instantiation: pixman-access.c:store_scanline_a4b4g4r4
Unexecuted instantiation: pixman-access.c:store_scanline_x4b4g4r4
pixman-access.c:store_scanline_a8
Line
Count
Source
444
35
    {                 \
445
35
  uint8_t *dest =             \
446
35
      (uint8_t *)(image->bits + y * image->rowstride);    \
447
35
  int i;                \
448
35
                  \
449
840
  for (i = 0; i < width; ++i)         \
450
805
  {               \
451
805
      convert_and_store_pixel (         \
452
805
    image, dest, i + x, PIXMAN_ ## format, values[i]);  \
453
805
  }                \
454
35
    }                  \
Unexecuted instantiation: pixman-access.c:store_scanline_r3g3b2
Unexecuted instantiation: pixman-access.c:store_scanline_b2g3r3
Unexecuted instantiation: pixman-access.c:store_scanline_a2r2g2b2
Unexecuted instantiation: pixman-access.c:store_scanline_a2b2g2r2
Unexecuted instantiation: pixman-access.c:store_scanline_c8
Unexecuted instantiation: pixman-access.c:store_scanline_g8
Unexecuted instantiation: pixman-access.c:store_scanline_x4a4
Unexecuted instantiation: pixman-access.c:store_scanline_a4
Unexecuted instantiation: pixman-access.c:store_scanline_r1g2b1
Unexecuted instantiation: pixman-access.c:store_scanline_b1g2r1
Unexecuted instantiation: pixman-access.c:store_scanline_a1r1g1b1
Unexecuted instantiation: pixman-access.c:store_scanline_a1b1g1r1
Unexecuted instantiation: pixman-access.c:store_scanline_c4
Unexecuted instantiation: pixman-access.c:store_scanline_g4
Unexecuted instantiation: pixman-access.c:store_scanline_a1
Unexecuted instantiation: pixman-access.c:store_scanline_g1
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a8r8g8b8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x8r8g8b8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a8b8g8r8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x8b8g8r8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b8g8r8a8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b8g8r8x8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r8g8b8a8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r8g8b8x8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x14r6g6b6
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r8g8b8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b8g8r8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r5g6b5
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b5g6r5
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a1r5g5b5
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x1r5g5b5
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a1b5g5r5
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x1b5g5r5
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a4r4g4b4
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x4r4g4b4
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a4b4g4r4
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x4b4g4r4
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r3g3b2
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b2g3r3
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a2r2g2b2
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a2b2g2r2
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_c8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_g8
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x4a4
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a4
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r1g2b1
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b1g2r1
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a1r1g1b1
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a1b1g1r1
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_c4
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_g4
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a1
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_g1
455
                  \
456
    static uint32_t             \
457
    fetch_pixel_ ## format (bits_image_t *image,      \
458
          int   offset,       \
459
          int   line)       \
460
0
    {                 \
461
0
  uint8_t *bits =             \
462
0
      (uint8_t *)(image->bits + line * image->rowstride);   \
463
0
                  \
464
0
  return fetch_and_convert_pixel (        \
465
0
      image, bits, offset, PIXMAN_ ## format);      \
466
0
    }                  \
Unexecuted instantiation: pixman-access.c:fetch_pixel_a8r8g8b8
Unexecuted instantiation: pixman-access.c:fetch_pixel_x8r8g8b8
Unexecuted instantiation: pixman-access.c:fetch_pixel_a8b8g8r8
Unexecuted instantiation: pixman-access.c:fetch_pixel_x8b8g8r8
Unexecuted instantiation: pixman-access.c:fetch_pixel_b8g8r8a8
Unexecuted instantiation: pixman-access.c:fetch_pixel_b8g8r8x8
Unexecuted instantiation: pixman-access.c:fetch_pixel_r8g8b8a8
Unexecuted instantiation: pixman-access.c:fetch_pixel_r8g8b8x8
Unexecuted instantiation: pixman-access.c:fetch_pixel_x14r6g6b6
Unexecuted instantiation: pixman-access.c:fetch_pixel_r8g8b8
Unexecuted instantiation: pixman-access.c:fetch_pixel_b8g8r8
Unexecuted instantiation: pixman-access.c:fetch_pixel_r5g6b5
Unexecuted instantiation: pixman-access.c:fetch_pixel_b5g6r5
Unexecuted instantiation: pixman-access.c:fetch_pixel_a1r5g5b5
Unexecuted instantiation: pixman-access.c:fetch_pixel_x1r5g5b5
Unexecuted instantiation: pixman-access.c:fetch_pixel_a1b5g5r5
Unexecuted instantiation: pixman-access.c:fetch_pixel_x1b5g5r5
Unexecuted instantiation: pixman-access.c:fetch_pixel_a4r4g4b4
Unexecuted instantiation: pixman-access.c:fetch_pixel_x4r4g4b4
Unexecuted instantiation: pixman-access.c:fetch_pixel_a4b4g4r4
Unexecuted instantiation: pixman-access.c:fetch_pixel_x4b4g4r4
Unexecuted instantiation: pixman-access.c:fetch_pixel_a8
Unexecuted instantiation: pixman-access.c:fetch_pixel_r3g3b2
Unexecuted instantiation: pixman-access.c:fetch_pixel_b2g3r3
Unexecuted instantiation: pixman-access.c:fetch_pixel_a2r2g2b2
Unexecuted instantiation: pixman-access.c:fetch_pixel_a2b2g2r2
Unexecuted instantiation: pixman-access.c:fetch_pixel_c8
Unexecuted instantiation: pixman-access.c:fetch_pixel_g8
Unexecuted instantiation: pixman-access.c:fetch_pixel_x4a4
Unexecuted instantiation: pixman-access.c:fetch_pixel_a4
Unexecuted instantiation: pixman-access.c:fetch_pixel_r1g2b1
Unexecuted instantiation: pixman-access.c:fetch_pixel_b1g2r1
Unexecuted instantiation: pixman-access.c:fetch_pixel_a1r1g1b1
Unexecuted instantiation: pixman-access.c:fetch_pixel_a1b1g1r1
Unexecuted instantiation: pixman-access.c:fetch_pixel_c4
Unexecuted instantiation: pixman-access.c:fetch_pixel_g4
Unexecuted instantiation: pixman-access.c:fetch_pixel_a1
Unexecuted instantiation: pixman-access.c:fetch_pixel_g1
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a8r8g8b8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x8r8g8b8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a8b8g8r8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x8b8g8r8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b8g8r8a8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b8g8r8x8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r8g8b8a8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r8g8b8x8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x14r6g6b6
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r8g8b8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b8g8r8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r5g6b5
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b5g6r5
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a1r5g5b5
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x1r5g5b5
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a1b5g5r5
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x1b5g5r5
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a4r4g4b4
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x4r4g4b4
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a4b4g4r4
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x4b4g4r4
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r3g3b2
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b2g3r3
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a2r2g2b2
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a2b2g2r2
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_c8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_g8
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x4a4
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a4
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r1g2b1
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b1g2r1
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a1r1g1b1
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a1b1g1r1
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_c4
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_g4
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a1
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_g1
467
                  \
468
    static const void *const __dummy__ ## format MAYBE_UNUSED
469
470
MAKE_ACCESSORS(a8r8g8b8);
471
MAKE_ACCESSORS(x8r8g8b8);
472
MAKE_ACCESSORS(a8b8g8r8);
473
MAKE_ACCESSORS(x8b8g8r8);
474
MAKE_ACCESSORS(x14r6g6b6);
475
MAKE_ACCESSORS(b8g8r8a8);
476
MAKE_ACCESSORS(b8g8r8x8);
477
MAKE_ACCESSORS(r8g8b8x8);
478
MAKE_ACCESSORS(r8g8b8a8);
479
MAKE_ACCESSORS(r8g8b8);
480
MAKE_ACCESSORS(b8g8r8);
481
MAKE_ACCESSORS(r5g6b5);
482
MAKE_ACCESSORS(b5g6r5);
483
MAKE_ACCESSORS(a1r5g5b5);
484
MAKE_ACCESSORS(x1r5g5b5);
485
MAKE_ACCESSORS(a1b5g5r5);
486
MAKE_ACCESSORS(x1b5g5r5);
487
MAKE_ACCESSORS(a4r4g4b4);
488
MAKE_ACCESSORS(x4r4g4b4);
489
MAKE_ACCESSORS(a4b4g4r4);
490
MAKE_ACCESSORS(x4b4g4r4);
491
MAKE_ACCESSORS(a8);
492
MAKE_ACCESSORS(c8);
493
MAKE_ACCESSORS(g8);
494
MAKE_ACCESSORS(r3g3b2);
495
MAKE_ACCESSORS(b2g3r3);
496
MAKE_ACCESSORS(a2r2g2b2);
497
MAKE_ACCESSORS(a2b2g2r2);
498
MAKE_ACCESSORS(x4a4);
499
MAKE_ACCESSORS(a4);
500
MAKE_ACCESSORS(g4);
501
MAKE_ACCESSORS(c4);
502
MAKE_ACCESSORS(r1g2b1);
503
MAKE_ACCESSORS(b1g2r1);
504
MAKE_ACCESSORS(a1r1g1b1);
505
MAKE_ACCESSORS(a1b1g1r1);
506
MAKE_ACCESSORS(a1);
507
MAKE_ACCESSORS(g1);
508
509
/********************************** Fetch ************************************/
510
/* Table mapping sRGB-encoded 8 bit numbers to linearly encoded
511
 * floating point numbers. We assume that single precision
512
 * floating point follows the IEEE 754 format.
513
 */
514
static const uint32_t to_linear_u[256] =
515
{
516
    0x00000000, 0x399f22b4, 0x3a1f22b4, 0x3a6eb40e, 0x3a9f22b4, 0x3ac6eb61,
517
    0x3aeeb40e, 0x3b0b3e5d, 0x3b1f22b4, 0x3b33070b, 0x3b46eb61, 0x3b5b518a,
518
    0x3b70f18a, 0x3b83e1c5, 0x3b8fe614, 0x3b9c87fb, 0x3ba9c9b5, 0x3bb7ad6d,
519
    0x3bc63547, 0x3bd5635f, 0x3be539bd, 0x3bf5ba70, 0x3c0373b5, 0x3c0c6152,
520
    0x3c15a703, 0x3c1f45bc, 0x3c293e68, 0x3c3391f4, 0x3c3e4149, 0x3c494d43,
521
    0x3c54b6c7, 0x3c607eb1, 0x3c6ca5df, 0x3c792d22, 0x3c830aa8, 0x3c89af9e,
522
    0x3c9085db, 0x3c978dc5, 0x3c9ec7c0, 0x3ca63432, 0x3cadd37d, 0x3cb5a601,
523
    0x3cbdac20, 0x3cc5e639, 0x3cce54ab, 0x3cd6f7d2, 0x3cdfd00e, 0x3ce8ddb9,
524
    0x3cf2212c, 0x3cfb9ac1, 0x3d02a569, 0x3d0798dc, 0x3d0ca7e4, 0x3d11d2ae,
525
    0x3d171963, 0x3d1c7c2e, 0x3d21fb3a, 0x3d2796af, 0x3d2d4ebb, 0x3d332380,
526
    0x3d39152b, 0x3d3f23e3, 0x3d454fd0, 0x3d4b991c, 0x3d51ffeb, 0x3d588466,
527
    0x3d5f26b7, 0x3d65e6fe, 0x3d6cc564, 0x3d73c210, 0x3d7add25, 0x3d810b65,
528
    0x3d84b793, 0x3d88732e, 0x3d8c3e48, 0x3d9018f4, 0x3d940343, 0x3d97fd48,
529
    0x3d9c0714, 0x3da020b9, 0x3da44a48, 0x3da883d6, 0x3daccd70, 0x3db12728,
530
    0x3db59110, 0x3dba0b38, 0x3dbe95b2, 0x3dc3308f, 0x3dc7dbe0, 0x3dcc97b4,
531
    0x3dd1641c, 0x3dd6412a, 0x3ddb2eec, 0x3de02d75, 0x3de53cd3, 0x3dea5d16,
532
    0x3def8e52, 0x3df4d091, 0x3dfa23e5, 0x3dff885e, 0x3e027f06, 0x3e05427f,
533
    0x3e080ea2, 0x3e0ae376, 0x3e0dc104, 0x3e10a752, 0x3e139669, 0x3e168e50,
534
    0x3e198f0e, 0x3e1c98ab, 0x3e1fab2e, 0x3e22c6a0, 0x3e25eb08, 0x3e29186a,
535
    0x3e2c4ed0, 0x3e2f8e42, 0x3e32d6c4, 0x3e362861, 0x3e39831e, 0x3e3ce702,
536
    0x3e405416, 0x3e43ca5e, 0x3e4749e4, 0x3e4ad2ae, 0x3e4e64c2, 0x3e520027,
537
    0x3e55a4e6, 0x3e595303, 0x3e5d0a8a, 0x3e60cb7c, 0x3e6495e0, 0x3e6869bf,
538
    0x3e6c4720, 0x3e702e08, 0x3e741e7f, 0x3e78188c, 0x3e7c1c34, 0x3e8014c0,
539
    0x3e822039, 0x3e84308b, 0x3e8645b8, 0x3e885fc3, 0x3e8a7eb0, 0x3e8ca281,
540
    0x3e8ecb3a, 0x3e90f8df, 0x3e932b72, 0x3e9562f6, 0x3e979f6f, 0x3e99e0e0,
541
    0x3e9c274e, 0x3e9e72b8, 0x3ea0c322, 0x3ea31892, 0x3ea57308, 0x3ea7d28a,
542
    0x3eaa3718, 0x3eaca0b7, 0x3eaf0f69, 0x3eb18332, 0x3eb3fc16, 0x3eb67a15,
543
    0x3eb8fd34, 0x3ebb8576, 0x3ebe12de, 0x3ec0a56e, 0x3ec33d2a, 0x3ec5da14,
544
    0x3ec87c30, 0x3ecb2380, 0x3ecdd008, 0x3ed081ca, 0x3ed338c9, 0x3ed5f508,
545
    0x3ed8b68a, 0x3edb7d52, 0x3ede4962, 0x3ee11abe, 0x3ee3f168, 0x3ee6cd64,
546
    0x3ee9aeb6, 0x3eec955d, 0x3eef815d, 0x3ef272ba, 0x3ef56976, 0x3ef86594,
547
    0x3efb6717, 0x3efe6e02, 0x3f00bd2b, 0x3f02460c, 0x3f03d1a5, 0x3f055ff8,
548
    0x3f06f105, 0x3f0884ce, 0x3f0a1b54, 0x3f0bb499, 0x3f0d509f, 0x3f0eef65,
549
    0x3f1090ef, 0x3f12353c, 0x3f13dc50, 0x3f15862a, 0x3f1732cc, 0x3f18e237,
550
    0x3f1a946d, 0x3f1c4970, 0x3f1e013f, 0x3f1fbbde, 0x3f21794c, 0x3f23398c,
551
    0x3f24fca0, 0x3f26c286, 0x3f288b42, 0x3f2a56d3, 0x3f2c253d, 0x3f2df680,
552
    0x3f2fca9d, 0x3f31a195, 0x3f337b6a, 0x3f35581e, 0x3f3737b1, 0x3f391a24,
553
    0x3f3aff7a, 0x3f3ce7b2, 0x3f3ed2d0, 0x3f40c0d2, 0x3f42b1bc, 0x3f44a58e,
554
    0x3f469c49, 0x3f4895ee, 0x3f4a9280, 0x3f4c91ff, 0x3f4e946c, 0x3f5099c8,
555
    0x3f52a216, 0x3f54ad55, 0x3f56bb88, 0x3f58ccae, 0x3f5ae0cb, 0x3f5cf7de,
556
    0x3f5f11ec, 0x3f612ef0, 0x3f634eef, 0x3f6571ea, 0x3f6797e1, 0x3f69c0d6,
557
    0x3f6beccb, 0x3f6e1bc0, 0x3f704db6, 0x3f7282af, 0x3f74baac, 0x3f76f5ae,
558
    0x3f7933b6, 0x3f7b74c6, 0x3f7db8de, 0x3f800000
559
};
560
561
static const float * const to_linear = (const float *)to_linear_u;
562
563
static uint8_t
564
to_srgb (float f)
565
0
{
566
0
    uint8_t low = 0;
567
0
    uint8_t high = 255;
568
569
0
    while (high - low > 1)
570
0
    {
571
0
  uint8_t mid = (low + high) / 2;
572
573
0
  if (to_linear[mid] > f)
574
0
      high = mid;
575
0
  else
576
0
      low = mid;
577
0
    }
578
579
0
    if (to_linear[high] - f < f - to_linear[low])
580
0
  return high;
581
0
    else
582
0
  return low;
583
0
}
Unexecuted instantiation: pixman-access.c:to_srgb
Unexecuted instantiation: pixman-access-accessors.c:to_srgb
584
585
static void
586
fetch_scanline_a8r8g8b8_sRGB_float (bits_image_t *  image,
587
            int             x,
588
            int             y,
589
            int             width,
590
            uint32_t *      b,
591
            const uint32_t *mask)
592
0
{
593
0
    const uint32_t *bits = image->bits + y * image->rowstride;
594
0
    const uint32_t *pixel = bits + x;
595
0
    const uint32_t *end = pixel + width;
596
0
    argb_t *buffer = (argb_t *)b;
597
598
0
    while (pixel < end)
599
0
    {
600
0
  uint32_t p = READ (image, pixel++);
601
0
  argb_t *argb = buffer;
602
603
0
  argb->a = pixman_unorm_to_float ((p >> 24) & 0xff, 8);
604
605
0
  argb->r = to_linear [(p >> 16) & 0xff];
606
0
  argb->g = to_linear [(p >>  8) & 0xff];
607
0
  argb->b = to_linear [(p >>  0) & 0xff];
608
609
0
  buffer++;
610
0
    }
611
0
}
Unexecuted instantiation: pixman-access.c:fetch_scanline_a8r8g8b8_sRGB_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a8r8g8b8_sRGB_float
612
613
static void
614
fetch_scanline_r8g8b8_sRGB_float (bits_image_t *  image,
615
          int             x,
616
          int             y,
617
          int             width,
618
          uint32_t *      b,
619
          const uint32_t *mask)
620
0
{
621
0
    const uint8_t *bits = (uint8_t *)(image->bits + y * image->rowstride);
622
0
    argb_t *buffer = (argb_t *)b;
623
0
    int i;
624
0
    for (i = x; i < width; ++i)
625
0
    {
626
0
  uint32_t p = FETCH_24 (image, bits, i);
627
0
  argb_t *argb = buffer;
628
629
0
  argb->a = 1.0f;
630
631
0
  argb->r = to_linear[(p >> 16) & 0xff];
632
0
  argb->g = to_linear[(p >>  8) & 0xff];
633
0
  argb->b = to_linear[(p >>  0) & 0xff];
634
635
0
  buffer++;
636
0
    }
637
0
}
Unexecuted instantiation: pixman-access.c:fetch_scanline_r8g8b8_sRGB_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r8g8b8_sRGB_float
638
639
/* Expects a float buffer */
640
static void
641
fetch_scanline_a2r10g10b10_float (bits_image_t *  image,
642
          int             x,
643
          int             y,
644
          int             width,
645
          uint32_t *      b,
646
          const uint32_t *mask)
647
0
{
648
0
    const uint32_t *bits = image->bits + y * image->rowstride;
649
0
    const uint32_t *pixel = bits + x;
650
0
    const uint32_t *end = pixel + width;
651
0
    argb_t *buffer = (argb_t *)b;
652
653
0
    while (pixel < end)
654
0
    {
655
0
  uint32_t p = READ (image, pixel++);
656
0
  uint64_t a = p >> 30;
657
0
  uint64_t r = (p >> 20) & 0x3ff;
658
0
  uint64_t g = (p >> 10) & 0x3ff;
659
0
  uint64_t b = p & 0x3ff;
660
661
0
  buffer->a = pixman_unorm_to_float (a, 2);
662
0
  buffer->r = pixman_unorm_to_float (r, 10);
663
0
  buffer->g = pixman_unorm_to_float (g, 10);
664
0
  buffer->b = pixman_unorm_to_float (b, 10);
665
666
0
  buffer++;
667
0
    }
668
0
}
Unexecuted instantiation: pixman-access.c:fetch_scanline_a2r10g10b10_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a2r10g10b10_float
669
670
/* Expects a float buffer */
671
#ifndef PIXMAN_FB_ACCESSORS
672
static void
673
fetch_scanline_rgbf_float (bits_image_t   *image,
674
         int             x,
675
         int             y,
676
         int             width,
677
         uint32_t *      b,
678
         const uint32_t *mask)
679
0
{
680
0
    const float *bits = (float *)image->bits + y * image->rowstride;
681
0
    const float *pixel = bits + x * 3;
682
0
    argb_t *buffer = (argb_t *)b;
683
684
0
    for (; width--; buffer++) {
685
0
  buffer->r = *pixel++;
686
0
  buffer->g = *pixel++;
687
0
  buffer->b = *pixel++;
688
0
  buffer->a = 1.f;
689
0
    }
690
0
}
691
692
static void
693
fetch_scanline_rgbaf_float (bits_image_t   *image,
694
          int             x,
695
          int             y,
696
          int             width,
697
          uint32_t *      b,
698
          const uint32_t *mask)
699
0
{
700
0
    const float *bits = (float *)image->bits + y * image->rowstride;
701
0
    const float *pixel = bits + x * 4;
702
0
    argb_t *buffer = (argb_t *)b;
703
704
0
    for (; width--; buffer++) {
705
0
  buffer->r = *pixel++;
706
0
  buffer->g = *pixel++;
707
0
  buffer->b = *pixel++;
708
0
  buffer->a = *pixel++;
709
0
    }
710
0
}
711
#endif
712
713
static void
714
fetch_scanline_x2r10g10b10_float (bits_image_t   *image,
715
          int             x,
716
          int             y,
717
          int             width,
718
          uint32_t *      b,
719
          const uint32_t *mask)
720
0
{
721
0
    const uint32_t *bits = image->bits + y * image->rowstride;
722
0
    const uint32_t *pixel = (uint32_t *)bits + x;
723
0
    const uint32_t *end = pixel + width;
724
0
    argb_t *buffer = (argb_t *)b;
725
726
0
    while (pixel < end)
727
0
    {
728
0
  uint32_t p = READ (image, pixel++);
729
0
  uint64_t r = (p >> 20) & 0x3ff;
730
0
  uint64_t g = (p >> 10) & 0x3ff;
731
0
  uint64_t b = p & 0x3ff;
732
733
0
  buffer->a = 1.0;
734
0
  buffer->r = pixman_unorm_to_float (r, 10);
735
0
  buffer->g = pixman_unorm_to_float (g, 10);
736
0
  buffer->b = pixman_unorm_to_float (b, 10);
737
738
0
  buffer++;
739
0
    }
740
0
}
Unexecuted instantiation: pixman-access.c:fetch_scanline_x2r10g10b10_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x2r10g10b10_float
741
742
/* Expects a float buffer */
743
static void
744
fetch_scanline_a2b10g10r10_float (bits_image_t   *image,
745
          int             x,
746
          int             y,
747
          int             width,
748
          uint32_t *      b,
749
          const uint32_t *mask)
750
0
{
751
0
    const uint32_t *bits = image->bits + y * image->rowstride;
752
0
    const uint32_t *pixel = bits + x;
753
0
    const uint32_t *end = pixel + width;
754
0
    argb_t *buffer = (argb_t *)b;
755
756
0
    while (pixel < end)
757
0
    {
758
0
  uint32_t p = READ (image, pixel++);
759
0
  uint64_t a = p >> 30;
760
0
  uint64_t b = (p >> 20) & 0x3ff;
761
0
  uint64_t g = (p >> 10) & 0x3ff;
762
0
  uint64_t r = p & 0x3ff;
763
764
0
  buffer->a = pixman_unorm_to_float (a, 2);
765
0
  buffer->r = pixman_unorm_to_float (r, 10);
766
0
  buffer->g = pixman_unorm_to_float (g, 10);
767
0
  buffer->b = pixman_unorm_to_float (b, 10);
768
769
0
  buffer++;
770
0
    }
771
0
}
Unexecuted instantiation: pixman-access.c:fetch_scanline_a2b10g10r10_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a2b10g10r10_float
772
773
/* Expects a float buffer */
774
static void
775
fetch_scanline_x2b10g10r10_float (bits_image_t   *image,
776
          int             x,
777
          int             y,
778
          int             width,
779
          uint32_t *      b,
780
          const uint32_t *mask)
781
0
{
782
0
    const uint32_t *bits = image->bits + y * image->rowstride;
783
0
    const uint32_t *pixel = (uint32_t *)bits + x;
784
0
    const uint32_t *end = pixel + width;
785
0
    argb_t *buffer = (argb_t *)b;
786
787
0
    while (pixel < end)
788
0
    {
789
0
  uint32_t p = READ (image, pixel++);
790
0
  uint64_t b = (p >> 20) & 0x3ff;
791
0
  uint64_t g = (p >> 10) & 0x3ff;
792
0
  uint64_t r = p & 0x3ff;
793
794
0
  buffer->a = 1.0;
795
0
  buffer->r = pixman_unorm_to_float (r, 10);
796
0
  buffer->g = pixman_unorm_to_float (g, 10);
797
0
  buffer->b = pixman_unorm_to_float (b, 10);
798
799
0
  buffer++;
800
0
    }
801
0
}
Unexecuted instantiation: pixman-access.c:fetch_scanline_x2b10g10r10_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x2b10g10r10_float
802
803
static void
804
fetch_scanline_yuy2 (bits_image_t   *image,
805
                     int             x,
806
                     int             line,
807
                     int             width,
808
                     uint32_t *      buffer,
809
                     const uint32_t *mask)
810
0
{
811
0
    const uint32_t *bits = image->bits + image->rowstride * line;
812
0
    int i;
813
    
814
0
    for (i = 0; i < width; i++)
815
0
    {
816
0
  int16_t y, u, v;
817
0
  int32_t r, g, b;
818
  
819
0
  y = ((uint8_t *) bits)[(x + i) << 1] - 16;
820
0
  u = ((uint8_t *) bits)[(((x + i) << 1) & - 4) + 1] - 128;
821
0
  v = ((uint8_t *) bits)[(((x + i) << 1) & - 4) + 3] - 128;
822
  
823
  /* R = 1.164(Y - 16) + 1.596(V - 128) */
824
0
  r = 0x012b27 * y + 0x019a2e * v;
825
  /* G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) */
826
0
  g = 0x012b27 * y - 0x00d0f2 * v - 0x00647e * u;
827
  /* B = 1.164(Y - 16) + 2.018(U - 128) */
828
0
  b = 0x012b27 * y + 0x0206a2 * u;
829
  
830
0
  *buffer++ = 0xff000000 |
831
0
      (r >= 0 ? r < 0x1000000 ? r         & 0xff0000 : 0xff0000 : 0) |
832
0
      (g >= 0 ? g < 0x1000000 ? (g >> 8)  & 0x00ff00 : 0x00ff00 : 0) |
833
0
      (b >= 0 ? b < 0x1000000 ? (b >> 16) & 0x0000ff : 0x0000ff : 0);
834
0
    }
835
0
}
Unexecuted instantiation: pixman-access.c:fetch_scanline_yuy2
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_yuy2
836
837
static void
838
fetch_scanline_yv12 (bits_image_t   *image,
839
                     int             x,
840
                     int             line,
841
                     int             width,
842
                     uint32_t *      buffer,
843
                     const uint32_t *mask)
844
0
{
845
0
    YV12_SETUP (image);
846
0
    uint8_t *y_line = YV12_Y (line);
847
0
    uint8_t *u_line = YV12_U (line);
848
0
    uint8_t *v_line = YV12_V (line);
849
0
    int i;
850
    
851
0
    for (i = 0; i < width; i++)
852
0
    {
853
0
  int16_t y, u, v;
854
0
  int32_t r, g, b;
855
856
0
  y = y_line[x + i] - 16;
857
0
  u = u_line[(x + i) >> 1] - 128;
858
0
  v = v_line[(x + i) >> 1] - 128;
859
860
  /* R = 1.164(Y - 16) + 1.596(V - 128) */
861
0
  r = 0x012b27 * y + 0x019a2e * v;
862
  /* G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) */
863
0
  g = 0x012b27 * y - 0x00d0f2 * v - 0x00647e * u;
864
  /* B = 1.164(Y - 16) + 2.018(U - 128) */
865
0
  b = 0x012b27 * y + 0x0206a2 * u;
866
867
0
  *buffer++ = 0xff000000 |
868
0
      (r >= 0 ? r < 0x1000000 ? r         & 0xff0000 : 0xff0000 : 0) |
869
0
      (g >= 0 ? g < 0x1000000 ? (g >> 8)  & 0x00ff00 : 0x00ff00 : 0) |
870
0
      (b >= 0 ? b < 0x1000000 ? (b >> 16) & 0x0000ff : 0x0000ff : 0);
871
0
    }
872
0
}
Unexecuted instantiation: pixman-access.c:fetch_scanline_yv12
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_yv12
873
874
/**************************** Pixel wise fetching *****************************/
875
876
#ifndef PIXMAN_FB_ACCESSORS
877
static argb_t
878
fetch_pixel_rgbf_float (bits_image_t *image,
879
      int     offset,
880
      int     line)
881
0
{
882
0
    float *bits = (float *)image->bits + line * image->rowstride;
883
0
    argb_t argb;
884
885
0
    argb.r = bits[offset * 3];
886
0
    argb.g = bits[offset * 3 + 1];
887
0
    argb.b = bits[offset * 3 + 2];
888
0
    argb.a = 1.f;
889
890
0
    return argb;
891
0
}
892
893
static argb_t
894
fetch_pixel_rgbaf_float (bits_image_t *image,
895
       int      offset,
896
       int      line)
897
0
{
898
0
    float *bits = (float *)image->bits + line * image->rowstride;
899
0
    argb_t argb;
900
901
0
    argb.r = bits[offset * 4];
902
0
    argb.g = bits[offset * 4 + 1];
903
0
    argb.b = bits[offset * 4 + 2];
904
0
    argb.a = bits[offset * 4 + 3];
905
906
0
    return argb;
907
0
}
908
#endif
909
910
static argb_t
911
fetch_pixel_x2r10g10b10_float (bits_image_t *image,
912
             int     offset,
913
             int           line)
914
0
{
915
0
    uint32_t *bits = image->bits + line * image->rowstride;
916
0
    uint32_t p = READ (image, bits + offset);
917
0
    uint64_t r = (p >> 20) & 0x3ff;
918
0
    uint64_t g = (p >> 10) & 0x3ff;
919
0
    uint64_t b = p & 0x3ff;
920
0
    argb_t argb;
921
922
0
    argb.a = 1.0;
923
0
    argb.r = pixman_unorm_to_float (r, 10);
924
0
    argb.g = pixman_unorm_to_float (g, 10);
925
0
    argb.b = pixman_unorm_to_float (b, 10);
926
927
0
    return argb;
928
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_x2r10g10b10_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x2r10g10b10_float
929
930
static argb_t
931
fetch_pixel_a2r10g10b10_float (bits_image_t *image,
932
             int       offset,
933
             int           line)
934
0
{
935
0
    uint32_t *bits = image->bits + line * image->rowstride;
936
0
    uint32_t p = READ (image, bits + offset);
937
0
    uint64_t a = p >> 30;
938
0
    uint64_t r = (p >> 20) & 0x3ff;
939
0
    uint64_t g = (p >> 10) & 0x3ff;
940
0
    uint64_t b = p & 0x3ff;
941
0
    argb_t argb;
942
943
0
    argb.a = pixman_unorm_to_float (a, 2);
944
0
    argb.r = pixman_unorm_to_float (r, 10);
945
0
    argb.g = pixman_unorm_to_float (g, 10);
946
0
    argb.b = pixman_unorm_to_float (b, 10);
947
948
0
    return argb;
949
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_a2r10g10b10_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a2r10g10b10_float
950
951
static argb_t
952
fetch_pixel_a2b10g10r10_float (bits_image_t *image,
953
             int           offset,
954
             int           line)
955
0
{
956
0
    uint32_t *bits = image->bits + line * image->rowstride;
957
0
    uint32_t p = READ (image, bits + offset);
958
0
    uint64_t a = p >> 30;
959
0
    uint64_t b = (p >> 20) & 0x3ff;
960
0
    uint64_t g = (p >> 10) & 0x3ff;
961
0
    uint64_t r = p & 0x3ff;
962
0
    argb_t argb;
963
964
0
    argb.a = pixman_unorm_to_float (a, 2);
965
0
    argb.r = pixman_unorm_to_float (r, 10);
966
0
    argb.g = pixman_unorm_to_float (g, 10);
967
0
    argb.b = pixman_unorm_to_float (b, 10);
968
969
0
    return argb;
970
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_a2b10g10r10_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a2b10g10r10_float
971
972
static argb_t
973
fetch_pixel_x2b10g10r10_float (bits_image_t *image,
974
             int           offset,
975
             int           line)
976
0
{
977
0
    uint32_t *bits = image->bits + line * image->rowstride;
978
0
    uint32_t p = READ (image, bits + offset);
979
0
    uint64_t b = (p >> 20) & 0x3ff;
980
0
    uint64_t g = (p >> 10) & 0x3ff;
981
0
    uint64_t r = p & 0x3ff;
982
0
    argb_t argb;
983
984
0
    argb.a = 1.0;
985
0
    argb.r = pixman_unorm_to_float (r, 10);
986
0
    argb.g = pixman_unorm_to_float (g, 10);
987
0
    argb.b = pixman_unorm_to_float (b, 10);
988
989
0
    return argb;
990
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_x2b10g10r10_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x2b10g10r10_float
991
992
static argb_t
993
fetch_pixel_a8r8g8b8_sRGB_float (bits_image_t *image,
994
         int         offset,
995
         int           line)
996
0
{
997
0
    uint32_t *bits = image->bits + line * image->rowstride;
998
0
    uint32_t p = READ (image, bits + offset);
999
0
    argb_t argb;
1000
1001
0
    argb.a = pixman_unorm_to_float ((p >> 24) & 0xff, 8);
1002
1003
0
    argb.r = to_linear [(p >> 16) & 0xff];
1004
0
    argb.g = to_linear [(p >>  8) & 0xff];
1005
0
    argb.b = to_linear [(p >>  0) & 0xff];
1006
1007
0
    return argb;
1008
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_a8r8g8b8_sRGB_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a8r8g8b8_sRGB_float
1009
1010
static argb_t
1011
fetch_pixel_r8g8b8_sRGB_float (bits_image_t *image,
1012
             int       offset,
1013
             int           line)
1014
0
{
1015
0
    uint8_t *bits = (uint8_t *)(image->bits + line * image->rowstride);
1016
0
    uint32_t p = FETCH_24 (image, bits, offset);
1017
0
    argb_t argb;
1018
1019
0
    argb.a = 1.0f;
1020
1021
0
    argb.r = to_linear[(p >> 16) & 0xff];
1022
0
    argb.g = to_linear[(p >>  8) & 0xff];
1023
0
    argb.b = to_linear[(p >>  0) & 0xff];
1024
1025
0
    return argb;
1026
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_r8g8b8_sRGB_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r8g8b8_sRGB_float
1027
1028
static uint32_t
1029
fetch_pixel_yuy2 (bits_image_t *image,
1030
      int           offset,
1031
      int           line)
1032
0
{
1033
0
    const uint32_t *bits = image->bits + image->rowstride * line;
1034
    
1035
0
    int16_t y, u, v;
1036
0
    int32_t r, g, b;
1037
    
1038
0
    y = ((uint8_t *) bits)[offset << 1] - 16;
1039
0
    u = ((uint8_t *) bits)[((offset << 1) & - 4) + 1] - 128;
1040
0
    v = ((uint8_t *) bits)[((offset << 1) & - 4) + 3] - 128;
1041
    
1042
    /* R = 1.164(Y - 16) + 1.596(V - 128) */
1043
0
    r = 0x012b27 * y + 0x019a2e * v;
1044
    
1045
    /* G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) */
1046
0
    g = 0x012b27 * y - 0x00d0f2 * v - 0x00647e * u;
1047
    
1048
    /* B = 1.164(Y - 16) + 2.018(U - 128) */
1049
0
    b = 0x012b27 * y + 0x0206a2 * u;
1050
    
1051
0
    return 0xff000000 |
1052
0
  (r >= 0 ? r < 0x1000000 ? r         & 0xff0000 : 0xff0000 : 0) |
1053
0
  (g >= 0 ? g < 0x1000000 ? (g >> 8)  & 0x00ff00 : 0x00ff00 : 0) |
1054
0
  (b >= 0 ? b < 0x1000000 ? (b >> 16) & 0x0000ff : 0x0000ff : 0);
1055
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_yuy2
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_yuy2
1056
1057
static uint32_t
1058
fetch_pixel_yv12 (bits_image_t *image,
1059
      int           offset,
1060
      int           line)
1061
0
{
1062
0
    YV12_SETUP (image);
1063
0
    int16_t y = YV12_Y (line)[offset] - 16;
1064
0
    int16_t u = YV12_U (line)[offset >> 1] - 128;
1065
0
    int16_t v = YV12_V (line)[offset >> 1] - 128;
1066
0
    int32_t r, g, b;
1067
    
1068
    /* R = 1.164(Y - 16) + 1.596(V - 128) */
1069
0
    r = 0x012b27 * y + 0x019a2e * v;
1070
    
1071
    /* G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) */
1072
0
    g = 0x012b27 * y - 0x00d0f2 * v - 0x00647e * u;
1073
    
1074
    /* B = 1.164(Y - 16) + 2.018(U - 128) */
1075
0
    b = 0x012b27 * y + 0x0206a2 * u;
1076
    
1077
0
    return 0xff000000 |
1078
0
  (r >= 0 ? r < 0x1000000 ? r         & 0xff0000 : 0xff0000 : 0) |
1079
0
  (g >= 0 ? g < 0x1000000 ? (g >> 8)  & 0x00ff00 : 0x00ff00 : 0) |
1080
0
  (b >= 0 ? b < 0x1000000 ? (b >> 16) & 0x0000ff : 0x0000ff : 0);
1081
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_yv12
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_yv12
1082
1083
/*********************************** Store ************************************/
1084
1085
#ifndef PIXMAN_FB_ACCESSORS
1086
static void
1087
store_scanline_rgbaf_float (bits_image_t *  image,
1088
          int             x,
1089
          int             y,
1090
          int             width,
1091
          const uint32_t *v)
1092
0
{
1093
0
    float *bits = (float *)image->bits + image->rowstride * y + 4 * x;
1094
0
    const argb_t *values = (argb_t *)v;
1095
1096
0
    for (; width; width--, values++)
1097
0
    {
1098
0
  *bits++ = values->r;
1099
0
  *bits++ = values->g;
1100
0
  *bits++ = values->b;
1101
0
  *bits++ = values->a;
1102
0
    }
1103
0
}
1104
1105
static void
1106
store_scanline_rgbf_float (bits_image_t *  image,
1107
         int             x,
1108
         int             y,
1109
         int             width,
1110
         const uint32_t *v)
1111
0
{
1112
0
    float *bits = (float *)image->bits + image->rowstride * y + 3 * x;
1113
0
    const argb_t *values = (argb_t *)v;
1114
1115
0
    for (; width; width--, values++)
1116
0
    {
1117
0
  *bits++ = values->r;
1118
0
  *bits++ = values->g;
1119
0
  *bits++ = values->b;
1120
0
    }
1121
0
}
1122
#endif
1123
1124
static void
1125
store_scanline_a2r10g10b10_float (bits_image_t *  image,
1126
          int             x,
1127
          int             y,
1128
          int             width,
1129
          const uint32_t *v)
1130
0
{
1131
0
    uint32_t *bits = image->bits + image->rowstride * y;
1132
0
    uint32_t *pixel = bits + x;
1133
0
    argb_t *values = (argb_t *)v;
1134
0
    int i;
1135
1136
0
    for (i = 0; i < width; ++i)
1137
0
    {
1138
0
  uint32_t a, r, g, b;
1139
1140
0
  a = pixman_float_to_unorm (values[i].a, 2);
1141
0
  r = pixman_float_to_unorm (values[i].r, 10);
1142
0
  g = pixman_float_to_unorm (values[i].g, 10);
1143
0
  b = pixman_float_to_unorm (values[i].b, 10);
1144
1145
0
  WRITE (image, pixel++,
1146
0
         (a << 30) | (r << 20) | (g << 10) | b);
1147
0
    }
1148
0
}
Unexecuted instantiation: pixman-access.c:store_scanline_a2r10g10b10_float
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a2r10g10b10_float
1149
1150
static void
1151
store_scanline_x2r10g10b10_float (bits_image_t *  image,
1152
          int             x,
1153
          int             y,
1154
          int             width,
1155
          const uint32_t *v)
1156
0
{
1157
0
    uint32_t *bits = image->bits + image->rowstride * y;
1158
0
    uint32_t *pixel = bits + x;
1159
0
    argb_t *values = (argb_t *)v;
1160
0
    int i;
1161
1162
0
    for (i = 0; i < width; ++i)
1163
0
    {
1164
0
  uint32_t r, g, b;
1165
1166
0
  r = pixman_float_to_unorm (values[i].r, 10);
1167
0
  g = pixman_float_to_unorm (values[i].g, 10);
1168
0
  b = pixman_float_to_unorm (values[i].b, 10);
1169
1170
0
  WRITE (image, pixel++,
1171
0
         (r << 20) | (g << 10) | b);
1172
0
    }
1173
0
}
Unexecuted instantiation: pixman-access.c:store_scanline_x2r10g10b10_float
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x2r10g10b10_float
1174
1175
static void
1176
store_scanline_a2b10g10r10_float (bits_image_t *  image,
1177
          int             x,
1178
          int             y,
1179
          int             width,
1180
          const uint32_t *v)
1181
0
{
1182
0
    uint32_t *bits = image->bits + image->rowstride * y;
1183
0
    uint32_t *pixel = bits + x;
1184
0
    argb_t *values = (argb_t *)v;
1185
0
    int i;
1186
1187
0
    for (i = 0; i < width; ++i)
1188
0
    {
1189
0
  uint32_t a, r, g, b;
1190
1191
0
  a = pixman_float_to_unorm (values[i].a, 2);
1192
0
  r = pixman_float_to_unorm (values[i].r, 10);
1193
0
  g = pixman_float_to_unorm (values[i].g, 10);
1194
0
  b = pixman_float_to_unorm (values[i].b, 10);
1195
1196
0
  WRITE (image, pixel++,
1197
0
         (a << 30) | (b << 20) | (g << 10) | r);
1198
0
    }
1199
0
}
Unexecuted instantiation: pixman-access.c:store_scanline_a2b10g10r10_float
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a2b10g10r10_float
1200
1201
static void
1202
store_scanline_x2b10g10r10_float (bits_image_t *  image,
1203
          int             x,
1204
          int             y,
1205
          int             width,
1206
          const uint32_t *v)
1207
0
{
1208
0
    uint32_t *bits = image->bits + image->rowstride * y;
1209
0
    uint32_t *pixel = bits + x;
1210
0
    argb_t *values = (argb_t *)v;
1211
0
    int i;
1212
1213
0
    for (i = 0; i < width; ++i)
1214
0
    {
1215
0
  uint32_t r, g, b;
1216
1217
0
  r = pixman_float_to_unorm (values[i].r, 10);
1218
0
  g = pixman_float_to_unorm (values[i].g, 10);
1219
0
  b = pixman_float_to_unorm (values[i].b, 10);
1220
1221
0
  WRITE (image, pixel++,
1222
0
         (b << 20) | (g << 10) | r);
1223
0
    }
1224
0
}
Unexecuted instantiation: pixman-access.c:store_scanline_x2b10g10r10_float
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x2b10g10r10_float
1225
1226
static void
1227
store_scanline_a8r8g8b8_sRGB_float (bits_image_t *  image,
1228
            int             x,
1229
            int             y,
1230
            int             width,
1231
            const uint32_t *v)
1232
0
{
1233
0
    uint32_t *bits = image->bits + image->rowstride * y;
1234
0
    uint32_t *pixel = bits + x;
1235
0
    argb_t *values = (argb_t *)v;
1236
0
    int i;
1237
1238
0
    for (i = 0; i < width; ++i)
1239
0
    {
1240
0
  uint32_t a, r, g, b;
1241
1242
0
  a = pixman_float_to_unorm (values[i].a, 8);
1243
0
  r = to_srgb (values[i].r);
1244
0
  g = to_srgb (values[i].g);
1245
0
  b = to_srgb (values[i].b);
1246
1247
0
  WRITE (image, pixel++,
1248
0
         (a << 24) | (r << 16) | (g << 8) | b);
1249
0
    }
1250
0
}
Unexecuted instantiation: pixman-access.c:store_scanline_a8r8g8b8_sRGB_float
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a8r8g8b8_sRGB_float
1251
1252
static void
1253
store_scanline_r8g8b8_sRGB_float (bits_image_t *  image,
1254
          int             x,
1255
          int             y,
1256
          int             width,
1257
          const uint32_t *v)
1258
0
{
1259
0
    uint8_t *bits = (uint8_t *)(image->bits + image->rowstride * y) + 3 * x;
1260
0
    argb_t *values = (argb_t *)v;
1261
0
    int i;
1262
1263
0
    for (i = 0; i < width; ++i)
1264
0
    {
1265
0
  uint32_t r, g, b, rgb;
1266
1267
0
  r = to_srgb (values[i].r);
1268
0
  g = to_srgb (values[i].g);
1269
0
  b = to_srgb (values[i].b);
1270
1271
0
  rgb = (r << 16) | (g << 8) | b;
1272
1273
0
  STORE_24 (image, bits, i, rgb);
1274
0
    }
1275
0
}
Unexecuted instantiation: pixman-access.c:store_scanline_r8g8b8_sRGB_float
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r8g8b8_sRGB_float
1276
1277
/*
1278
 * Contracts a floating point image to 32bpp and then stores it using a
1279
 * regular 32-bit store proc. Despite the type, this function expects an
1280
 * argb_t buffer.
1281
 */
1282
static void
1283
store_scanline_generic_float (bits_image_t *  image,
1284
            int             x,
1285
            int             y,
1286
            int             width,
1287
            const uint32_t *values)
1288
0
{
1289
0
    uint32_t *argb8_pixels;
1290
1291
0
    assert (image->common.type == BITS);
1292
1293
0
    argb8_pixels = pixman_malloc_ab (width, sizeof(uint32_t));
1294
0
    if (!argb8_pixels)
1295
0
  return;
1296
1297
    /* Contract the scanline.  We could do this in place if values weren't
1298
     * const.
1299
     */
1300
0
    pixman_contract_from_float (argb8_pixels, (argb_t *)values, width);
1301
1302
0
    image->store_scanline_32 (image, x, y, width, argb8_pixels);
1303
1304
0
    free (argb8_pixels);
1305
0
}
Unexecuted instantiation: pixman-access.c:store_scanline_generic_float
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_generic_float
1306
1307
static void
1308
fetch_scanline_generic_float (bits_image_t *  image,
1309
            int       x,
1310
            int       y,
1311
            int       width,
1312
            uint32_t *      buffer,
1313
            const uint32_t *mask)
1314
0
{
1315
0
    image->fetch_scanline_32 (image, x, y, width, buffer, NULL);
1316
1317
0
    pixman_expand_to_float ((argb_t *)buffer, buffer, image->format, width);
1318
0
}
Unexecuted instantiation: pixman-access.c:fetch_scanline_generic_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_generic_float
1319
1320
/* The 32_sRGB paths should be deleted after narrow processing
1321
 * is no longer invoked for formats that are considered wide.
1322
 * (Also see fetch_pixel_generic_lossy_32) */
1323
static void
1324
fetch_scanline_a8r8g8b8_32_sRGB (bits_image_t   *image,
1325
                                 int             x,
1326
                                 int             y,
1327
                                 int             width,
1328
                                 uint32_t       *buffer,
1329
                                 const uint32_t *mask)
1330
0
{
1331
0
    const uint32_t *bits = image->bits + y * image->rowstride;
1332
0
    const uint32_t *pixel = (uint32_t *)bits + x;
1333
0
    const uint32_t *end = pixel + width;
1334
0
    uint32_t tmp;
1335
    
1336
0
    while (pixel < end)
1337
0
    {
1338
0
  uint32_t a, r, g, b;
1339
1340
0
  tmp = READ (image, pixel++);
1341
1342
0
  a = (tmp >> 24) & 0xff;
1343
0
  r = (tmp >> 16) & 0xff;
1344
0
  g = (tmp >> 8) & 0xff;
1345
0
  b = (tmp >> 0) & 0xff;
1346
1347
0
  r = to_linear[r] * 255.0f + 0.5f;
1348
0
  g = to_linear[g] * 255.0f + 0.5f;
1349
0
  b = to_linear[b] * 255.0f + 0.5f;
1350
1351
0
  *buffer++ = (a << 24) | (r << 16) | (g << 8) | (b << 0);
1352
0
    }
1353
0
}
Unexecuted instantiation: pixman-access.c:fetch_scanline_a8r8g8b8_32_sRGB
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a8r8g8b8_32_sRGB
1354
1355
static void
1356
fetch_scanline_r8g8b8_32_sRGB (bits_image_t   *image,
1357
                               int             x,
1358
                               int             y,
1359
                               int             width,
1360
                               uint32_t       *buffer,
1361
                               const uint32_t *mask)
1362
0
{
1363
0
    const uint8_t *bits = (uint8_t *)(image->bits + y * image->rowstride) + 3 * x;
1364
0
    uint32_t tmp;
1365
0
    int i;
1366
1367
0
    for (i = 0; i < width; ++i)
1368
0
    {
1369
0
  uint32_t a, r, g, b;
1370
1371
0
  tmp = FETCH_24 (image, bits, i);
1372
1373
0
  a = 0xff;
1374
0
  r = (tmp >> 16) & 0xff;
1375
0
  g = (tmp >> 8) & 0xff;
1376
0
  b = (tmp >> 0) & 0xff;
1377
1378
0
  r = to_linear[r] * 255.0f + 0.5f;
1379
0
  g = to_linear[g] * 255.0f + 0.5f;
1380
0
  b = to_linear[b] * 255.0f + 0.5f;
1381
1382
0
  *buffer++ = (a << 24) | (r << 16) | (g << 8) | (b << 0);
1383
0
    }
1384
0
}
Unexecuted instantiation: pixman-access.c:fetch_scanline_r8g8b8_32_sRGB
Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r8g8b8_32_sRGB
1385
1386
static uint32_t
1387
fetch_pixel_a8r8g8b8_32_sRGB (bits_image_t *image,
1388
            int           offset,
1389
            int           line)
1390
0
{
1391
0
    uint32_t *bits = image->bits + line * image->rowstride;
1392
0
    uint32_t tmp = READ (image, bits + offset);
1393
0
    uint32_t a, r, g, b;
1394
1395
0
    a = (tmp >> 24) & 0xff;
1396
0
    r = (tmp >> 16) & 0xff;
1397
0
    g = (tmp >> 8) & 0xff;
1398
0
    b = (tmp >> 0) & 0xff;
1399
1400
0
    r = to_linear[r] * 255.0f + 0.5f;
1401
0
    g = to_linear[g] * 255.0f + 0.5f;
1402
0
    b = to_linear[b] * 255.0f + 0.5f;
1403
1404
0
    return (a << 24) | (r << 16) | (g << 8) | (b << 0);
1405
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_a8r8g8b8_32_sRGB
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a8r8g8b8_32_sRGB
1406
1407
static uint32_t
1408
fetch_pixel_r8g8b8_32_sRGB (bits_image_t *image,
1409
          int           offset,
1410
          int           line)
1411
0
{
1412
0
    uint8_t *bits = (uint8_t *)(image->bits + line * image->rowstride);
1413
0
    uint32_t tmp = FETCH_24 (image, bits, offset);
1414
0
    uint32_t a, r, g, b;
1415
1416
0
    a = 0xff;
1417
0
    r = (tmp >> 16) & 0xff;
1418
0
    g = (tmp >> 8) & 0xff;
1419
0
    b = (tmp >> 0) & 0xff;
1420
1421
0
    r = to_linear[r] * 255.0f + 0.5f;
1422
0
    g = to_linear[g] * 255.0f + 0.5f;
1423
0
    b = to_linear[b] * 255.0f + 0.5f;
1424
1425
0
    return (a << 24) | (r << 16) | (g << 8) | (b << 0);
1426
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_r8g8b8_32_sRGB
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r8g8b8_32_sRGB
1427
1428
static void
1429
store_scanline_a8r8g8b8_32_sRGB (bits_image_t   *image,
1430
                                 int             x,
1431
                                 int             y,
1432
                                 int             width,
1433
                                 const uint32_t *v)
1434
0
{
1435
0
    uint32_t *bits = image->bits + image->rowstride * y;
1436
0
    uint64_t *values = (uint64_t *)v;
1437
0
    uint32_t *pixel = bits + x;
1438
0
    uint64_t tmp;
1439
0
    int i;
1440
    
1441
0
    for (i = 0; i < width; ++i)
1442
0
    {
1443
0
  uint32_t a, r, g, b;
1444
1445
0
  tmp = values[i];
1446
1447
0
  a = (tmp >> 24) & 0xff;
1448
0
  r = (tmp >> 16) & 0xff;
1449
0
  g = (tmp >> 8) & 0xff;
1450
0
  b = (tmp >> 0) & 0xff;
1451
1452
0
  r = to_srgb (r * (1/255.0f));
1453
0
  g = to_srgb (g * (1/255.0f));
1454
0
  b = to_srgb (b * (1/255.0f));
1455
  
1456
0
  WRITE (image, pixel++, a | (r << 16) | (g << 8) | (b << 0));
1457
0
    }
1458
0
}
Unexecuted instantiation: pixman-access.c:store_scanline_a8r8g8b8_32_sRGB
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a8r8g8b8_32_sRGB
1459
1460
static void
1461
store_scanline_r8g8b8_32_sRGB (bits_image_t   *image,
1462
             int             x,
1463
                               int             y,
1464
                               int             width,
1465
                               const uint32_t *v)
1466
0
{
1467
0
    uint8_t *bits = (uint8_t *)(image->bits + image->rowstride * y) + 3 * x;
1468
0
    uint64_t *values = (uint64_t *)v;
1469
0
    uint64_t tmp;
1470
0
    int i;
1471
1472
0
    for (i = 0; i < width; ++i)
1473
0
    {
1474
0
  uint32_t r, g, b;
1475
1476
0
  tmp = values[i];
1477
1478
0
  r = (tmp >> 16) & 0xff;
1479
0
  g = (tmp >> 8) & 0xff;
1480
0
  b = (tmp >> 0) & 0xff;
1481
1482
0
  r = to_srgb (r * (1/255.0f));
1483
0
  g = to_srgb (g * (1/255.0f));
1484
0
  b = to_srgb (b * (1/255.0f));
1485
1486
0
  STORE_24 (image, bits, i, (r << 16) | (g << 8) | (b << 0));
1487
0
    }
1488
0
}
Unexecuted instantiation: pixman-access.c:store_scanline_r8g8b8_32_sRGB
Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r8g8b8_32_sRGB
1489
1490
static argb_t
1491
fetch_pixel_generic_float (bits_image_t *image,
1492
         int     offset,
1493
         int           line)
1494
0
{
1495
0
    uint32_t pixel32 = image->fetch_pixel_32 (image, offset, line);
1496
0
    argb_t f;
1497
1498
0
    pixman_expand_to_float (&f, &pixel32, image->format, 1);
1499
1500
0
    return f;
1501
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_generic_float
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_generic_float
1502
1503
/*
1504
 * XXX: The transformed fetch path only works at 32-bpp so far.  When all
1505
 * paths have wide versions, this can be removed.
1506
 *
1507
 * WARNING: This function loses precision!
1508
 */
1509
static uint32_t
1510
fetch_pixel_generic_lossy_32 (bits_image_t *image,
1511
            int           offset,
1512
            int           line)
1513
0
{
1514
0
    argb_t pixel64 = image->fetch_pixel_float (image, offset, line);
1515
0
    uint32_t result;
1516
1517
0
    pixman_contract_from_float (&result, &pixel64, 1);
1518
1519
0
    return result;
1520
0
}
Unexecuted instantiation: pixman-access.c:fetch_pixel_generic_lossy_32
Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_generic_lossy_32
1521
1522
typedef struct
1523
{
1524
    pixman_format_code_t  format;
1525
    fetch_scanline_t    fetch_scanline_32;
1526
    fetch_scanline_t    fetch_scanline_float;
1527
    fetch_pixel_32_t    fetch_pixel_32;
1528
    fetch_pixel_float_t   fetch_pixel_float;
1529
    store_scanline_t    store_scanline_32;
1530
    store_scanline_t    store_scanline_float;
1531
} format_info_t;
1532
1533
#define FORMAT_INFO(format)             \
1534
    {                 \
1535
  PIXMAN_ ## format,            \
1536
      fetch_scanline_ ## format,          \
1537
      fetch_scanline_generic_float,       \
1538
      fetch_pixel_ ## format,         \
1539
      fetch_pixel_generic_float,          \
1540
      store_scanline_ ## format,          \
1541
      store_scanline_generic_float        \
1542
    }
1543
1544
static const format_info_t accessors[] =
1545
{
1546
/* 32 bpp formats */
1547
    FORMAT_INFO (a8r8g8b8),
1548
    FORMAT_INFO (x8r8g8b8),
1549
    FORMAT_INFO (a8b8g8r8),
1550
    FORMAT_INFO (x8b8g8r8),
1551
    FORMAT_INFO (b8g8r8a8),
1552
    FORMAT_INFO (b8g8r8x8),
1553
    FORMAT_INFO (r8g8b8a8),
1554
    FORMAT_INFO (r8g8b8x8),
1555
    FORMAT_INFO (x14r6g6b6),
1556
1557
/* sRGB formats */
1558
  { PIXMAN_a8r8g8b8_sRGB,
1559
    fetch_scanline_a8r8g8b8_32_sRGB, fetch_scanline_a8r8g8b8_sRGB_float,
1560
    fetch_pixel_a8r8g8b8_32_sRGB, fetch_pixel_a8r8g8b8_sRGB_float,
1561
    store_scanline_a8r8g8b8_32_sRGB, store_scanline_a8r8g8b8_sRGB_float,
1562
  },
1563
  { PIXMAN_r8g8b8_sRGB,
1564
    fetch_scanline_r8g8b8_32_sRGB, fetch_scanline_r8g8b8_sRGB_float,
1565
    fetch_pixel_r8g8b8_32_sRGB, fetch_pixel_r8g8b8_sRGB_float,
1566
    store_scanline_r8g8b8_32_sRGB, store_scanline_r8g8b8_sRGB_float,
1567
  },
1568
1569
/* 24bpp formats */
1570
    FORMAT_INFO (r8g8b8),
1571
    FORMAT_INFO (b8g8r8),
1572
    
1573
/* 16bpp formats */
1574
    FORMAT_INFO (r5g6b5),
1575
    FORMAT_INFO (b5g6r5),
1576
    
1577
    FORMAT_INFO (a1r5g5b5),
1578
    FORMAT_INFO (x1r5g5b5),
1579
    FORMAT_INFO (a1b5g5r5),
1580
    FORMAT_INFO (x1b5g5r5),
1581
    FORMAT_INFO (a4r4g4b4),
1582
    FORMAT_INFO (x4r4g4b4),
1583
    FORMAT_INFO (a4b4g4r4),
1584
    FORMAT_INFO (x4b4g4r4),
1585
    
1586
/* 8bpp formats */
1587
    FORMAT_INFO (a8),
1588
    FORMAT_INFO (r3g3b2),
1589
    FORMAT_INFO (b2g3r3),
1590
    FORMAT_INFO (a2r2g2b2),
1591
    FORMAT_INFO (a2b2g2r2),
1592
    
1593
    FORMAT_INFO (c8),
1594
    
1595
    FORMAT_INFO (g8),
1596
    
1597
#define fetch_scanline_x4c4 fetch_scanline_c8
1598
#define fetch_pixel_x4c4 fetch_pixel_c8
1599
#define store_scanline_x4c4 store_scanline_c8
1600
    FORMAT_INFO (x4c4),
1601
    
1602
#define fetch_scanline_x4g4 fetch_scanline_g8
1603
#define fetch_pixel_x4g4 fetch_pixel_g8
1604
#define store_scanline_x4g4 store_scanline_g8
1605
    FORMAT_INFO (x4g4),
1606
    
1607
    FORMAT_INFO (x4a4),
1608
    
1609
/* 4bpp formats */
1610
    FORMAT_INFO (a4),
1611
    FORMAT_INFO (r1g2b1),
1612
    FORMAT_INFO (b1g2r1),
1613
    FORMAT_INFO (a1r1g1b1),
1614
    FORMAT_INFO (a1b1g1r1),
1615
    
1616
    FORMAT_INFO (c4),
1617
    
1618
    FORMAT_INFO (g4),
1619
    
1620
/* 1bpp formats */
1621
    FORMAT_INFO (a1),
1622
    FORMAT_INFO (g1),
1623
    
1624
/* Wide formats */
1625
#ifndef PIXMAN_FB_ACCESSORS
1626
    { PIXMAN_rgba_float,
1627
      NULL, fetch_scanline_rgbaf_float,
1628
      fetch_pixel_generic_lossy_32, fetch_pixel_rgbaf_float,
1629
      NULL, store_scanline_rgbaf_float },
1630
1631
    { PIXMAN_rgb_float,
1632
      NULL, fetch_scanline_rgbf_float,
1633
      fetch_pixel_generic_lossy_32, fetch_pixel_rgbf_float,
1634
      NULL, store_scanline_rgbf_float },
1635
#endif
1636
1637
    { PIXMAN_a2r10g10b10,
1638
      NULL, fetch_scanline_a2r10g10b10_float,
1639
      fetch_pixel_generic_lossy_32, fetch_pixel_a2r10g10b10_float,
1640
      NULL, store_scanline_a2r10g10b10_float },
1641
1642
    { PIXMAN_x2r10g10b10,
1643
      NULL, fetch_scanline_x2r10g10b10_float,
1644
      fetch_pixel_generic_lossy_32, fetch_pixel_x2r10g10b10_float,
1645
      NULL, store_scanline_x2r10g10b10_float },
1646
1647
    { PIXMAN_a2b10g10r10,
1648
      NULL, fetch_scanline_a2b10g10r10_float,
1649
      fetch_pixel_generic_lossy_32, fetch_pixel_a2b10g10r10_float,
1650
      NULL, store_scanline_a2b10g10r10_float },
1651
1652
    { PIXMAN_x2b10g10r10,
1653
      NULL, fetch_scanline_x2b10g10r10_float,
1654
      fetch_pixel_generic_lossy_32, fetch_pixel_x2b10g10r10_float,
1655
      NULL, store_scanline_x2b10g10r10_float },
1656
1657
/* YUV formats */
1658
    { PIXMAN_yuy2,
1659
      fetch_scanline_yuy2, fetch_scanline_generic_float,
1660
      fetch_pixel_yuy2, fetch_pixel_generic_float,
1661
      NULL, NULL },
1662
1663
    { PIXMAN_yv12,
1664
      fetch_scanline_yv12, fetch_scanline_generic_float,
1665
      fetch_pixel_yv12, fetch_pixel_generic_float,
1666
      NULL, NULL },
1667
    
1668
    { PIXMAN_null },
1669
};
1670
1671
static void
1672
setup_accessors (bits_image_t *image)
1673
65
{
1674
65
    const format_info_t *info = accessors;
1675
    
1676
1.54k
    while (info->format != PIXMAN_null)
1677
1.54k
    {
1678
1.54k
  if (info->format == image->format)
1679
65
  {
1680
65
      image->fetch_scanline_32 = info->fetch_scanline_32;
1681
65
      image->fetch_scanline_float = info->fetch_scanline_float;
1682
65
      image->fetch_pixel_32 = info->fetch_pixel_32;
1683
65
      image->fetch_pixel_float = info->fetch_pixel_float;
1684
65
      image->store_scanline_32 = info->store_scanline_32;
1685
65
      image->store_scanline_float = info->store_scanline_float;
1686
      
1687
65
      return;
1688
65
  }
1689
  
1690
1.48k
  info++;
1691
1.48k
    }
1692
65
}
pixman-access.c:setup_accessors
Line
Count
Source
1673
65
{
1674
65
    const format_info_t *info = accessors;
1675
    
1676
1.54k
    while (info->format != PIXMAN_null)
1677
1.54k
    {
1678
1.54k
  if (info->format == image->format)
1679
65
  {
1680
65
      image->fetch_scanline_32 = info->fetch_scanline_32;
1681
65
      image->fetch_scanline_float = info->fetch_scanline_float;
1682
65
      image->fetch_pixel_32 = info->fetch_pixel_32;
1683
65
      image->fetch_pixel_float = info->fetch_pixel_float;
1684
65
      image->store_scanline_32 = info->store_scanline_32;
1685
65
      image->store_scanline_float = info->store_scanline_float;
1686
      
1687
65
      return;
1688
65
  }
1689
  
1690
1.48k
  info++;
1691
1.48k
    }
1692
65
}
Unexecuted instantiation: pixman-access-accessors.c:setup_accessors
1693
1694
#ifndef PIXMAN_FB_ACCESSORS
1695
void
1696
_pixman_bits_image_setup_accessors_accessors (bits_image_t *image);
1697
1698
void
1699
_pixman_bits_image_setup_accessors (bits_image_t *image)
1700
65
{
1701
65
    if (image->read_func || image->write_func)
1702
0
  _pixman_bits_image_setup_accessors_accessors (image);
1703
65
    else
1704
65
  setup_accessors (image);
1705
65
}
1706
1707
#else
1708
1709
void
1710
_pixman_bits_image_setup_accessors_accessors (bits_image_t *image)
1711
0
{
1712
0
    setup_accessors (image);
1713
0
}
1714
1715
#endif