xref: /OK3568_Linux_fs/external/xserver/render/picturestr.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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     xRenderColor fullcolor;
72 } PictSolidFill, *PictSolidFillPtr;
73 
74 typedef struct _PictGradientStop {
75     xFixed x;
76     xRenderColor color;
77 } PictGradientStop, *PictGradientStopPtr;
78 
79 typedef struct _PictGradient {
80     unsigned int type;
81     int nstops;
82     PictGradientStopPtr stops;
83 } PictGradient, *PictGradientPtr;
84 
85 typedef struct _PictLinearGradient {
86     unsigned int type;
87     int nstops;
88     PictGradientStopPtr stops;
89     xPointFixed p1;
90     xPointFixed p2;
91 } PictLinearGradient, *PictLinearGradientPtr;
92 
93 typedef struct _PictCircle {
94     xFixed x;
95     xFixed y;
96     xFixed radius;
97 } PictCircle, *PictCirclePtr;
98 
99 typedef struct _PictRadialGradient {
100     unsigned int type;
101     int nstops;
102     PictGradientStopPtr stops;
103     PictCircle c1;
104     PictCircle c2;
105 } PictRadialGradient, *PictRadialGradientPtr;
106 
107 typedef struct _PictConicalGradient {
108     unsigned int type;
109     int nstops;
110     PictGradientStopPtr stops;
111     xPointFixed center;
112     xFixed angle;
113 } PictConicalGradient, *PictConicalGradientPtr;
114 
115 typedef union _SourcePict {
116     unsigned int type;
117     PictSolidFill solidFill;
118     PictGradient gradient;
119     PictLinearGradient linear;
120     PictRadialGradient radial;
121     PictConicalGradient conical;
122 } SourcePict, *SourcePictPtr;
123 
124 typedef struct _Picture {
125     DrawablePtr pDrawable;
126     PictFormatPtr pFormat;
127     PictFormatShort format;     /* PICT_FORMAT */
128     int refcnt;
129     CARD32 id;
130     unsigned int repeat:1;
131     unsigned int graphicsExposures:1;
132     unsigned int subWindowMode:1;
133     unsigned int polyEdge:1;
134     unsigned int polyMode:1;
135     unsigned int freeCompClip:1;
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     RegionPtr 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, void *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 #define PictureScreenPrivateKey (&PictureScreenPrivateKeyRec)
349 
350 extern _X_EXPORT DevPrivateKeyRec PictureWindowPrivateKeyRec;
351 #define	PictureWindowPrivateKey (&PictureWindowPrivateKeyRec)
352 
353 extern RESTYPE PictureType;
354 extern RESTYPE PictFormatType;
355 extern RESTYPE GlyphSetType;
356 
357 #define GetPictureScreen(s) ((PictureScreenPtr)dixLookupPrivate(&(s)->devPrivates, PictureScreenPrivateKey))
358 #define GetPictureScreenIfSet(s) (dixPrivateKeyRegistered(PictureScreenPrivateKey) ? GetPictureScreen(s) : NULL)
359 #define SetPictureScreen(s,p) dixSetPrivate(&(s)->devPrivates, PictureScreenPrivateKey, p)
360 #define GetPictureWindow(w) ((PicturePtr)dixLookupPrivate(&(w)->devPrivates, PictureWindowPrivateKey))
361 #define SetPictureWindow(w,p) dixSetPrivate(&(w)->devPrivates, PictureWindowPrivateKey, p)
362 
363 #define VERIFY_PICTURE(pPicture, pid, client, mode) {\
364     int tmprc = dixLookupResourceByType((void *)&(pPicture), pid,\
365 	                                PictureType, client, mode);\
366     if (tmprc != Success)\
367 	return tmprc;\
368 }
369 
370 #define VERIFY_ALPHA(pPicture, pid, client, mode) {\
371     if (pid == None) \
372 	pPicture = 0; \
373     else { \
374 	VERIFY_PICTURE(pPicture, pid, client, mode); \
375     } \
376 } \
377 
378 extern _X_EXPORT PictFormatPtr
379  PictureWindowFormat(WindowPtr pWindow);
380 
381 extern _X_EXPORT Bool
382  PictureSetSubpixelOrder(ScreenPtr pScreen, int subpixel);
383 
384 extern _X_EXPORT int
385  PictureGetSubpixelOrder(ScreenPtr pScreen);
386 
387 extern _X_EXPORT PictFormatPtr
388 PictureMatchVisual(ScreenPtr pScreen, int depth, VisualPtr pVisual);
389 
390 extern _X_EXPORT PictFormatPtr
391 PictureMatchFormat(ScreenPtr pScreen, int depth, CARD32 format);
392 
393 extern _X_EXPORT Bool
394  PictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats);
395 
396 extern _X_EXPORT int
397  PictureGetFilterId(const char *filter, int len, Bool makeit);
398 
399 extern _X_EXPORT char *PictureGetFilterName(int id);
400 
401 extern _X_EXPORT int
402 PictureAddFilter(ScreenPtr pScreen,
403                  const char *filter,
404                  PictFilterValidateParamsProcPtr ValidateParams,
405                  int width, int height);
406 
407 extern _X_EXPORT Bool
408 PictureSetFilterAlias(ScreenPtr pScreen, const char *filter, const char *alias);
409 
410 extern _X_EXPORT Bool
411  PictureSetDefaultFilters(ScreenPtr pScreen);
412 
413 extern _X_EXPORT void
414  PictureResetFilters(ScreenPtr pScreen);
415 
416 extern _X_EXPORT PictFilterPtr
417 PictureFindFilter(ScreenPtr pScreen, char *name, int len);
418 
419 extern _X_EXPORT int
420 SetPicturePictFilter(PicturePtr pPicture, PictFilterPtr pFilter,
421                      xFixed * params, int nparams);
422 
423 extern _X_EXPORT int
424 SetPictureFilter(PicturePtr pPicture, char *name, int len,
425                  xFixed * params, int nparams);
426 
427 extern _X_EXPORT Bool
428  PictureFinishInit(void);
429 
430 extern _X_EXPORT PicturePtr
431 CreatePicture(Picture pid,
432               DrawablePtr pDrawable,
433               PictFormatPtr pFormat,
434               Mask mask, XID *list, ClientPtr client, int *error);
435 
436 extern _X_EXPORT int
437 ChangePicture(PicturePtr pPicture,
438               Mask vmask, XID *vlist, DevUnion *ulist, ClientPtr client);
439 
440 extern _X_EXPORT int
441 
442 SetPictureClipRects(PicturePtr pPicture,
443                     int xOrigin, int yOrigin, int nRect, xRectangle *rects);
444 
445 extern _X_EXPORT int
446 SetPictureClipRegion(PicturePtr pPicture,
447                      int xOrigin, int yOrigin, RegionPtr pRegion);
448 
449 extern _X_EXPORT int
450  SetPictureTransform(PicturePtr pPicture, PictTransform * transform);
451 
452 extern _X_EXPORT void
453  ValidatePicture(PicturePtr pPicture);
454 
455 extern _X_EXPORT int
456  FreePicture(void *pPicture, XID pid);
457 
458 extern _X_EXPORT void
459 CompositePicture(CARD8 op,
460                  PicturePtr pSrc,
461                  PicturePtr pMask,
462                  PicturePtr pDst,
463                  INT16 xSrc,
464                  INT16 ySrc,
465                  INT16 xMask,
466                  INT16 yMask,
467                  INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
468 
469 extern _X_EXPORT void
470 CompositeGlyphs(CARD8 op,
471                 PicturePtr pSrc,
472                 PicturePtr pDst,
473                 PictFormatPtr maskFormat,
474                 INT16 xSrc,
475                 INT16 ySrc, int nlist, GlyphListPtr lists, GlyphPtr * glyphs);
476 
477 extern _X_EXPORT void
478 CompositeRects(CARD8 op,
479                PicturePtr pDst,
480                xRenderColor * color, int nRect, xRectangle *rects);
481 
482 extern _X_EXPORT void
483 CompositeTrapezoids(CARD8 op,
484                     PicturePtr pSrc,
485                     PicturePtr pDst,
486                     PictFormatPtr maskFormat,
487                     INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid * traps);
488 
489 extern _X_EXPORT void
490 CompositeTriangles(CARD8 op,
491                    PicturePtr pSrc,
492                    PicturePtr pDst,
493                    PictFormatPtr maskFormat,
494                    INT16 xSrc,
495                    INT16 ySrc, int ntriangles, xTriangle * triangles);
496 
497 extern _X_EXPORT void
498 CompositeTriStrip(CARD8 op,
499                   PicturePtr pSrc,
500                   PicturePtr pDst,
501                   PictFormatPtr maskFormat,
502                   INT16 xSrc, INT16 ySrc, int npoints, xPointFixed * points);
503 
504 extern _X_EXPORT void
505 CompositeTriFan(CARD8 op,
506                 PicturePtr pSrc,
507                 PicturePtr pDst,
508                 PictFormatPtr maskFormat,
509                 INT16 xSrc, INT16 ySrc, int npoints, xPointFixed * points);
510 
511 Bool
512  AnimCurInit(ScreenPtr pScreen);
513 
514 int
515 AnimCursorCreate(CursorPtr *cursors, CARD32 *deltas, int ncursor,
516                  CursorPtr *ppCursor, ClientPtr client, XID cid);
517 
518 extern _X_EXPORT void
519 AddTraps(PicturePtr pPicture,
520          INT16 xOff, INT16 yOff, int ntraps, xTrap * traps);
521 
522 extern _X_EXPORT PicturePtr
523 CreateSolidPicture(Picture pid, xRenderColor * color, int *error);
524 
525 extern _X_EXPORT PicturePtr
526 CreateLinearGradientPicture(Picture pid,
527                             xPointFixed * p1,
528                             xPointFixed * p2,
529                             int nStops,
530                             xFixed * stops, xRenderColor * colors, int *error);
531 
532 extern _X_EXPORT PicturePtr
533 CreateRadialGradientPicture(Picture pid,
534                             xPointFixed * inner,
535                             xPointFixed * outer,
536                             xFixed innerRadius,
537                             xFixed outerRadius,
538                             int nStops,
539                             xFixed * stops, xRenderColor * colors, int *error);
540 
541 extern _X_EXPORT PicturePtr
542 CreateConicalGradientPicture(Picture pid,
543                              xPointFixed * center,
544                              xFixed angle,
545                              int nStops,
546                              xFixed * stops, xRenderColor * colors, int *error);
547 
548 #ifdef PANORAMIX
549 extern void PanoramiXRenderInit(void);
550 extern void PanoramiXRenderReset(void);
551 #endif
552 
553 /*
554  * matrix.c
555  */
556 
557 extern _X_EXPORT void
558 PictTransform_from_xRenderTransform(PictTransformPtr pict,
559                                     xRenderTransform * render);
560 
561 extern _X_EXPORT void
562 xRenderTransform_from_PictTransform(xRenderTransform * render,
563                                     PictTransformPtr pict);
564 
565 extern _X_EXPORT Bool
566  PictureTransformPoint(PictTransformPtr transform, PictVectorPtr vector);
567 
568 extern _X_EXPORT Bool
569  PictureTransformPoint3d(PictTransformPtr transform, PictVectorPtr vector);
570 
571 #endif                          /* _PICTURESTR_H_ */
572