Add patch that contain Mali fixes.
[deb_xorg-server.git] / render / picturestr.h
1 /*
2 * Copyright © 2000 SuSE, Inc.
3 *
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of SuSE not be used in advertising or
9 * publicity pertaining to distribution of the software without specific,
10 * written prior permission. SuSE makes no representations about the
11 * suitability of this software for any purpose. It is provided "as is"
12 * without express or implied warranty.
13 *
14 * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
16 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
18 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
19 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 *
21 * Author: Keith Packard, SuSE, Inc.
22 */
23
24 #ifndef _PICTURESTR_H_
25 #define _PICTURESTR_H_
26
27 #include "scrnintstr.h"
28 #include "glyphstr.h"
29 #include "resource.h"
30 #include "privates.h"
31
32 typedef struct _DirectFormat {
33 CARD16 red, redMask;
34 CARD16 green, greenMask;
35 CARD16 blue, blueMask;
36 CARD16 alpha, alphaMask;
37 } DirectFormatRec;
38
39 typedef struct _IndexFormat {
40 VisualID vid;
41 ColormapPtr pColormap;
42 int nvalues;
43 xIndexValue *pValues;
44 void *devPrivate;
45 } IndexFormatRec;
46
47 typedef struct _PictFormat {
48 CARD32 id;
49 CARD32 format; /* except bpp */
50 unsigned char type;
51 unsigned char depth;
52 DirectFormatRec direct;
53 IndexFormatRec index;
54 } PictFormatRec;
55
56 typedef struct pixman_vector PictVector, *PictVectorPtr;
57 typedef struct pixman_transform PictTransform, *PictTransformPtr;
58
59 #define pict_f_vector pixman_f_vector
60 #define pict_f_transform pixman_f_transform
61
62 #define PICT_GRADIENT_STOPTABLE_SIZE 1024
63 #define SourcePictTypeSolidFill 0
64 #define SourcePictTypeLinear 1
65 #define SourcePictTypeRadial 2
66 #define SourcePictTypeConical 3
67
68 typedef struct _PictSolidFill {
69 unsigned int type;
70 CARD32 color;
71 } PictSolidFill, *PictSolidFillPtr;
72
73 typedef struct _PictGradientStop {
74 xFixed x;
75 xRenderColor color;
76 } PictGradientStop, *PictGradientStopPtr;
77
78 typedef struct _PictGradient {
79 unsigned int type;
80 int nstops;
81 PictGradientStopPtr stops;
82 } PictGradient, *PictGradientPtr;
83
84 typedef struct _PictLinearGradient {
85 unsigned int type;
86 int nstops;
87 PictGradientStopPtr stops;
88 xPointFixed p1;
89 xPointFixed p2;
90 } PictLinearGradient, *PictLinearGradientPtr;
91
92 typedef struct _PictCircle {
93 xFixed x;
94 xFixed y;
95 xFixed radius;
96 } PictCircle, *PictCirclePtr;
97
98 typedef struct _PictRadialGradient {
99 unsigned int type;
100 int nstops;
101 PictGradientStopPtr stops;
102 PictCircle c1;
103 PictCircle c2;
104 } PictRadialGradient, *PictRadialGradientPtr;
105
106 typedef struct _PictConicalGradient {
107 unsigned int type;
108 int nstops;
109 PictGradientStopPtr stops;
110 xPointFixed center;
111 xFixed angle;
112 } PictConicalGradient, *PictConicalGradientPtr;
113
114 typedef union _SourcePict {
115 unsigned int type;
116 PictSolidFill solidFill;
117 PictGradient gradient;
118 PictLinearGradient linear;
119 PictRadialGradient radial;
120 PictConicalGradient conical;
121 } SourcePict, *SourcePictPtr;
122
123 typedef struct _Picture {
124 DrawablePtr pDrawable;
125 PictFormatPtr pFormat;
126 PictFormatShort format; /* PICT_FORMAT */
127 int refcnt;
128 CARD32 id;
129 unsigned int repeat:1;
130 unsigned int graphicsExposures:1;
131 unsigned int subWindowMode:1;
132 unsigned int polyEdge:1;
133 unsigned int polyMode:1;
134 unsigned int freeCompClip:1;
135 unsigned int clientClipType:2;
136 unsigned int componentAlpha:1;
137 unsigned int repeatType:2;
138 unsigned int filter:3;
139 unsigned int stateChanges:CPLastBit;
140 unsigned int unused:18 - CPLastBit;
141
142 PicturePtr pNext; /* chain on same drawable */
143
144 PicturePtr alphaMap;
145 DDXPointRec alphaOrigin;
146
147 DDXPointRec clipOrigin;
148 pointer clientClip;
149
150 unsigned long serialNumber;
151
152 RegionPtr pCompositeClip;
153
154 PrivateRec *devPrivates;
155
156 PictTransform *transform;
157
158 SourcePictPtr pSourcePict;
159 xFixed *filter_params;
160 int filter_nparams;
161 } PictureRec;
162
163 typedef Bool (*PictFilterValidateParamsProcPtr) (ScreenPtr pScreen, int id,
164 xFixed * params, int nparams,
165 int *width, int *height);
166 typedef struct {
167 char *name;
168 int id;
169 PictFilterValidateParamsProcPtr ValidateParams;
170 int width, height;
171 } PictFilterRec, *PictFilterPtr;
172
173 #define PictFilterNearest 0
174 #define PictFilterBilinear 1
175
176 #define PictFilterFast 2
177 #define PictFilterGood 3
178 #define PictFilterBest 4
179
180 #define PictFilterConvolution 5
181 /* if you add an 8th filter, expand the filter bitfield above */
182
183 typedef struct {
184 char *alias;
185 int alias_id;
186 int filter_id;
187 } PictFilterAliasRec, *PictFilterAliasPtr;
188
189 typedef int (*CreatePictureProcPtr) (PicturePtr pPicture);
190 typedef void (*DestroyPictureProcPtr) (PicturePtr pPicture);
191 typedef int (*ChangePictureClipProcPtr) (PicturePtr pPicture,
192 int clipType, pointer value, int n);
193 typedef void (*DestroyPictureClipProcPtr) (PicturePtr pPicture);
194
195 typedef int (*ChangePictureTransformProcPtr) (PicturePtr pPicture,
196 PictTransform * transform);
197
198 typedef int (*ChangePictureFilterProcPtr) (PicturePtr pPicture,
199 int filter,
200 xFixed * params, int nparams);
201
202 typedef void (*DestroyPictureFilterProcPtr) (PicturePtr pPicture);
203
204 typedef void (*ChangePictureProcPtr) (PicturePtr pPicture, Mask mask);
205 typedef void (*ValidatePictureProcPtr) (PicturePtr pPicture, Mask mask);
206 typedef void (*CompositeProcPtr) (CARD8 op,
207 PicturePtr pSrc,
208 PicturePtr pMask,
209 PicturePtr pDst,
210 INT16 xSrc,
211 INT16 ySrc,
212 INT16 xMask,
213 INT16 yMask,
214 INT16 xDst,
215 INT16 yDst, CARD16 width, CARD16 height);
216
217 typedef void (*GlyphsProcPtr) (CARD8 op,
218 PicturePtr pSrc,
219 PicturePtr pDst,
220 PictFormatPtr maskFormat,
221 INT16 xSrc,
222 INT16 ySrc,
223 int nlists,
224 GlyphListPtr lists, GlyphPtr * glyphs);
225
226 typedef void (*CompositeRectsProcPtr) (CARD8 op,
227 PicturePtr pDst,
228 xRenderColor * color,
229 int nRect, xRectangle *rects);
230
231 typedef void (*RasterizeTrapezoidProcPtr) (PicturePtr pMask,
232 xTrapezoid * trap,
233 int x_off, int y_off);
234
235 typedef void (*TrapezoidsProcPtr) (CARD8 op,
236 PicturePtr pSrc,
237 PicturePtr pDst,
238 PictFormatPtr maskFormat,
239 INT16 xSrc,
240 INT16 ySrc, int ntrap, xTrapezoid * traps);
241
242 typedef void (*TrianglesProcPtr) (CARD8 op,
243 PicturePtr pSrc,
244 PicturePtr pDst,
245 PictFormatPtr maskFormat,
246 INT16 xSrc,
247 INT16 ySrc, int ntri, xTriangle * tris);
248
249 typedef void (*TriStripProcPtr) (CARD8 op,
250 PicturePtr pSrc,
251 PicturePtr pDst,
252 PictFormatPtr maskFormat,
253 INT16 xSrc,
254 INT16 ySrc, int npoint, xPointFixed * points);
255
256 typedef void (*TriFanProcPtr) (CARD8 op,
257 PicturePtr pSrc,
258 PicturePtr pDst,
259 PictFormatPtr maskFormat,
260 INT16 xSrc,
261 INT16 ySrc, int npoint, xPointFixed * points);
262
263 typedef Bool (*InitIndexedProcPtr) (ScreenPtr pScreen, PictFormatPtr pFormat);
264
265 typedef void (*CloseIndexedProcPtr) (ScreenPtr pScreen, PictFormatPtr pFormat);
266
267 typedef void (*UpdateIndexedProcPtr) (ScreenPtr pScreen,
268 PictFormatPtr pFormat,
269 int ndef, xColorItem * pdef);
270
271 typedef void (*AddTrapsProcPtr) (PicturePtr pPicture,
272 INT16 xOff,
273 INT16 yOff, int ntrap, xTrap * traps);
274
275 typedef void (*AddTrianglesProcPtr) (PicturePtr pPicture,
276 INT16 xOff,
277 INT16 yOff, int ntri, xTriangle * tris);
278
279 typedef Bool (*RealizeGlyphProcPtr) (ScreenPtr pScreen, GlyphPtr glyph);
280
281 typedef void (*UnrealizeGlyphProcPtr) (ScreenPtr pScreen, GlyphPtr glyph);
282
283 typedef struct _PictureScreen {
284 PictFormatPtr formats;
285 PictFormatPtr fallback;
286 int nformats;
287
288 CreatePictureProcPtr CreatePicture;
289 DestroyPictureProcPtr DestroyPicture;
290 ChangePictureClipProcPtr ChangePictureClip;
291 DestroyPictureClipProcPtr DestroyPictureClip;
292
293 ChangePictureProcPtr ChangePicture;
294 ValidatePictureProcPtr ValidatePicture;
295
296 CompositeProcPtr Composite;
297 GlyphsProcPtr Glyphs; /* unused */
298 CompositeRectsProcPtr CompositeRects;
299
300 DestroyWindowProcPtr DestroyWindow;
301 CloseScreenProcPtr CloseScreen;
302
303 StoreColorsProcPtr StoreColors;
304
305 InitIndexedProcPtr InitIndexed;
306 CloseIndexedProcPtr CloseIndexed;
307 UpdateIndexedProcPtr UpdateIndexed;
308
309 int subpixel;
310
311 PictFilterPtr filters;
312 int nfilters;
313 PictFilterAliasPtr filterAliases;
314 int nfilterAliases;
315
316 /**
317 * Called immediately after a picture's transform is changed through the
318 * SetPictureTransform request. Not called for source-only pictures.
319 */
320 ChangePictureTransformProcPtr ChangePictureTransform;
321
322 /**
323 * Called immediately after a picture's transform is changed through the
324 * SetPictureFilter request. Not called for source-only pictures.
325 */
326 ChangePictureFilterProcPtr ChangePictureFilter;
327
328 DestroyPictureFilterProcPtr DestroyPictureFilter;
329
330 TrapezoidsProcPtr Trapezoids;
331 TrianglesProcPtr Triangles;
332
333 RasterizeTrapezoidProcPtr RasterizeTrapezoid;
334
335 AddTrianglesProcPtr AddTriangles;
336
337 AddTrapsProcPtr AddTraps;
338
339 RealizeGlyphProcPtr RealizeGlyph;
340 UnrealizeGlyphProcPtr UnrealizeGlyph;
341
342 #define PICTURE_SCREEN_VERSION 2
343 TriStripProcPtr TriStrip;
344 TriFanProcPtr TriFan;
345 } PictureScreenRec, *PictureScreenPtr;
346
347 extern _X_EXPORT DevPrivateKeyRec PictureScreenPrivateKeyRec;
348
349 #define PictureScreenPrivateKey (&PictureScreenPrivateKeyRec)
350
351 extern _X_EXPORT DevPrivateKeyRec PictureWindowPrivateKeyRec;
352
353 #define PictureWindowPrivateKey (&PictureWindowPrivateKeyRec)
354
355 extern _X_EXPORT RESTYPE PictureType;
356 extern _X_EXPORT RESTYPE PictFormatType;
357 extern _X_EXPORT RESTYPE GlyphSetType;
358
359 #define GetPictureScreen(s) ((PictureScreenPtr)dixLookupPrivate(&(s)->devPrivates, PictureScreenPrivateKey))
360 #define GetPictureScreenIfSet(s) (dixPrivateKeyRegistered(PictureScreenPrivateKey) ? GetPictureScreen(s) : NULL)
361 #define SetPictureScreen(s,p) dixSetPrivate(&(s)->devPrivates, PictureScreenPrivateKey, p)
362 #define GetPictureWindow(w) ((PicturePtr)dixLookupPrivate(&(w)->devPrivates, PictureWindowPrivateKey))
363 #define SetPictureWindow(w,p) dixSetPrivate(&(w)->devPrivates, PictureWindowPrivateKey, p)
364
365 #define VERIFY_PICTURE(pPicture, pid, client, mode) {\
366 int tmprc = dixLookupResourceByType((pointer)&(pPicture), pid,\
367 PictureType, client, mode);\
368 if (tmprc != Success)\
369 return tmprc;\
370 }
371
372 #define VERIFY_ALPHA(pPicture, pid, client, mode) {\
373 if (pid == None) \
374 pPicture = 0; \
375 else { \
376 VERIFY_PICTURE(pPicture, pid, client, mode); \
377 } \
378 } \
379
380 extern _X_EXPORT PictFormatPtr
381 PictureWindowFormat(WindowPtr pWindow);
382
383 extern _X_EXPORT Bool
384 PictureDestroyWindow(WindowPtr pWindow);
385
386 extern _X_EXPORT Bool
387 PictureCloseScreen(ScreenPtr pScreen);
388
389 extern _X_EXPORT void
390 PictureStoreColors(ColormapPtr pColormap, int ndef, xColorItem * pdef);
391
392 extern _X_EXPORT Bool
393 PictureInitIndexedFormat(ScreenPtr pScreen, PictFormatPtr format);
394
395 extern _X_EXPORT Bool
396 PictureSetSubpixelOrder(ScreenPtr pScreen, int subpixel);
397
398 extern _X_EXPORT int
399 PictureGetSubpixelOrder(ScreenPtr pScreen);
400
401 extern _X_EXPORT PictFormatPtr
402 PictureCreateDefaultFormats(ScreenPtr pScreen, int *nformatp);
403
404 extern _X_EXPORT PictFormatPtr
405 PictureMatchVisual(ScreenPtr pScreen, int depth, VisualPtr pVisual);
406
407 extern _X_EXPORT PictFormatPtr
408 PictureMatchFormat(ScreenPtr pScreen, int depth, CARD32 format);
409
410 extern _X_EXPORT Bool
411 PictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats);
412
413 extern _X_EXPORT int
414 PictureGetFilterId(const char *filter, int len, Bool makeit);
415
416 extern _X_EXPORT char *PictureGetFilterName(int id);
417
418 extern _X_EXPORT int
419
420 PictureAddFilter(ScreenPtr pScreen,
421 const char *filter,
422 PictFilterValidateParamsProcPtr ValidateParams,
423 int width, int height);
424
425 extern _X_EXPORT Bool
426
427 PictureSetFilterAlias(ScreenPtr pScreen, const char *filter, const char *alias);
428
429 extern _X_EXPORT Bool
430 PictureSetDefaultFilters(ScreenPtr pScreen);
431
432 extern _X_EXPORT void
433 PictureResetFilters(ScreenPtr pScreen);
434
435 extern _X_EXPORT PictFilterPtr
436 PictureFindFilter(ScreenPtr pScreen, char *name, int len);
437
438 extern _X_EXPORT int
439
440 SetPicturePictFilter(PicturePtr pPicture, PictFilterPtr pFilter,
441 xFixed * params, int nparams);
442
443 extern _X_EXPORT int
444
445 SetPictureFilter(PicturePtr pPicture, char *name, int len,
446 xFixed * params, int nparams);
447
448 extern _X_EXPORT Bool
449 PictureFinishInit(void);
450
451 extern _X_EXPORT void
452 SetPictureToDefaults(PicturePtr pPicture);
453
454 extern _X_EXPORT PicturePtr
455 CreatePicture(Picture pid,
456 DrawablePtr pDrawable,
457 PictFormatPtr pFormat,
458 Mask mask, XID *list, ClientPtr client, int *error);
459
460 extern _X_EXPORT int
461
462 ChangePicture(PicturePtr pPicture,
463 Mask vmask, XID *vlist, DevUnion *ulist, ClientPtr client);
464
465 extern _X_EXPORT int
466
467 SetPictureClipRects(PicturePtr pPicture,
468 int xOrigin, int yOrigin, int nRect, xRectangle *rects);
469
470 extern _X_EXPORT int
471
472 SetPictureClipRegion(PicturePtr pPicture,
473 int xOrigin, int yOrigin, RegionPtr pRegion);
474
475 extern _X_EXPORT int
476 SetPictureTransform(PicturePtr pPicture, PictTransform * transform);
477
478 extern _X_EXPORT void
479 CopyPicture(PicturePtr pSrc, Mask mask, PicturePtr pDst);
480
481 extern _X_EXPORT void
482 ValidatePicture(PicturePtr pPicture);
483
484 extern _X_EXPORT int
485 FreePicture(pointer pPicture, XID pid);
486
487 extern _X_EXPORT int
488 FreePictFormat(pointer pPictFormat, XID pid);
489
490 extern _X_EXPORT void
491
492 CompositePicture(CARD8 op,
493 PicturePtr pSrc,
494 PicturePtr pMask,
495 PicturePtr pDst,
496 INT16 xSrc,
497 INT16 ySrc,
498 INT16 xMask,
499 INT16 yMask,
500 INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
501
502 extern _X_EXPORT void
503
504 CompositeGlyphs(CARD8 op,
505 PicturePtr pSrc,
506 PicturePtr pDst,
507 PictFormatPtr maskFormat,
508 INT16 xSrc,
509 INT16 ySrc, int nlist, GlyphListPtr lists, GlyphPtr * glyphs);
510
511 extern _X_EXPORT void
512
513 CompositeRects(CARD8 op,
514 PicturePtr pDst,
515 xRenderColor * color, int nRect, xRectangle *rects);
516
517 extern _X_EXPORT void
518
519 CompositeTrapezoids(CARD8 op,
520 PicturePtr pSrc,
521 PicturePtr pDst,
522 PictFormatPtr maskFormat,
523 INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid * traps);
524
525 extern _X_EXPORT void
526
527 CompositeTriangles(CARD8 op,
528 PicturePtr pSrc,
529 PicturePtr pDst,
530 PictFormatPtr maskFormat,
531 INT16 xSrc,
532 INT16 ySrc, int ntriangles, xTriangle * triangles);
533
534 extern _X_EXPORT void
535
536 CompositeTriStrip(CARD8 op,
537 PicturePtr pSrc,
538 PicturePtr pDst,
539 PictFormatPtr maskFormat,
540 INT16 xSrc, INT16 ySrc, int npoints, xPointFixed * points);
541
542 extern _X_EXPORT void
543
544 CompositeTriFan(CARD8 op,
545 PicturePtr pSrc,
546 PicturePtr pDst,
547 PictFormatPtr maskFormat,
548 INT16 xSrc, INT16 ySrc, int npoints, xPointFixed * points);
549
550 Bool
551 AnimCurInit(ScreenPtr pScreen);
552
553 int
554
555 AnimCursorCreate(CursorPtr *cursors, CARD32 *deltas, int ncursor,
556 CursorPtr *ppCursor, ClientPtr client, XID cid);
557
558 extern _X_EXPORT void
559
560 AddTraps(PicturePtr pPicture,
561 INT16 xOff, INT16 yOff, int ntraps, xTrap * traps);
562
563 extern _X_EXPORT PicturePtr
564 CreateSolidPicture(Picture pid, xRenderColor * color, int *error);
565
566 extern _X_EXPORT PicturePtr
567 CreateLinearGradientPicture(Picture pid,
568 xPointFixed * p1,
569 xPointFixed * p2,
570 int nStops,
571 xFixed * stops, xRenderColor * colors, int *error);
572
573 extern _X_EXPORT PicturePtr
574 CreateRadialGradientPicture(Picture pid,
575 xPointFixed * inner,
576 xPointFixed * outer,
577 xFixed innerRadius,
578 xFixed outerRadius,
579 int nStops,
580 xFixed * stops, xRenderColor * colors, int *error);
581
582 extern _X_EXPORT PicturePtr
583 CreateConicalGradientPicture(Picture pid,
584 xPointFixed * center,
585 xFixed angle,
586 int nStops,
587 xFixed * stops, xRenderColor * colors, int *error);
588
589 #ifdef PANORAMIX
590 extern _X_EXPORT void PanoramiXRenderInit(void);
591 extern _X_EXPORT void PanoramiXRenderReset(void);
592 #endif
593
594 /*
595 * matrix.c
596 */
597
598 extern _X_EXPORT void
599
600 PictTransform_from_xRenderTransform(PictTransformPtr pict,
601 xRenderTransform * render);
602
603 extern _X_EXPORT void
604
605 xRenderTransform_from_PictTransform(xRenderTransform * render,
606 PictTransformPtr pict);
607
608 extern _X_EXPORT Bool
609 PictureTransformPoint(PictTransformPtr transform, PictVectorPtr vector);
610
611 extern _X_EXPORT Bool
612 PictureTransformPoint3d(PictTransformPtr transform, PictVectorPtr vector);
613
614 #endif /* _PICTURESTR_H_ */