1 /*
2  * $XFree86: xc/programs/Xserver/fb/fbpict.h,v 1.7 2001/07/18 10:15:02 keithp Exp $
3  *
4  * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
5  *
6  * Permission to use, copy, modify, distribute, and sell this software and its
7  * documentation for any purpose is hereby granted without fee, provided that
8  * the above copyright notice appear in all copies and that both that
9  * copyright notice and this permission notice appear in supporting
10  * documentation, and that the name of Keith Packard not be used in
11  * advertising or publicity pertaining to distribution of the software without
12  * specific, written prior permission.  Keith Packard makes no
13  * representations about the suitability of this software for any purpose.  It
14  * is provided "as is" without express or implied warranty.
15  *
16  * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
18  * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
19  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
20  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
21  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
22  * PERFORMANCE OF THIS SOFTWARE.
23  */
24 
25 #ifdef HAVE_DIX_CONFIG_H
26 #include <dix-config.h>
27 #endif
28 
29 #ifndef _FBPICT_H_
30 #define _FBPICT_H_
31 
32 //#include "renderedge.h"
33 
34 #define FbIntMult(a,b,t) ( (t) = (a) * (b) + 0x80, ( ( ( (t)>>8 ) + (t) )>>8 ) )
35 #define FbIntDiv(a,b)	 (((CARD16) (a) * 255) / (b))
36 
37 #define FbGet8(v,i)   ((CARD16) (CARD8) ((v) >> i))
38 
39 /*
40  * There are two ways of handling alpha -- either as a single unified value or
41  * a separate value for each component, hence each macro must have two
42  * versions.  The unified alpha version has a 'U' at the end of the name,
43  * the component version has a 'C'.  Similarly, functions which deal with
44  * this difference will have two versions using the same convention.
45  */
46 
47 #define FbOverU(x,y,i,a,t) ((t) = FbIntMult(FbGet8(y,i),(a),(t)) + FbGet8(x,i),\
48 			   (CARD32) ((CARD8) ((t) | (0 - ((t) >> 8)))) << (i))
49 
50 #define FbOverC(x,y,i,a,t) ((t) = FbIntMult(FbGet8(y,i),FbGet8(a,i),(t)) + FbGet8(x,i),\
51 			    (CARD32) ((CARD8) ((t) | (0 - ((t) >> 8)))) << (i))
52 
53 #define FbInU(x,i,a,t) ((CARD32) FbIntMult(FbGet8(x,i),(a),(t)) << (i))
54 
55 #define FbInC(x,i,a,t) ((CARD32) FbIntMult(FbGet8(x,i),FbGet8(a,i),(t)) << (i))
56 
57 #define FbGen(x,y,i,ax,ay,t,u,v) ((t) = (FbIntMult(FbGet8(y,i),ay,(u)) + \
58 					 FbIntMult(FbGet8(x,i),ax,(v))),\
59 				  (CARD32) ((CARD8) ((t) | \
60 						     (0 - ((t) >> 8)))) << (i))
61 
62 #define FbAdd(x,y,i,t)	((t) = FbGet8(x,i) + FbGet8(y,i), \
63 			 (CARD32) ((CARD8) ((t) | (0 - ((t) >> 8)))) << (i))
64 
65 
66 #define Alpha(x) ((x) >> 24)
67 #define Red(x) (((x) >> 16) & 0xff)
68 #define Green(x) (((x) >> 8) & 0xff)
69 #define Blue(x) ((x) & 0xff)
70 
71 #define fbComposeGetSolid(pict, bits, fmt) { \
72     FbBits	*__bits__; \
73     FbStride	__stride__; \
74     int		__bpp__; \
75     int		__xoff__,__yoff__; \
76 \
77     fbGetDrawable((pict)->pDrawable,__bits__,__stride__,__bpp__,__xoff__,__yoff__); \
78     switch (__bpp__) { \
79     case 32: \
80 	(bits) = *(CARD32 *) __bits__; \
81 	break; \
82     case 24: \
83 	(bits) = Fetch24 ((CARD8 *) __bits__); \
84 	break; \
85     case 16: \
86 	(bits) = *(CARD16 *) __bits__; \
87 	(bits) = cvt0565to8888(bits); \
88 	break; \
89     default: \
90 	return; \
91     } \
92     /* If necessary, convert RGB <--> BGR. */ \
93     if (PICT_FORMAT_TYPE((pict)->format) != PICT_FORMAT_TYPE(fmt)) \
94     { \
95 	(bits) = (((bits) & 0xff000000) | \
96 		  (((bits) & 0x00ff0000) >> 16) | \
97 		  (((bits) & 0x0000ff00) >>  0) | \
98 		  (((bits) & 0x000000ff) << 16)); \
99     } \
100     /* manage missing src alpha */ \
101     if ((pict)->pFormat->direct.alphaMask == 0) \
102 	(bits) |= 0xff000000; \
103 }
104 
105 #define fbComposeGetStart(pict,x,y,type,stride,line,mul) {\
106     FbBits	*__bits__; \
107     FbStride	__stride__; \
108     int		__bpp__; \
109     int		__xoff__,__yoff__; \
110 \
111     fbGetDrawable((pict)->pDrawable,__bits__,__stride__,__bpp__,__xoff__,__yoff__); \
112     (stride) = __stride__ * sizeof (FbBits) / sizeof (type); \
113     (line) = ((type *) __bits__) + (stride) * ((y) - __yoff__) + (mul) * ((x) - __xoff__); \
114 }
115 #define cvt8888to0565(s)    ((((s) >> 3) & 0x001f) | \
116 			     (((s) >> 5) & 0x07e0) | \
117 			     (((s) >> 8) & 0xf800))
118 #define cvt0565to8888(s)    (((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7)) | \
119 			     ((((s) << 5) & 0xfc00) | (((s) >> 1) & 0x300)) | \
120 			     ((((s) << 8) & 0xf80000) | (((s) << 3) & 0x70000)))
121 
122 #if IMAGE_BYTE_ORDER == MSBFirst
123 #define Fetch24(a)  ((unsigned long) (a) & 1 ? \
124 		     ((*(a) << 16) | *((CARD16 *) ((a)+1))) : \
125 		     ((*((CARD16 *) (a)) << 8) | *((a)+2)))
126 #define Store24(a,v) ((unsigned long) (a) & 1 ? \
127 		      ((*(a) = (CARD8) ((v) >> 16)), \
128 		       (*((CARD16 *) ((a)+1)) = (CARD16) (v))) : \
129 		      ((*((CARD16 *) (a)) = (CARD16) ((v) >> 8)), \
130 		       (*((a)+2) = (CARD8) (v))))
131 #else
132 #define Fetch24(a)  ((unsigned long) (a) & 1 ? \
133 		     ((*(a)) | (*((CARD16 *) ((a)+1)) << 8)) : \
134 		     ((*((CARD16 *) (a))) | (*((a)+2) << 16)))
135 #define Store24(a,v) ((unsigned long) (a) & 1 ? \
136 		      ((*(a) = (CARD8) (v)), \
137 		       (*((CARD16 *) ((a)+1)) = (CARD16) ((v) >> 8))) : \
138 		      ((*((CARD16 *) (a)) = (CARD16) (v)),\
139 		       (*((a)+2) = (CARD8) ((v) >> 16))))
140 #endif
141 
142 /*
143    The methods below use some tricks to be able to do two color
144    components at the same time.
145 */
146 
147 /*
148   x_c = (x_c * a) / 255
149 */
150 #define FbByteMul(x, a) do {                                      \
151         CARD32 t = (x & 0xff00ff) *a;                           \
152         t = (t + ((t >> 8) & 0xff00ff) + 0x800080) >> 8;          \
153         t &= 0xff00ff;                                            \
154                                                                   \
155         x = ((x >> 8) & 0xff00ff) * a;                            \
156         x = (x + ((x >> 8) & 0xff00ff) + 0x800080);               \
157         x &= 0xff00ff00;                                          \
158         x += t;                                                   \
159     } while (0)
160 
161 /*
162   x_c = (x_c * a) / 255 + y
163 */
164 #define FbByteMulAdd(x, a, y) do {                                \
165         CARD32 t = (x & 0xff00ff) * a;                            \
166         t = (t + ((t >> 8) & 0xff00ff) + 0x800080) >> 8;          \
167         t &= 0xff00ff;                                            \
168         t += y & 0xff00ff;                                        \
169         t |= 0x1000100 - ((t >> 8) & 0xff00ff);                   \
170         t &= 0xff00ff;                                            \
171                                                                   \
172         x = ((x >> 8) & 0xff00ff) * a;                              \
173         x = (x + ((x >> 8) & 0xff00ff) + 0x800080) >> 8;            \
174         x &= 0xff00ff;                                              \
175         x += (y >> 8) & 0xff00ff;                                   \
176         x |= 0x1000100 - ((t >> 8) & 0xff00ff);                     \
177         x &= 0xff00ff;                                              \
178         x <<= 8;                                                    \
179         x += t;                                                     \
180     } while (0)
181 
182 /*
183   x_c = (x_c * a + y_c * b) / 255
184 */
185 #define FbByteAddMul(x, a, y, b) do {                                   \
186         CARD32 t;                                                       \
187         CARD32 r = (x >> 24) * a + (y >> 24) * b;                       \
188         r += (r >> 8) + 0x80;                                           \
189         r >>= 8;                                                        \
190                                                                         \
191         t = (x & 0xff00) * a + (y & 0xff00) * b;                        \
192         t += (t >> 8) + 0x8000;                                         \
193         t >>= 16;                                                       \
194                                                                         \
195         t |= r << 16;                                                   \
196         t |= 0x1000100 - ((t >> 8) & 0xff00ff);                         \
197         t &= 0xff00ff;                                                  \
198         t <<= 8;                                                        \
199                                                                         \
200         r = ((x >> 16) & 0xff) * a + ((y >> 16) & 0xff) * b;            \
201         r += (r >> 8) + 0x80;                                           \
202         r >>= 8;                                                        \
203                                                                         \
204         x = (x & 0xff) * a + (y & 0xff) * b;                            \
205         x += (x >> 8) + 0x80;                                           \
206         x >>= 8;                                                        \
207         x |= r << 16;                                                   \
208         x |= 0x1000100 - ((x >> 8) & 0xff00ff);                         \
209         x &= 0xff00ff;                                                  \
210         x |= t;                                                         \
211 } while (0)
212 
213 /*
214   x_c = (x_c * a + y_c *b) / 256
215 */
216 #define FbByteAddMul_256(x, a, y, b) do {                               \
217         CARD32 t = (x & 0xff00ff) * a + (y & 0xff00ff) * b;             \
218         t >>= 8;                                                        \
219         t &= 0xff00ff;                                                  \
220                                                                         \
221         x = ((x >> 8) & 0xff00ff) * a + ((y >> 8) & 0xff00ff) * b;      \
222         x &= 0xff00ff00;                                                \
223         x += t;                                                         \
224 } while (0)
225 /*
226   x_c = (x_c * a_c) / 255
227 */
228 #define FbByteMulC(x, a) do {                           \
229         CARD32 t;                                       \
230         CARD32 r = (x & 0xff) * (a & 0xff);             \
231         r |= (x & 0xff0000) * ((a >> 16) & 0xff);       \
232         r = (r + ((r >> 8) & 0xff00ff) + 0x800080) >> 8;        \
233         r &= 0xff00ff;                                  \
234                                                         \
235         x >>= 8;                                        \
236         t = (x & 0xff) * ((a >> 8) & 0xff);             \
237         t |= (x & 0xff0000) * (a >> 24);                \
238         t = (t + ((t >> 8) & 0xff00ff) + 0x800080);     \
239         x = r | (t & 0xff00ff00);                       \
240                                                         \
241     } while (0)
242 
243 /*
244   x_c = (x_c * a) / 255 + y
245 */
246 #define FbByteMulAddC(x, a, y) do {                                 \
247         CARD32 t;                                                   \
248         CARD32 r = (x & 0xff) * (a & 0xff);                         \
249         r |= (x & 0xff0000) * ((a >> 16) & 0xff);                   \
250         r = (r + ((r >> 8) & 0xff00ff) + 0x800080) >> 8;            \
251         r &= 0xff00ff;                                              \
252         r += y & 0xff00ff;                                          \
253         r |= 0x1000100 - ((r >> 8) & 0xff00ff);                     \
254         r &= 0xff00ff;                                              \
255                                                                     \
256         x >>= 8;                                                       \
257         t = (x & 0xff) * ((a >> 8) & 0xff);                            \
258         t |= (x & 0xff0000) * (a >> 24);                               \
259         t = (t + ((t >> 8) & 0xff00ff) + 0x800080) >> 8;               \
260         t &= 0xff00ff;                                                 \
261         t += (y >> 8) & 0xff00ff;                                      \
262         t |= 0x1000100 - ((t >> 8) & 0xff00ff);                        \
263         t &= 0xff00ff;                                                 \
264         x = r | (t << 8);                                              \
265     } while (0)
266 
267 /*
268   x_c = (x_c * a_c + y_c * b) / 255
269 */
270 #define FbByteAddMulC(x, a, y, b) do {                                  \
271         CARD32 t;                                                       \
272         CARD32 r = (x >> 24) * (a >> 24) + (y >> 24) * b;               \
273         r += (r >> 8) + 0x80;                                           \
274         r >>= 8;                                                        \
275                                                                         \
276         t = (x & 0xff00) * ((a >> 8) & 0xff) + (y & 0xff00) * b;        \
277         t += (t >> 8) + 0x8000;                                         \
278         t >>= 16;                                                       \
279                                                                         \
280         t |= r << 16;                                                   \
281         t |= 0x1000100 - ((t >> 8) & 0xff00ff);                         \
282         t &= 0xff00ff;                                                  \
283         t <<= 8;                                                        \
284                                                                         \
285         r = ((x >> 16) & 0xff) * ((a >> 16) & 0xff) + ((y >> 16) & 0xff) * b; \
286         r += (r >> 8) + 0x80;                                           \
287         r >>= 8;                                                        \
288                                                                         \
289         x = (x & 0xff) * (a & 0xff) + (y & 0xff) * b;                   \
290         x += (x >> 8) + 0x80;                                           \
291         x >>= 8;                                                        \
292         x |= r << 16;                                                   \
293         x |= 0x1000100 - ((x >> 8) & 0xff00ff);                         \
294         x &= 0xff00ff;                                                  \
295         x |= t;                                                         \
296     } while (0)
297 
298 /*
299   x_c = min(x_c + y_c, 255)
300 */
301 #define FbByteAdd(x, y) do {                                            \
302         CARD32 t;                                                       \
303         CARD32 r = (x & 0xff00ff) + (y & 0xff00ff);                     \
304         r |= 0x1000100 - ((r >> 8) & 0xff00ff);                         \
305         r &= 0xff00ff;                                                  \
306                                                                         \
307         t = ((x >> 8) & 0xff00ff) + ((y >> 8) & 0xff00ff);              \
308         t |= 0x1000100 - ((t >> 8) & 0xff00ff);                         \
309         r |= (t & 0xff00ff) << 8;                                       \
310         x = r;                                                          \
311     } while (0)
312 
313 #define div_255(x) (((x) + ((x) >> 8) + 0x80) >> 8)
314 
315 #if defined(__i386__) && defined(__GNUC__)
316 #define FASTCALL __attribute__((regparm(3)))
317 #else
318 #define FASTCALL
319 #endif
320 
321 #if defined(__GNUC__)
322 #define INLINE __inline__
323 #else
324 #define INLINE
325 #endif
326 
327 typedef struct _FbComposeData {
328     CARD8	op;
329     PicturePtr	src;
330     PicturePtr	mask;
331     PicturePtr	dest;
332     INT16	xSrc;
333     INT16	ySrc;
334     INT16	xMask;
335     INT16	yMask;
336     INT16	xDest;
337     INT16	yDest;
338     CARD16	width;
339     CARD16	height;
340 } FbComposeData;
341 
342 #if 0
343 typedef FASTCALL void (*CombineMaskU) (CARD32 *src, const CARD32 *mask, int width);
344 typedef FASTCALL void (*CombineFuncU) (CARD32 *dest, const CARD32 *src, int width);
345 typedef FASTCALL void (*CombineFuncC) (CARD32 *dest, CARD32 *src, CARD32 *mask, int width);
346 
347 typedef struct _FbComposeFunctions {
348     CombineFuncU *combineU;
349     CombineFuncC *combineC;
350     CombineMaskU combineMaskU;
351 } FbComposeFunctions;
352 
353 /* fbcompose.c */
354 
355 void
356 fbCompositeGeneral (CARD8	op,
357 		    PicturePtr	pSrc,
358 		    PicturePtr	pMask,
359 		    PicturePtr	pDst,
360 		    INT16	xSrc,
361 		    INT16	ySrc,
362 		    INT16	xMask,
363 		    INT16	yMask,
364 		    INT16	xDst,
365 		    INT16	yDst,
366 		    CARD16	width,
367 		    CARD16	height);
368 
369 
370 /* fbedge.c */
371 void
372 fbRasterizeEdges (FbBits	*buf,
373 		  int		bpp,
374 		  int		width,
375 		  int		stride,
376 		  RenderEdge	*l,
377 		  RenderEdge	*r,
378 		  xFixed	t,
379 		  xFixed	b);
380 
381 /* fbpict.c */
382 CARD32
383 fbOver (CARD32 x, CARD32 y);
384 
385 CARD32
386 fbOver24 (CARD32 x, CARD32 y);
387 
388 CARD32
389 fbIn (CARD32 x, CARD8 y);
390 
391 void
392 fbCompositeSolidMask_nx8x8888 (CARD8      op,
393 			       PicturePtr pSrc,
394 			       PicturePtr pMask,
395 			       PicturePtr pDst,
396 			       INT16      xSrc,
397 			       INT16      ySrc,
398 			       INT16      xMask,
399 			       INT16      yMask,
400 			       INT16      xDst,
401 			       INT16      yDst,
402 			       CARD16     width,
403 			       CARD16     height);
404 
405 void
406 fbCompositeSolidMask_nx8x0888 (CARD8      op,
407 			       PicturePtr pSrc,
408 			       PicturePtr pMask,
409 			       PicturePtr pDst,
410 			       INT16      xSrc,
411 			       INT16      ySrc,
412 			       INT16      xMask,
413 			       INT16      yMask,
414 			       INT16      xDst,
415 			       INT16      yDst,
416 			       CARD16     width,
417 			       CARD16     height);
418 
419 void
420 fbCompositeSolidMask_nx8888x8888C (CARD8      op,
421 				   PicturePtr pSrc,
422 				   PicturePtr pMask,
423 				   PicturePtr pDst,
424 				   INT16      xSrc,
425 				   INT16      ySrc,
426 				   INT16      xMask,
427 				   INT16      yMask,
428 				   INT16      xDst,
429 				   INT16      yDst,
430 				   CARD16     width,
431 				   CARD16     height);
432 
433 void
434 fbCompositeSolidMask_nx8x0565 (CARD8      op,
435 			       PicturePtr pSrc,
436 			       PicturePtr pMask,
437 			       PicturePtr pDst,
438 			       INT16      xSrc,
439 			       INT16      ySrc,
440 			       INT16      xMask,
441 			       INT16      yMask,
442 			       INT16      xDst,
443 			       INT16      yDst,
444 			       CARD16     width,
445 			       CARD16     height);
446 
447 void
448 fbCompositeSolidMask_nx8888x0565C (CARD8      op,
449 				   PicturePtr pSrc,
450 				   PicturePtr pMask,
451 				   PicturePtr pDst,
452 				   INT16      xSrc,
453 				   INT16      ySrc,
454 				   INT16      xMask,
455 				   INT16      yMask,
456 				   INT16      xDst,
457 				   INT16      yDst,
458 				   CARD16     width,
459 				   CARD16     height);
460 
461 void
462 fbCompositeSrc_8888x8888 (CARD8      op,
463 			  PicturePtr pSrc,
464 			  PicturePtr pMask,
465 			  PicturePtr pDst,
466 			  INT16      xSrc,
467 			  INT16      ySrc,
468 			  INT16      xMask,
469 			  INT16      yMask,
470 			  INT16      xDst,
471 			  INT16      yDst,
472 			  CARD16     width,
473 			  CARD16     height);
474 
475 void
476 fbCompositeSrc_8888x0888 (CARD8      op,
477 			 PicturePtr pSrc,
478 			 PicturePtr pMask,
479 			 PicturePtr pDst,
480 			 INT16      xSrc,
481 			 INT16      ySrc,
482 			 INT16      xMask,
483 			 INT16      yMask,
484 			 INT16      xDst,
485 			 INT16      yDst,
486 			 CARD16     width,
487 			 CARD16     height);
488 
489 void
490 fbCompositeSrc_8888x0565 (CARD8      op,
491 			  PicturePtr pSrc,
492 			  PicturePtr pMask,
493 			  PicturePtr pDst,
494 			  INT16      xSrc,
495 			  INT16      ySrc,
496 			  INT16      xMask,
497 			  INT16      yMask,
498 			  INT16      xDst,
499 			  INT16      yDst,
500 			  CARD16     width,
501 			  CARD16     height);
502 
503 void
504 fbCompositeSrc_0565x0565 (CARD8      op,
505 			  PicturePtr pSrc,
506 			  PicturePtr pMask,
507 			  PicturePtr pDst,
508 			  INT16      xSrc,
509 			  INT16      ySrc,
510 			  INT16      xMask,
511 			  INT16      yMask,
512 			  INT16      xDst,
513 			  INT16      yDst,
514 			  CARD16     width,
515 			  CARD16     height);
516 
517 void
518 fbCompositeSrcAdd_8000x8000 (CARD8	op,
519 			     PicturePtr pSrc,
520 			     PicturePtr pMask,
521 			     PicturePtr pDst,
522 			     INT16      xSrc,
523 			     INT16      ySrc,
524 			     INT16      xMask,
525 			     INT16      yMask,
526 			     INT16      xDst,
527 			     INT16      yDst,
528 			     CARD16     width,
529 			     CARD16     height);
530 
531 void
532 fbCompositeSrcAdd_8888x8888 (CARD8	op,
533 			     PicturePtr pSrc,
534 			     PicturePtr pMask,
535 			     PicturePtr pDst,
536 			     INT16      xSrc,
537 			     INT16      ySrc,
538 			     INT16      xMask,
539 			     INT16      yMask,
540 			     INT16      xDst,
541 			     INT16      yDst,
542 			     CARD16     width,
543 			     CARD16     height);
544 
545 void
546 fbCompositeSrcAdd_1000x1000 (CARD8	op,
547 			     PicturePtr pSrc,
548 			     PicturePtr pMask,
549 			     PicturePtr pDst,
550 			     INT16      xSrc,
551 			     INT16      ySrc,
552 			     INT16      xMask,
553 			     INT16      yMask,
554 			     INT16      xDst,
555 			     INT16      yDst,
556 			     CARD16     width,
557 			     CARD16     height);
558 
559 void
560 fbCompositeSolidMask_nx1xn (CARD8      op,
561 			    PicturePtr pSrc,
562 			    PicturePtr pMask,
563 			    PicturePtr pDst,
564 			    INT16      xSrc,
565 			    INT16      ySrc,
566 			    INT16      xMask,
567 			    INT16      yMask,
568 			    INT16      xDst,
569 			    INT16      yDst,
570 			    CARD16     width,
571 			    CARD16     height);
572 
573 void
574 fbComposite (CARD8      op,
575 	     PicturePtr pSrc,
576 	     PicturePtr pMask,
577 	     PicturePtr pDst,
578 	     INT16      xSrc,
579 	     INT16      ySrc,
580 	     INT16      xMask,
581 	     INT16      yMask,
582 	     INT16      xDst,
583 	     INT16      yDst,
584 	     CARD16     width,
585 	     CARD16     height);
586 
587 /* fbtrap.c */
588 
589 void
590 fbAddTraps (PicturePtr	pPicture,
591 	    INT16	xOff,
592 	    INT16	yOff,
593 	    int		ntrap,
594 	    xTrap	*traps);
595 
596 void
597 fbRasterizeTrapezoid (PicturePtr    alpha,
598 		      xTrapezoid    *trap,
599 		      int	    x_off,
600 		      int	    y_off);
601 
602 void
603 fbAddTriangles (PicturePtr  pPicture,
604 		INT16	    xOff,
605 		INT16	    yOff,
606 		int	    ntri,
607 		xTriangle   *tris);
608 #endif
609 
610 #endif /* _FBPICT_H_ */
611