2 * QEMU OMAP LCD Emulator templates
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
19 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
21 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
25 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 # define PIXEL_TYPE uint8_t
33 #elif DEPTH == 15 || DEPTH == 16
35 # define PIXEL_TYPE uint16_t
38 # define PIXEL_TYPE uint32_t
40 # error unsupport depth
46 static void glue(draw_line2_, DEPTH)(void *opaque,
47 uint8_t *d, const uint8_t *s, int width, int deststep)
49 uint16_t *pal = opaque;
53 v = ldub_p((void *) s);
54 r = (pal[v & 3] >> 4) & 0xf0;
55 g = pal[v & 3] & 0xf0;
56 b = (pal[v & 3] << 4) & 0xf0;
57 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, DEPTH)(r, g, b);
60 r = (pal[v & 3] >> 4) & 0xf0;
61 g = pal[v & 3] & 0xf0;
62 b = (pal[v & 3] << 4) & 0xf0;
63 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, DEPTH)(r, g, b);
66 r = (pal[v & 3] >> 4) & 0xf0;
67 g = pal[v & 3] & 0xf0;
68 b = (pal[v & 3] << 4) & 0xf0;
69 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, DEPTH)(r, g, b);
72 r = (pal[v & 3] >> 4) & 0xf0;
73 g = pal[v & 3] & 0xf0;
74 b = (pal[v & 3] << 4) & 0xf0;
75 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, DEPTH)(r, g, b);
85 static void glue(draw_line4_, DEPTH)(void *opaque,
86 uint8_t *d, const uint8_t *s, int width, int deststep)
88 uint16_t *pal = opaque;
92 v = ldub_p((void *) s);
93 r = (pal[v & 0xf] >> 4) & 0xf0;
94 g = pal[v & 0xf] & 0xf0;
95 b = (pal[v & 0xf] << 4) & 0xf0;
96 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, DEPTH)(r, g, b);
99 r = (pal[v & 0xf] >> 4) & 0xf0;
100 g = pal[v & 0xf] & 0xf0;
101 b = (pal[v & 0xf] << 4) & 0xf0;
102 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, DEPTH)(r, g, b);
112 static void glue(draw_line8_, DEPTH)(void *opaque,
113 uint8_t *d, const uint8_t *s, int width, int deststep)
115 uint16_t *pal = opaque;
119 v = ldub_p((void *) s);
120 r = (pal[v] >> 4) & 0xf0;
122 b = (pal[v] << 4) & 0xf0;
123 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, DEPTH)(r, g, b);
126 } while (-- width != 0);
132 static void glue(draw_line12_, DEPTH)(void *opaque,
133 uint8_t *d, const uint8_t *s, int width, int deststep)
139 v = lduw_p((void *) s);
143 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, DEPTH)(r, g, b);
146 } while (-- width != 0);
152 static void glue(draw_line16_, DEPTH)(void *opaque,
153 uint8_t *d, const uint8_t *s, int width, int deststep)
155 #if DEPTH == 16 && defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN)
156 memcpy(d, s, width * 2);
162 v = lduw_p((void *) s);
166 ((PIXEL_TYPE *) d)[0] = glue(rgb_to_pixel, DEPTH)(r, g, b);
169 } while (-- width != 0);