1a69c16feSStephan Aßmus/*
2ed80f189SAxel Dörfler * Copyright 2009-2012, Haiku, Inc. All rights reserved.
3a69c16feSStephan Aßmus * Distributed under the terms of the MIT License.
4a69c16feSStephan Aßmus */
5c2784486SAxel Dörfler#ifndef _ACCELERANT_H_
6d734a8ceSbeveloper#define _ACCELERANT_H_
7d734a8ceSbeveloper
8a69c16feSStephan Aßmus
9d734a8ceSbeveloper#include <GraphicsDefs.h>
10d734a8ceSbeveloper#include <OS.h>
11d734a8ceSbeveloper
12a69c16feSStephan Aßmus
13d734a8ceSbeveloper#if defined(__cplusplus)
14a69c16feSStephan Aßmus	extern "C" {
15d734a8ceSbeveloper#endif
16d734a8ceSbeveloper
17a69c16feSStephan Aßmus
18d734a8ceSbeveloper#define B_ACCELERANT_ENTRY_POINT	"get_accelerant_hook"
19d734a8ceSbeveloper#define B_ACCELERANT_VERSION		1
20d734a8ceSbeveloper
21d734a8ceSbeveloper
22a69c16feSStephan Aßmustypedef void* (*GetAccelerantHook)(uint32, void*);
23a69c16feSStephan Aßmus
24a69c16feSStephan Aßmusvoid* get_accelerant_hook(uint32 feature, void* data);
25a69c16feSStephan Aßmus
26d734a8ceSbeveloper
27d734a8ceSbeveloperenum {
28d734a8ceSbeveloper	/* initialization */
29a69c16feSStephan Aßmus	B_INIT_ACCELERANT = 0,				/* required */
30a69c16feSStephan Aßmus	B_ACCELERANT_CLONE_INFO_SIZE,		/* required */
31a69c16feSStephan Aßmus	B_GET_ACCELERANT_CLONE_INFO,		/* required */
32a69c16feSStephan Aßmus	B_CLONE_ACCELERANT,					/* required */
33a69c16feSStephan Aßmus	B_UNINIT_ACCELERANT,				/* required */
34a69c16feSStephan Aßmus	B_GET_ACCELERANT_DEVICE_INFO,		/* required */
35a69c16feSStephan Aßmus	B_ACCELERANT_RETRACE_SEMAPHORE,		/* optional */
36d734a8ceSbeveloper
37d734a8ceSbeveloper	/* mode configuration */
38d734a8ceSbeveloper	B_ACCELERANT_MODE_COUNT = 0x100,	/* required */
39a69c16feSStephan Aßmus	B_GET_MODE_LIST,					/* required */
40a69c16feSStephan Aßmus	B_PROPOSE_DISPLAY_MODE,				/* optional */
41ed80f189SAxel Dörfler	B_SET_DISPLAY_MODE,					/* required */
42a69c16feSStephan Aßmus	B_GET_DISPLAY_MODE,					/* required */
43a69c16feSStephan Aßmus	B_GET_FRAME_BUFFER_CONFIG,			/* required */
44a69c16feSStephan Aßmus	B_GET_PIXEL_CLOCK_LIMITS,			/* required */
45a69c16feSStephan Aßmus	B_GET_TIMING_CONSTRAINTS,			/* optional */
46a69c16feSStephan Aßmus	B_MOVE_DISPLAY,						/* optional */
47a69c16feSStephan Aßmus	B_SET_INDEXED_COLORS,				/* required if driver supports 8bit */
48a69c16feSStephan Aßmus										/* indexed modes */
49a69c16feSStephan Aßmus	B_DPMS_CAPABILITIES,				/* required if driver supports DPMS */
50a69c16feSStephan Aßmus	B_DPMS_MODE,						/* required if driver supports DPMS */
51a69c16feSStephan Aßmus	B_SET_DPMS_MODE,					/* required if driver supports DPMS */
52a69c16feSStephan Aßmus	B_GET_PREFERRED_DISPLAY_MODE,		/* optional */
53a69c16feSStephan Aßmus	B_GET_MONITOR_INFO,					/* optional */
54a69c16feSStephan Aßmus	B_GET_EDID_INFO,					/* optional */
553a2b67b5SAdrien Destugues	B_SET_BRIGHTNESS,                   /* optional */
563a2b67b5SAdrien Destugues	B_GET_BRIGHTNESS,                   /* optional */
57d734a8ceSbeveloper
58d734a8ceSbeveloper	/* cursor managment */
59a69c16feSStephan Aßmus	B_MOVE_CURSOR = 0x200,				/* optional */
60a69c16feSStephan Aßmus	B_SET_CURSOR_SHAPE,					/* optional */
61a69c16feSStephan Aßmus	B_SHOW_CURSOR,						/* optional */
62ed80f189SAxel Dörfler	B_SET_CURSOR_BITMAP,				/* optional */
63d734a8ceSbeveloper
64d734a8ceSbeveloper	/* synchronization */
65d734a8ceSbeveloper	B_ACCELERANT_ENGINE_COUNT = 0x300,	/* required */
66a69c16feSStephan Aßmus	B_ACQUIRE_ENGINE,					/* required */
67a69c16feSStephan Aßmus	B_RELEASE_ENGINE,					/* required */
68a69c16feSStephan Aßmus	B_WAIT_ENGINE_IDLE,					/* required */
69a69c16feSStephan Aßmus	B_GET_SYNC_TOKEN,					/* required */
70a69c16feSStephan Aßmus	B_SYNC_TO_TOKEN,					/* required */
71d734a8ceSbeveloper
72d734a8ceSbeveloper	/* 2D acceleration */
73d734a8ceSbeveloper	B_SCREEN_TO_SCREEN_BLIT = 0x400,	/* optional */
74a69c16feSStephan Aßmus	B_FILL_RECTANGLE,					/* optional */
75a69c16feSStephan Aßmus	B_INVERT_RECTANGLE,					/* optional */
76a69c16feSStephan Aßmus	B_FILL_SPAN,						/* optional */
77d734a8ceSbeveloper	B_SCREEN_TO_SCREEN_TRANSPARENT_BLIT,	/* optional */
78ed80f189SAxel Dörfler	B_SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT,	/* optional.
79a69c16feSStephan Aßmus		NOTE: source and dest may NOT overlap */
80ed80f189SAxel Dörfler
81d734a8ceSbeveloper	/* 3D acceleration */
82d734a8ceSbeveloper	B_ACCELERANT_PRIVATE_START = (int)0x80000000
83d734a8ceSbeveloper};
84d734a8ceSbeveloper
85a69c16feSStephan Aßmus
86d734a8ceSbevelopertypedef struct {
87a69c16feSStephan Aßmus	uint32	version;					/* structure version number */
88a69c16feSStephan Aßmus	char 	name[32];					/* a name the user will recognize */
89a69c16feSStephan Aßmus										/* the device by */
90a69c16feSStephan Aßmus	char	chipset[32];				/* the chipset used by the device */
91a69c16feSStephan Aßmus	char	serial_no[32];				/* serial number for the device */
92a69c16feSStephan Aßmus	uint32	memory;						/* amount of memory on the device, */
93a69c16feSStephan Aßmus										/* in bytes */
94a69c16feSStephan Aßmus	uint32	dac_speed;					/* nominal DAC speed, in MHz */
95d734a8ceSbeveloper} accelerant_device_info;
96d734a8ceSbeveloper
97a69c16feSStephan Aßmus
98d734a8ceSbevelopertypedef struct {
99a69c16feSStephan Aßmus	uint32	pixel_clock;				/* kHz */
100a69c16feSStephan Aßmus	uint16	h_display;					/* in pixels (not character clocks) */
101d734a8ceSbeveloper	uint16	h_sync_start;
102d734a8ceSbeveloper	uint16	h_sync_end;
103d734a8ceSbeveloper	uint16	h_total;
104a69c16feSStephan Aßmus	uint16	v_display;					/* in lines */
105d734a8ceSbeveloper	uint16	v_sync_start;
106d734a8ceSbeveloper	uint16	v_sync_end;
107d734a8ceSbeveloper	uint16	v_total;
108a69c16feSStephan Aßmus	uint32	flags;						/* sync polarity, etc. */
109d734a8ceSbeveloper} display_timing;
110d734a8ceSbeveloper
111ed80f189SAxel Dörfler
112d734a8ceSbevelopertypedef struct {
113a69c16feSStephan Aßmus	display_timing	timing;				/* CTRC info */
114a69c16feSStephan Aßmus	uint32			space;				/* pixel configuration */
115a69c16feSStephan Aßmus	uint16			virtual_width;		/* in pixels */
116a69c16feSStephan Aßmus	uint16			virtual_height;		/* in lines */
117a69c16feSStephan Aßmus	uint16			h_display_start;	/* first displayed pixel in line */
118a69c16feSStephan Aßmus	uint16			v_display_start;	/* first displayed line */
119a69c16feSStephan Aßmus	uint32			flags;				/* mode flags (Some drivers use this */
120a69c16feSStephan Aßmus										/* for dual head related options.) */
121d734a8ceSbeveloper} display_mode;
122d734a8ceSbeveloper
123d734a8ceSbevelopertypedef struct {
124a69c16feSStephan Aßmus	void*	frame_buffer;				/* pointer to first byte of frame */
125a69c16feSStephan Aßmus										/* buffer in virtual memory */
126a69c16feSStephan Aßmus
127a69c16feSStephan Aßmus	void*	frame_buffer_dma;			/* pointer to first byte of frame */
128a69c16feSStephan Aßmus										/* buffer in physical memory for DMA */
129a69c16feSStephan Aßmus
130a69c16feSStephan Aßmus	uint32	bytes_per_row;				/* number of bytes in one */
131a69c16feSStephan Aßmus										/* virtual_width line */
132a69c16feSStephan Aßmus										/* not neccesarily the same as */
133a69c16feSStephan Aßmus										/* virtual_width * byte_per_pixel */
134d734a8ceSbeveloper} frame_buffer_config;
135d734a8ceSbeveloper
136ed80f189SAxel Dörfler
137d734a8ceSbevelopertypedef struct {
138a69c16feSStephan Aßmus	uint16	h_res;						/* minimum effective change in */
139a69c16feSStephan Aßmus										/* horizontal pixels, usually 8 */
140a69c16feSStephan Aßmus
141a69c16feSStephan Aßmus	uint16	h_sync_min;					/* min/max horizontal sync pulse */
142a69c16feSStephan Aßmus										/* width in pixels, a multiple of */
143a69c16feSStephan Aßmus										/* h_res */
144d734a8ceSbeveloper	uint16	h_sync_max;
145a69c16feSStephan Aßmus	uint16	h_blank_min;				/* min/max horizontal blank pulse */
146a69c16feSStephan Aßmus										/* width in pixels, a multiple of */
147a69c16feSStephan Aßmus										/* h_res */
148d734a8ceSbeveloper	uint16	h_blank_max;
149a69c16feSStephan Aßmus	uint16	v_res;						/* minimum effective change in */
150a69c16feSStephan Aßmus										/* vertical lines, usually 1 */
151a69c16feSStephan Aßmus
152a69c16feSStephan Aßmus	uint16	v_sync_min;					/* min/max vertical sync pulse */
153a69c16feSStephan Aßmus										/* width in lines, a multiple of */
154a69c16feSStephan Aßmus										/* v_res */
155d734a8ceSbeveloper	uint16	v_sync_max;
156a69c16feSStephan Aßmus	uint16	v_blank_min;				/* min/max vertical blank pulse */
157a69c16feSStephan Aßmus										/* width in linex, a multiple of */
158a69c16feSStephan Aßmus										/* v_res */
159d734a8ceSbeveloper	uint16	v_blank_max;
160d734a8ceSbeveloper} display_timing_constraints;
161d734a8ceSbeveloper
162a69c16feSStephan Aßmus
163a69c16feSStephan Aßmus// WARNING: This is experimental new Haiku API
164c2784486SAxel Dörflertypedef struct {
165c2784486SAxel Dörfler	uint32	version;
166c2784486SAxel Dörfler	char	vendor[128];
167c2784486SAxel Dörfler	char	name[128];
168c2784486SAxel Dörfler	char	serial_number[128];
169c2784486SAxel Dörfler	uint32	product_id;
170c2784486SAxel Dörfler	struct {
171c2784486SAxel Dörfler		uint16	week;
172c2784486SAxel Dörfler		uint16	year;
173c2784486SAxel Dörfler	}		produced;
174c2784486SAxel Dörfler	float	width;
175c2784486SAxel Dörfler	float	height;
176a69c16feSStephan Aßmus	uint32	min_horizontal_frequency;	/* in kHz */
177c2784486SAxel Dörfler	uint32	max_horizontal_frequency;
178a69c16feSStephan Aßmus	uint32	min_vertical_frequency;		/* in Hz */
179c2784486SAxel Dörfler	uint32	max_vertical_frequency;
180a69c16feSStephan Aßmus	uint32	max_pixel_clock;			/* in kHz */
181c2784486SAxel Dörfler} monitor_info;
182c2784486SAxel Dörfler
183a69c16feSStephan Aßmus
184a69c16feSStephan Aßmus/* mode flags */
185a69c16feSStephan Aßmusenum {
186a69c16feSStephan Aßmus	B_SCROLL			= 1 << 0,
187a69c16feSStephan Aßmus	B_8_BIT_DAC			= 1 << 1,
188a69c16feSStephan Aßmus	B_HARDWARE_CURSOR	= 1 << 2,
189a69c16feSStephan Aßmus	B_PARALLEL_ACCESS	= 1 << 3,
190a69c16feSStephan Aßmus	B_DPMS				= 1 << 4,
191a69c16feSStephan Aßmus	B_IO_FB_NA			= 1 << 5
192d734a8ceSbeveloper};
193d734a8ceSbeveloper
194a69c16feSStephan Aßmus
195a69c16feSStephan Aßmus/* power saver flags */
196a69c16feSStephan Aßmusenum {
197a69c16feSStephan Aßmus	B_DPMS_ON			= 1 << 0,
198a69c16feSStephan Aßmus	B_DPMS_STAND_BY		= 1 << 1,
199a69c16feSStephan Aßmus	B_DPMS_SUSPEND		= 1 << 2,
200a69c16feSStephan Aßmus	B_DPMS_OFF			= 1 << 3
201d734a8ceSbeveloper};
202d734a8ceSbeveloper
203a69c16feSStephan Aßmus
204a69c16feSStephan Aßmus/* timing flags */
205a69c16feSStephan Aßmusenum {
206a69c16feSStephan Aßmus	B_BLANK_PEDESTAL	= 1 << 27,
207a69c16feSStephan Aßmus	B_TIMING_INTERLACED	= 1 << 28,
208a69c16feSStephan Aßmus	B_POSITIVE_HSYNC	= 1 << 29,
209a69c16feSStephan Aßmus	B_POSITIVE_VSYNC	= 1 << 30,
210a69c16feSStephan Aßmus	B_SYNC_ON_GREEN		= 1 << 31
211d734a8ceSbeveloper};
212d734a8ceSbeveloper
213a69c16feSStephan Aßmus
214d734a8ceSbevelopertypedef struct {
215a69c16feSStephan Aßmus	uint16	src_left;					/* guaranteed constrained to */
216a69c16feSStephan Aßmus										/* virtual width and height */
217d734a8ceSbeveloper	uint16	src_top;
218d734a8ceSbeveloper	uint16	dest_left;
219d734a8ceSbeveloper	uint16	dest_top;
220a69c16feSStephan Aßmus	uint16	width;						/* 0 to N, where zero means */
221a69c16feSStephan Aßmus										/* one pixel, one means two pixels, */
222a69c16feSStephan Aßmus										/* etc. */
223a69c16feSStephan Aßmus	uint16	height;						/* 0 to M, where zero means one */
224a69c16feSStephan Aßmus										/* line, one means two lines, etc. */
225d734a8ceSbeveloper} blit_params;
226d734a8ceSbeveloper
227a69c16feSStephan Aßmus
228d734a8ceSbevelopertypedef struct {
229a69c16feSStephan Aßmus	uint16	src_left;					/* guaranteed constrained to */
230a69c16feSStephan Aßmus										/* virtual width and height */
231d734a8ceSbeveloper	uint16	src_top;
232a69c16feSStephan Aßmus	uint16	src_width;					/* 0 to N, where zero means one */
233a69c16feSStephan Aßmus										/* pixel, one means two pixels, */
234a69c16feSStephan Aßmus										/* etc. */
235a69c16feSStephan Aßmus	uint16	src_height;					/* 0 to M, where zero means one */
236a69c16feSStephan Aßmus										/* line, one means two lines, etc. */
237d734a8ceSbeveloper	uint16	dest_left;
238d734a8ceSbeveloper	uint16	dest_top;
239a69c16feSStephan Aßmus	uint16	dest_width;					/* 0 to N, where zero means one */
240a69c16feSStephan Aßmus										/* pixel, one means two pixels, etc. */
241a69c16feSStephan Aßmus	uint16	dest_height;				/* 0 to M, where zero means one */
242a69c16feSStephan Aßmus										/* line, one means two lines, etc. */
243d734a8ceSbeveloper} scaled_blit_params;
244d734a8ceSbeveloper
245a69c16feSStephan Aßmus
246d734a8ceSbevelopertypedef struct {
247a69c16feSStephan Aßmus	uint16	left;						/* guaranteed constrained to */
248a69c16feSStephan Aßmus										/* virtual width and height */
249d734a8ceSbeveloper	uint16	top;
250d734a8ceSbeveloper	uint16	right;
251d734a8ceSbeveloper	uint16	bottom;
252d734a8ceSbeveloper} fill_rect_params;
253d734a8ceSbeveloper
254a69c16feSStephan Aßmus
255d734a8ceSbevelopertypedef struct {
256a69c16feSStephan Aßmus	uint32	engine_id;					/* 0 == no engine, 1,2,3 etc */
257a69c16feSStephan Aßmus										/* individual engines */
258a69c16feSStephan Aßmus	uint32	capability_mask;			/* features this engine supports */
259a69c16feSStephan Aßmus	void*	opaque;						/* optional pointer to engine */
260a69c16feSStephan Aßmus										/* private storage */
261d734a8ceSbeveloper} engine_token;
262d734a8ceSbeveloper
263a69c16feSStephan Aßmus
264d734a8ceSbeveloperenum {	/* engine capabilities */
265d734a8ceSbeveloper	B_2D_ACCELERATION = 1 << 0,
266d734a8ceSbeveloper	B_3D_ACCELERATION = 1 << 1
267d734a8ceSbeveloper};
268d734a8ceSbeveloper
269a69c16feSStephan Aßmus
270d734a8ceSbevelopertypedef struct {
271a69c16feSStephan Aßmus	uint64	counter;					/* counts issued primatives */
272a69c16feSStephan Aßmus	uint32	engine_id;					/* what engine the counter is for */
273a69c16feSStephan Aßmus	char	opaque[12];					/* 12 bytes of private storage */
274d734a8ceSbeveloper} sync_token;
275d734a8ceSbeveloper
276a69c16feSStephan Aßmus
277d734a8ceSbeveloper/* Masks for color info */
278d734a8ceSbeveloper/* B_CMAP8    - 0x000000ff */
279d734a8ceSbeveloper/* B_RGB15/16 - 0x0000ffff */
280d734a8ceSbeveloper/* B_RGB24    - 0x00ffffff */
281d734a8ceSbeveloper/* B_RGB32    - 0xffffffff */
282d734a8ceSbeveloper
283d734a8ceSbevelopertypedef status_t (*init_accelerant)(int fd);
284d734a8ceSbevelopertypedef ssize_t (*accelerant_clone_info_size)(void);
285a69c16feSStephan Aßmustypedef void (*get_accelerant_clone_info)(void* data);
286a69c16feSStephan Aßmustypedef status_t (*clone_accelerant)(void* data);
287d734a8ceSbevelopertypedef void (*uninit_accelerant)(void);
288a69c16feSStephan Aßmustypedef status_t (*get_accelerant_device_info)(accelerant_device_info* adi);
289d734a8ceSbeveloper
290d734a8ceSbevelopertypedef uint32 (*accelerant_mode_count)(void);
291a69c16feSStephan Aßmustypedef status_t (*get_mode_list)(display_mode*);
292a69c16feSStephan Aßmustypedef status_t (*propose_display_mode)(display_mode* target,
293a69c16feSStephan Aßmus	display_mode* low, display_mode* high);
294ed80f189SAxel Dörflertypedef status_t (*set_display_mode)(display_mode* modeToSet);
295ed80f189SAxel Dörflertypedef status_t (*get_display_mode)(display_mode* currentMode);
296ed80f189SAxel Dörflertypedef status_t (*get_frame_buffer_config)(frame_buffer_config* frameBuffer);
297a69c16feSStephan Aßmustypedef status_t (*get_pixel_clock_limits)(display_mode* dm, uint32* low,
298a69c16feSStephan Aßmus	uint32* high);
299ed80f189SAxel Dörflertypedef status_t (*move_display_area)(uint16 hDisplayStart,
300ed80f189SAxel Dörfler	uint16 vDisplayStart);
301a69c16feSStephan Aßmustypedef status_t (*get_timing_constraints)(display_timing_constraints* dtc);
302ed80f189SAxel Dörflertypedef void (*set_indexed_colors)(uint count, uint8 first,
303ed80f189SAxel Dörfler	const uint8* colorData, uint32 flags);
304d734a8ceSbevelopertypedef uint32 (*dpms_capabilities)(void);
305d734a8ceSbevelopertypedef uint32 (*dpms_mode)(void);
306d734a8ceSbevelopertypedef status_t (*set_dpms_mode)(uint32 dpms_flags);
307a69c16feSStephan Aßmustypedef status_t (*get_preferred_display_mode)(display_mode* preferredMode);
308a69c16feSStephan Aßmustypedef status_t (*get_monitor_info)(monitor_info* info);
309a69c16feSStephan Aßmustypedef status_t (*get_edid_info)(void* info, uint32 size, uint32* _version);
3103a2b67b5SAdrien Destuguestypedef status_t (*set_brightness)(float brightness);
3113a2b67b5SAdrien Destuguestypedef status_t (*get_brightness)(float* brightness);
3123a2b67b5SAdrien Destugues
313d734a8ceSbevelopertypedef sem_id (*accelerant_retrace_semaphore)(void);
314d734a8ceSbeveloper
315a69c16feSStephan Aßmustypedef status_t (*set_cursor_shape)(uint16 width, uint16 height,
316ed80f189SAxel Dörfler	uint16 hotX, uint16 hotY, const uint8* andMask, const uint8* xorMask);
317ed80f189SAxel Dörflertypedef status_t (*set_cursor_bitmap)(uint16 width, uint16 height,
318ed80f189SAxel Dörfler	uint16 hotX, uint16 hotY, color_space colorSpace, uint16 bytesPerRow,
319ed80f189SAxel Dörfler	const uint8* bitmapData);
320d734a8ceSbevelopertypedef void (*move_cursor)(uint16 x, uint16 y);
321ed80f189SAxel Dörflertypedef void (*show_cursor)(bool isVisible);
322d734a8ceSbeveloper
323d734a8ceSbevelopertypedef uint32 (*accelerant_engine_count)(void);
324ed80f189SAxel Dörflertypedef status_t (*acquire_engine)(uint32 capabilities, uint32 maxWait,
325a69c16feSStephan Aßmus	sync_token* st, engine_token** et);
326a69c16feSStephan Aßmustypedef status_t (*release_engine)(engine_token* et, sync_token* st);
327d734a8ceSbevelopertypedef void (*wait_engine_idle)(void);
328a69c16feSStephan Aßmustypedef status_t (*get_sync_token)(engine_token* et, sync_token* st);
329a69c16feSStephan Aßmustypedef status_t (*sync_to_token)(sync_token* st);
330a69c16feSStephan Aßmus
331a69c16feSStephan Aßmustypedef void (*screen_to_screen_blit)(engine_token* et, blit_params* list,
332a69c16feSStephan Aßmus	uint32 count);
333a69c16feSStephan Aßmustypedef void (*fill_rectangle)(engine_token* et, uint32 color,
334a69c16feSStephan Aßmus	fill_rect_params* list, uint32 count);
335a69c16feSStephan Aßmustypedef void (*invert_rectangle)(engine_token* et, fill_rect_params* list,
336a69c16feSStephan Aßmus	uint32 count);
337a69c16feSStephan Aßmustypedef void (*screen_to_screen_transparent_blit)(engine_token* et,
338a69c16feSStephan Aßmus	uint32 transparent_color, blit_params* list, uint32 count);
339a69c16feSStephan Aßmustypedef void (*screen_to_screen_scaled_filtered_blit)(engine_token* et,
340a69c16feSStephan Aßmus	scaled_blit_params* list, uint32 count);
341a69c16feSStephan Aßmus
342a69c16feSStephan Aßmustypedef void (*fill_span)(engine_token* et, uint32 color, uint16* list,
343a69c16feSStephan Aßmus	uint32 count);
344d734a8ceSbeveloper/*
345a69c16feSStephan Aßmus	The uint16* list points to a list of tripples:
346d734a8ceSbeveloper		list[N+0]  Y co-ordinate of span
347d734a8ceSbeveloper		list[N+1]  Left x co-ordinate of span
348d734a8ceSbeveloper		list[N+2]  Right x co-ordinate of span
349d734a8ceSbeveloper	where N is in the range 0 to count-1.
350d734a8ceSbeveloper*/
351d734a8ceSbeveloper
352d734a8ceSbeveloper
353d734a8ceSbeveloper#if defined(__cplusplus)
354d734a8ceSbeveloper}
355d734a8ceSbeveloper#endif
356d734a8ceSbeveloper
357d734a8ceSbeveloper#endif
358