summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/sdl/texsrc.h
blob: 6f9a7573ef67a48f23fc1ea727953ba78eb1a984 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#ifdef DEST_TYPE
#undef DEST_TYPE
#endif

#ifdef DEST_NAME
#undef DEST_NAME
#endif

#ifdef TEXSRC_TYPE
#undef TEXSRC_TYPE
#endif

#ifdef TEXSRC_TO_DEST
#undef TEXSRC_TO_DEST
#endif

#ifdef SRC_EQUALS_DEST
#undef SRC_EQUALS_DEST
#endif

#ifdef FUNC_NAME
#undef FUNC_NAME
#endif

#if SDL_TEXFORMAT == SDL_TEXFORMAT_ARGB32
	#define DEST_TYPE UINT32
	#define DEST_NAME(name) name ## _32bpp
	#define TEXSRC_TYPE UINT32
	#define TEXSRC_TO_DEST(src) (src)
	#define SRC_EQUALS_DEST
	#define FUNC_NAME(name) name ## _argb32
#elif SDL_TEXFORMAT == SDL_TEXFORMAT_RGB32
	#define DEST_TYPE UINT32
	#define DEST_NAME(name) name ## _32bpp
	#define TEXSRC_TYPE UINT32
	#define TEXSRC_TO_DEST(src) ((src) | 0xff000000)
	#define FUNC_NAME(name) name ## _rgb32
#elif SDL_TEXFORMAT == SDL_TEXFORMAT_RGB32_PALETTED
	#define DEST_TYPE UINT32
	#define DEST_NAME(name) name ## _32bpp
	#define TEXSRC_TYPE UINT32
	#define TEXSRC_TO_DEST(src) \
		(texsource->palette[0x200 + src.r()]   | \
			texsource->palette[0x100 + src.g()] | \
			texsource->palette[src.b()] | 0xff000000)
	#define FUNC_NAME(name) name ## _rgb32_paletted
#elif SDL_TEXFORMAT == SDL_TEXFORMAT_PALETTE16
	#define DEST_TYPE UINT32
	#define DEST_NAME(name) name ## _32bpp
	#define TEXSRC_TYPE UINT16
	#define TEXSRC_TO_DEST(src) \
		(0xff000000 | texsource->palette[src])
	#define FUNC_NAME(name) name ## _palette16
#elif SDL_TEXFORMAT == SDL_TEXFORMAT_PALETTE16A
	#define DEST_TYPE UINT32
	#define DEST_NAME(name) name ## _32bpp
	#define TEXSRC_TYPE UINT16
	#define TEXSRC_TO_DEST(src) \
		(texsource->palette[src])
	#define FUNC_NAME(name) name ## _palette16a
#elif SDL_TEXFORMAT == SDL_TEXFORMAT_RGB15
	#define DEST_TYPE UINT32
	#define DEST_NAME(name) name ## _32bpp
	#define TEXSRC_TYPE UINT16
	#define TEXSRC_TO_DEST(src) (0xff000000 | ((src & 0x7c00) << 9) | ((src & 0x03e0) << 6) | ((src & 0x001f) << 3) | \
		((((src & 0x7c00) << 9) | ((src & 0x03e0) << 6) | ((src & 0x001f) << 3) >> 5) & 0x070707))
	#define FUNC_NAME(name) name ## _rgb15
#elif SDL_TEXFORMAT == SDL_TEXFORMAT_RGB15_PALETTED
	#define DEST_TYPE UINT32
	#define DEST_NAME(name) name ## _32bpp
	#define TEXSRC_TYPE UINT16
	#define TEXSRC_TO_DEST(src) (0xff000000 | texsource->palette[0x40 + ((src >> 10) & 0x1f)] | \
		texsource->palette[0x20 + ((src >> 5) & 0x1f)] | texsource->palette[0x00 + ((src >> 0) & 0x1f)])
	#define FUNC_NAME(name) name ## _rgb15_paletted
#elif SDL_TEXFORMAT == SDL_TEXFORMAT_YUY16 && defined(SDLMAME_MACOSX)
	#define DEST_TYPE UINT16
	#define DEST_NAME(name) name ## _16bpp
	#define TEXSRC_TYPE UINT16
	#define TEXSRC_TO_DEST(src) ((src >> 8) | (src << 8))
	#define FUNC_NAME(name) name ## _yuv16_apple
#elif SDL_TEXFORMAT == SDL_TEXFORMAT_YUY16_PALETTED && defined(SDLMAME_MACOSX)
	#define DEST_TYPE UINT16
	#define DEST_NAME(name) name ## _16bpp
	#define TEXSRC_TYPE UINT16
	#define TEXSRC_TO_DEST(src) (texsource->palette[0x000 + (src >> 8)] | (src << 8))
	#define FUNC_NAME(name) name ## _yuv16_paletted_apple
#elif SDL_TEXFORMAT == SDL_TEXFORMAT_PALETTE16_ARGB1555
	#define DEST_TYPE UINT16
	#define DEST_NAME(name) name ## _16bpp
	#define TEXSRC_TYPE UINT16
	#define TEXSRC_TO_DEST(src) \
		((texsource->palette[src]&0xf80000) >> 9 | \
			(texsource->palette[src]&0x00f800) >> 6 | \
			(texsource->palette[src]&0x0000f8) >> 3 | 0x8000)
	#define FUNC_NAME(name) name ## _palette16_argb1555
#elif SDL_TEXFORMAT == SDL_TEXFORMAT_RGB15_ARGB1555
	#define DEST_TYPE UINT16
	#define DEST_NAME(name) name ## _16bpp
	#define TEXSRC_TYPE UINT16
	#define TEXSRC_TO_DEST(src) ((src) | 0x8000)
	#define FUNC_NAME(name) name ## _rgb15_argb1555
#elif SDL_TEXFORMAT == SDL_TEXFORMAT_RGB15_PALETTED_ARGB1555
	#define DEST_TYPE UINT16
	#define DEST_NAME(name) name ## _16bpp
	#define TEXSRC_TYPE UINT16
	#define TEXSRC_TO_DEST(src) \
		((texsource->palette[(src) >> 10] & 0xf8) << 7 | \
			(texsource->palette[((src) >> 5) & 0x1f] & 0xf8) << 2 | \
			(texsource->palette[(src) & 0x1f] & 0xf8) >> 3 | 0x8000)
	#define FUNC_NAME(name) name ## _rgb15_paletted_argb1555
#else
	#error Unknown SRC_TEXFORMAT
#endif