[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v3 04/10] hw/m68k: add video card
From: |
Thomas Huth |
Subject: |
Re: [Qemu-devel] [RFC v3 04/10] hw/m68k: add video card |
Date: |
Mon, 9 Jul 2018 19:03:18 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 |
On 28.06.2018 01:29, Laurent Vivier wrote:
> Co-developed-by: Mark Cave-Ayland <address@hidden>
> Signed-off-by: Mark Cave-Ayland <address@hidden>
> Signed-off-by: Laurent Vivier <address@hidden>
> ---
[...]
> diff --git a/hw/display/macfb-template.h b/hw/display/macfb-template.h
> new file mode 100644
> index 0000000000..b6ae5d728f
> --- /dev/null
> +++ b/hw/display/macfb-template.h
> @@ -0,0 +1,158 @@
> +#if defined(READ_BITS)
> +#define PALETTE(i, r, g, b) \
> + do { \
> + r = s->color_palette[i * 3]; \
> + g = s->color_palette[i * 3 + 1]; \
> + b = s->color_palette[i * 3 + 2]; \
> + } while (0)
> +
> +#if READ_BITS == 1
> +#define READ_PIXEL(from, x, r, g, b) \
> + do { \
> + int bit = x & 7; \
> + int idx = (*from >> (7 - bit)) & 1; \
> + r = g = b = ((1 - idx) << 7); \
> + from += (bit == 7); \
> + } while (0)
> +#elif READ_BITS == 2
> +#define READ_PIXEL(from, x, r, g, b) \
> + do { \
> + int bit = (x & 3); \
> + int idx = (*from >> ((3 - bit) << 1)) & 3; \
> + PALETTE(idx, r, g, b); \
> + from += (bit == 3); \
> + } while (0)
> +#elif READ_BITS == 4
> +#define READ_PIXEL(from, x, r, g, b) \
> + do { \
> + int bit = x & 1; \
> + int idx = (*from >> ((1 - bit) << 2)) & 15; \
> + PALETTE(idx, r, g, b); \
> + from += (bit == 1); \
> + } while (0)
> +#elif READ_BITS == 8
> +#define READ_PIXEL(from, x, r, g, b) \
> + do { \
> + PALETTE(*from, r, g, b); \
> + from++; \
> + } while (0)
> +#elif READ_BITS == 16
> +#define READ_PIXEL(from, x, r, g, b) \
> + do { \
> + uint16_t pixel; \
> + pixel = (from[0] << 8) | from[1]; \
> + r = ((pixel >> 10) & 0x1f) << 3; \
> + g = ((pixel >> 5) & 0x1f) << 3; \
> + b = (pixel & 0x1f) << 3; \
> + from += 2; \
> + } while (0)
> +#elif READ_BITS == 24
> +#define READ_PIXEL(from, x, r, g, b) \
> + do { \
> + r = *from++; \
> + g = *from++; \
> + b = *from++; \
> + } while (0)
> +#else
> +#error unknown bit depth
> +#endif
> +
> +#if WRITE_BITS == 8
> +#define WRITE_PIXEL(to, r, g, b) \
> + do { \
> + *to = rgb_to_pixel8(r, g, b); \
> + to += 1; \
> + } while (0)
> +#elif WRITE_BITS == 15
> +#define WRITE_PIXEL(to, r, g, b) \
> + do { \
> + *(uint16_t *)to = rgb_to_pixel15(r, g, b); \
> + to += 2; \
> + } while (0)
> +#elif WRITE_BITS == 16
> +#define WRITE_PIXEL(to, r, g, b) \
> + do { \
> + *(uint16_t *)to = rgb_to_pixel16(r, g, b); \
> + to += 2; \
> + } while (0)
> +#elif WRITE_BITS == 24
> +#define WRITE_PIXEL(to, r, g, b) \
> + do { \
> + uint32_t tmp = rgb_to_pixel24(r, g, b); \
> + *(to++) = tmp & 0xff; \
> + *(to++) = (tmp >> 8) & 0xff; \
> + *(to++) = (tmp >> 16) & 0xff; \
> + } while (0)
> +#elif WRITE_BITS == 32
> +#define WRITE_PIXEL(to, r, g, b) \
> + do { \
> + *(uint32_t *)to = rgb_to_pixel32(r, g, b); \
> + to += 4; \
> + } while (0)
> +#else
> +#error unknown bit depth
> +#endif
> +
> +static void glue(glue(glue(draw_line, READ_BITS), _), WRITE_BITS)
> + (MacfbState *s, uint8_t *to, uint8_t *from, int
> width)
> +{
> + uint8_t r, g, b;
> + int x;
> + for (x = 0; x < width; x++) {
> + READ_PIXEL(from, x, r, g, b);
> + WRITE_PIXEL(to, r, g, b);
> + }
> +}
> +#undef READ_BITS
> +#undef READ_PIXEL
> +#undef WRITE_PIXEL
> +
> +#elif defined(WRITE_BITS)
> +
> +#undef MACFB_RECLEVEL
> +#define MACFB_RECLEVEL 2
> +#define READ_BITS 1
> +#include "macfb-template.h"
> +#define READ_BITS 2
> +#include "macfb-template.h"
> +#define READ_BITS 4
> +#include "macfb-template.h"
> +#define READ_BITS 8
> +#include "macfb-template.h"
> +#define READ_BITS 16
> +#include "macfb-template.h"
> +#define READ_BITS 24
> +#include "macfb-template.h"
> +#undef WRITE_BITS
> +
> +#else
> +
> +#define WRITE_BITS 8
> +#include "macfb-template.h"
> +
> +#define WRITE_BITS 16
> +#include "macfb-template.h"
> +
> +#define WRITE_BITS 24
> +#include "macfb-template.h"
> +
> +#define WRITE_BITS 32
> +#include "macfb-template.h"
Not sure, but do we still need all these "destination" bit depth
nowadays? I thought QEMU only supports 32 bit depths these days?
Thomas
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [RFC v3 04/10] hw/m68k: add video card,
Thomas Huth <=