1 /****************************************************************************
3 * Copyright (C) 2005 - 2013 by Vivante Corp.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the license, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 *****************************************************************************/
22 #ifndef __gc_hal_engine_vg_h_
23 #define __gc_hal_engine_vg_h_
29 #include "gc_hal_types.h"
31 /******************************************************************************\
32 ******************************** VG Enumerations *******************************
33 \******************************************************************************/
38 ** @brief Tiling mode for painting and imagig.
40 ** This enumeration defines the tiling modes supported by the HAL. This is
41 ** in fact a one-to-one mapping of the OpenVG 1.1 tile modes.
43 typedef enum _gceTILE_MODE
52 /******************************************************************************/
55 ** @brief The different paint modes.
57 ** This enumeration lists the available paint modes.
59 typedef enum _gcePAINT_TYPE
64 /** Linear gradient. */
67 /** Radial gradient. */
71 gcvPAINT_MODE_PATTERN,
81 ** @brief Types of path data supported by HAL.
83 ** This enumeration defines the types of path data supported by the HAL.
84 ** This is in fact a one-to-one mapping of the OpenVG 1.1 path types.
86 typedef enum _gcePATHTYPE
88 gcePATHTYPE_UNKNOWN = -1,
99 ** @brief Supported path segment commands.
101 ** This enumeration defines the path segment commands supported by the HAL.
103 typedef enum _gceVGCMD
105 gcvVGCMD_END, /* 0: GCCMD_TS_OPCODE_END */
106 gcvVGCMD_CLOSE, /* 1: GCCMD_TS_OPCODE_CLOSE */
107 gcvVGCMD_MOVE, /* 2: GCCMD_TS_OPCODE_MOVE */
108 gcvVGCMD_MOVE_REL, /* 3: GCCMD_TS_OPCODE_MOVE_REL */
109 gcvVGCMD_LINE, /* 4: GCCMD_TS_OPCODE_LINE */
110 gcvVGCMD_LINE_REL, /* 5: GCCMD_TS_OPCODE_LINE_REL */
111 gcvVGCMD_QUAD, /* 6: GCCMD_TS_OPCODE_QUADRATIC */
112 gcvVGCMD_QUAD_REL, /* 7: GCCMD_TS_OPCODE_QUADRATIC_REL */
113 gcvVGCMD_CUBIC, /* 8: GCCMD_TS_OPCODE_CUBIC */
114 gcvVGCMD_CUBIC_REL, /* 9: GCCMD_TS_OPCODE_CUBIC_REL */
115 gcvVGCMD_BREAK, /* 10: GCCMD_TS_OPCODE_BREAK */
116 gcvVGCMD_HLINE, /* 11: ******* R E S E R V E D *******/
117 gcvVGCMD_HLINE_REL, /* 12: ******* R E S E R V E D *******/
118 gcvVGCMD_VLINE, /* 13: ******* R E S E R V E D *******/
119 gcvVGCMD_VLINE_REL, /* 14: ******* R E S E R V E D *******/
120 gcvVGCMD_SQUAD, /* 15: ******* R E S E R V E D *******/
121 gcvVGCMD_SQUAD_REL, /* 16: ******* R E S E R V E D *******/
122 gcvVGCMD_SCUBIC, /* 17: ******* R E S E R V E D *******/
123 gcvVGCMD_SCUBIC_REL, /* 18: ******* R E S E R V E D *******/
124 gcvVGCMD_SCCWARC, /* 19: ******* R E S E R V E D *******/
125 gcvVGCMD_SCCWARC_REL, /* 20: ******* R E S E R V E D *******/
126 gcvVGCMD_SCWARC, /* 21: ******* R E S E R V E D *******/
127 gcvVGCMD_SCWARC_REL, /* 22: ******* R E S E R V E D *******/
128 gcvVGCMD_LCCWARC, /* 23: ******* R E S E R V E D *******/
129 gcvVGCMD_LCCWARC_REL, /* 24: ******* R E S E R V E D *******/
130 gcvVGCMD_LCWARC, /* 25: ******* R E S E R V E D *******/
131 gcvVGCMD_LCWARC_REL, /* 26: ******* R E S E R V E D *******/
133 /* The width of the command recognized by the hardware on bits. */
136 /* Hardware command mask. */
137 gcvVGCMD_MASK = (1 << gcvVGCMD_WIDTH) - 1,
139 /* Command modifiers. */
140 gcvVGCMD_H_MOD = 1 << gcvVGCMD_WIDTH, /* = 32 */
141 gcvVGCMD_V_MOD = 2 << gcvVGCMD_WIDTH, /* = 64 */
142 gcvVGCMD_S_MOD = 3 << gcvVGCMD_WIDTH, /* = 96 */
143 gcvVGCMD_ARC_MOD = 4 << gcvVGCMD_WIDTH, /* = 128 */
145 /* Emulated LINE commands. */
146 gcvVGCMD_HLINE_EMUL = gcvVGCMD_H_MOD | gcvVGCMD_LINE, /* = 36 */
147 gcvVGCMD_HLINE_EMUL_REL = gcvVGCMD_H_MOD | gcvVGCMD_LINE_REL, /* = 37 */
148 gcvVGCMD_VLINE_EMUL = gcvVGCMD_V_MOD | gcvVGCMD_LINE, /* = 68 */
149 gcvVGCMD_VLINE_EMUL_REL = gcvVGCMD_V_MOD | gcvVGCMD_LINE_REL, /* = 69 */
151 /* Emulated SMOOTH commands. */
152 gcvVGCMD_SQUAD_EMUL = gcvVGCMD_S_MOD | gcvVGCMD_QUAD, /* = 102 */
153 gcvVGCMD_SQUAD_EMUL_REL = gcvVGCMD_S_MOD | gcvVGCMD_QUAD_REL, /* = 103 */
154 gcvVGCMD_SCUBIC_EMUL = gcvVGCMD_S_MOD | gcvVGCMD_CUBIC, /* = 104 */
155 gcvVGCMD_SCUBIC_EMUL_REL = gcvVGCMD_S_MOD | gcvVGCMD_CUBIC_REL, /* = 105 */
157 /* Emulation ARC commands. */
158 gcvVGCMD_ARC_LINE = gcvVGCMD_ARC_MOD | gcvVGCMD_LINE, /* = 132 */
159 gcvVGCMD_ARC_LINE_REL = gcvVGCMD_ARC_MOD | gcvVGCMD_LINE_REL, /* = 133 */
160 gcvVGCMD_ARC_QUAD = gcvVGCMD_ARC_MOD | gcvVGCMD_QUAD, /* = 134 */
161 gcvVGCMD_ARC_QUAD_REL = gcvVGCMD_ARC_MOD | gcvVGCMD_QUAD_REL /* = 135 */
164 typedef enum _gceVGCMD * gceVGCMD_PTR;
169 ** @brief Blending modes supported by the HAL.
171 ** This enumeration defines the blending modes supported by the HAL. This is
172 ** in fact a one-to-one mapping of the OpenVG 1.1 blending modes.
174 typedef enum _gceVG_BLEND
177 gcvVG_BLEND_SRC_OVER,
178 gcvVG_BLEND_DST_OVER,
181 gcvVG_BLEND_MULTIPLY,
185 gcvVG_BLEND_ADDITIVE,
186 gcvVG_BLEND_SUBTRACT,
194 ** @brief Image modes supported by the HAL.
196 ** This enumeration defines the image modes supported by the HAL. This is
197 ** in fact a one-to-one mapping of the OpenVG 1.1 image modes with the addition
200 typedef enum _gceVG_IMAGE
204 gcvVG_IMAGE_MULTIPLY,
213 ** @brief Filter mode patterns and imaging.
215 ** This enumeration defines the filter modes supported by the HAL.
217 typedef enum _gceIMAGE_FILTER
228 ** @brief Primitive modes supported by the HAL.
230 ** This enumeration defines the primitive modes supported by the HAL.
232 typedef enum _gceVG_PRIMITIVE
237 gcvVG_TESSELLATED_TILED
244 ** @brief Rendering quality modes supported by the HAL.
246 ** This enumeration defines the rendering quality modes supported by the HAL.
248 typedef enum _gceRENDER_QUALITY
250 gcvVG_NONANTIALIASED,
260 ** @brief Fill rules supported by the HAL.
262 ** This enumeration defines the fill rules supported by the HAL.
264 typedef enum _gceFILL_RULE
274 ** @brief Cap styles supported by the HAL.
276 ** This enumeration defines the cap styles supported by the HAL.
278 typedef enum _gceCAP_STYLE
289 ** @brief Join styles supported by the HAL.
291 ** This enumeration defines the join styles supported by the HAL.
293 typedef enum _gceJOIN_STYLE
304 ** @brief Channel mask values.
306 ** This enumeration defines the values for channel mask used in image
310 /* Base values for channel mask definitions. */
311 #define gcvCHANNEL_X (0)
312 #define gcvCHANNEL_R (1 << 0)
313 #define gcvCHANNEL_G (1 << 1)
314 #define gcvCHANNEL_B (1 << 2)
315 #define gcvCHANNEL_A (1 << 3)
317 typedef enum _gceCHANNEL
319 gcvCHANNEL_XXXX = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X),
320 gcvCHANNEL_XXXA = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_A),
321 gcvCHANNEL_XXBX = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_X),
322 gcvCHANNEL_XXBA = (gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_A),
324 gcvCHANNEL_XGXX = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_X),
325 gcvCHANNEL_XGXA = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_A),
326 gcvCHANNEL_XGBX = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_X),
327 gcvCHANNEL_XGBA = (gcvCHANNEL_X | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_A),
329 gcvCHANNEL_RXXX = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_X),
330 gcvCHANNEL_RXXA = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_X | gcvCHANNEL_A),
331 gcvCHANNEL_RXBX = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_X),
332 gcvCHANNEL_RXBA = (gcvCHANNEL_R | gcvCHANNEL_X | gcvCHANNEL_B | gcvCHANNEL_A),
334 gcvCHANNEL_RGXX = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_X),
335 gcvCHANNEL_RGXA = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_X | gcvCHANNEL_A),
336 gcvCHANNEL_RGBX = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_X),
337 gcvCHANNEL_RGBA = (gcvCHANNEL_R | gcvCHANNEL_G | gcvCHANNEL_B | gcvCHANNEL_A),
341 /******************************************************************************\
342 ******************************** VG Structures *******************************
343 \******************************************************************************/
348 ** @brief Definition of the color ramp used by the gradient paints.
350 ** The gcsCOLOR_RAMP structure defines the layout of one single color inside
351 ** a color ramp which is used by gradient paints.
353 typedef struct _gcsCOLOR_RAMP
355 /** Value for the color stop. */
358 /** Red color channel value for the color stop. */
361 /** Green color channel value for the color stop. */
364 /** Blue color channel value for the color stop. */
367 /** Alpha color channel value for the color stop. */
370 gcsCOLOR_RAMP, * gcsCOLOR_RAMP_PTR;
375 ** @brief Definition of the color ramp used by the gradient paints in fixed form.
377 ** The gcsCOLOR_RAMP structure defines the layout of one single color inside
378 ** a color ramp which is used by gradient paints.
380 typedef struct _gcsFIXED_COLOR_RAMP
382 /** Value for the color stop. */
385 /** Red color channel value for the color stop. */
388 /** Green color channel value for the color stop. */
389 gctFIXED_POINT green;
391 /** Blue color channel value for the color stop. */
394 /** Alpha color channel value for the color stop. */
395 gctFIXED_POINT alpha;
397 gcsFIXED_COLOR_RAMP, * gcsFIXED_COLOR_RAMP_PTR;
403 ** @brief Rectangle structure used by the gcoVG object.
405 ** This structure defines the layout of a rectangle. Make sure width and
406 ** height are larger than 0.
408 typedef struct _gcsVG_RECT * gcsVG_RECT_PTR;
409 typedef struct _gcsVG_RECT
411 /** Left location of the rectangle. */
414 /** Top location of the rectangle. */
417 /** Width of the rectangle. */
420 /** Height of the rectangle. */
428 ** @brief Path command buffer attribute structure.
430 ** The gcsPATH_BUFFER_INFO structure contains the specifics about
431 ** the layout of the path data command buffer.
433 typedef struct _gcsPATH_BUFFER_INFO * gcsPATH_BUFFER_INFO_PTR;
434 typedef struct _gcsPATH_BUFFER_INFO
436 gctUINT reservedForHead;
437 gctUINT reservedForTail;
444 ** @brief Definition of the path data container structure.
446 ** The gcsPATH structure defines the layout of the path data container.
448 typedef struct _gcsPATH_DATA * gcsPATH_DATA_PTR;
449 typedef struct _gcsPATH_DATA
451 /* Data container in command buffer format. */
454 /* Path data type. */
455 gcePATHTYPE dataType;
460 /******************************************************************************\
461 ********************************* gcoHAL Object ********************************
462 \******************************************************************************/
464 /* Query path data storage attributes. */
466 gcoHAL_QueryPathStorage(
468 OUT gcsPATH_BUFFER_INFO_PTR Information
471 /* Associate a completion signal with the command buffer. */
473 gcoHAL_AssociateCompletion(
475 IN gcsPATH_DATA_PTR PathData
478 /* Release the current command buffer completion signal. */
480 gcoHAL_DeassociateCompletion(
482 IN gcsPATH_DATA_PTR PathData
485 /* Verify whether the command buffer is still in use. */
487 gcoHAL_CheckCompletion(
489 IN gcsPATH_DATA_PTR PathData
492 /* Wait until the command buffer is no longer in use. */
494 gcoHAL_WaitCompletion(
496 IN gcsPATH_DATA_PTR PathData
499 /* Flush the pixel cache. */
505 /* Split a harwdare address into pool and offset. */
509 IN gctUINT32 Address,
511 OUT gctUINT32 * Offset
514 /* Combine pool and offset into a harwdare address. */
516 gcoHAL_CombineAddress(
520 OUT gctUINT32 * Address
523 /* Schedule to free linear video memory allocated. */
525 gcoHAL_ScheduleVideoMemory(
530 /* Free linear video memory allocated with gcoHAL_AllocateLinearVideoMemory. */
532 gcoHAL_FreeVideoMemory(
537 /* Query command buffer attributes. */
539 gcoHAL_QueryCommandBuffer(
541 OUT gcsCOMMAND_BUFFER_INFO_PTR Information
543 /* Allocate and lock linear video memory. */
545 gcoHAL_AllocateLinearVideoMemory(
548 IN gctUINT Alignment,
550 OUT gctUINT64 * Node,
551 OUT gctUINT32 * Address,
552 OUT gctPOINTER * Memory
555 /* Align the specified size accordingly to the hardware requirements. */
557 gcoHAL_GetAlignedSurfaceSize(
559 IN gceSURF_TYPE Type,
560 IN OUT gctUINT32_PTR Width,
561 IN OUT gctUINT32_PTR Height
568 IN gctUINT TaskCount,
570 OUT gctPOINTER * Memory
572 /******************************************************************************\
573 ********************************** gcoVG Object ********************************
574 \******************************************************************************/
576 /** @defgroup gcoVG gcoVG
578 ** The gcoVG object abstracts the VG hardware pipe.
582 gcoVG_IsMaskSupported(
583 IN gceSURF_FORMAT Format
587 gcoVG_IsTargetSupported(
588 IN gceSURF_FORMAT Format
592 gcoVG_IsImageSupported(
593 IN gceSURF_FORMAT Format
596 gctUINT8 gcoVG_PackColorComponent(
624 gcoVG_SetUserToSurface(
626 IN gctFLOAT UserToSurface[9]
630 gcoVG_SetSurfaceToImage(
632 IN gctFLOAT SurfaceToImage[9]
667 IN gctSIZE_T RectangleCount,
668 IN gcsVG_RECT_PTR Rectangles
672 gcoVG_EnableColorTransform(
678 gcoVG_SetColorTransform(
680 IN gctFLOAT ColorTransform[8]
684 gcoVG_SetTileFillColor(
702 gcoVG_SetLinearPaint(
704 IN gctFLOAT Constant,
710 gcoVG_SetRadialPaint(
712 IN gctFLOAT LinConstant,
713 IN gctFLOAT LinStepX,
714 IN gctFLOAT LinStepY,
715 IN gctFLOAT RadConstant,
716 IN gctFLOAT RadStepX,
717 IN gctFLOAT RadStepY,
718 IN gctFLOAT RadStepXX,
719 IN gctFLOAT RadStepYY,
720 IN gctFLOAT RadStepXY
724 gcoVG_SetPatternPaint(
726 IN gctFLOAT UConstant,
729 IN gctFLOAT VConstant,
738 IN gcoSURF ColorRamp,
739 IN gceTILE_MODE ColorRampSpreadMode
746 IN gceTILE_MODE TileMode,
747 IN gceIMAGE_FILTER Filter
763 gcoVG_SetRenderingQuality(
765 IN gceRENDER_QUALITY Quality
771 IN gceFILL_RULE FillRule
777 IN gcsPATH_DATA_PTR PathData
792 IN gcsPATH_DATA_PTR PathData,
795 IN gctBOOL SoftwareTesselation
802 IN gcsPOINT_PTR SourceOrigin,
803 IN gcsPOINT_PTR TargetOrigin,
804 IN gcsSIZE_PTR SourceSize,
815 gcoVG_TesselateImage(
818 IN gcsVG_RECT_PTR Rectangle,
819 IN gceIMAGE_FILTER Filter,
821 IN gctBOOL SoftwareTesselation
829 IN gcsVG_RECT_PTR SrcRect,
830 IN gcsVG_RECT_PTR TrgRect,
831 IN gceIMAGE_FILTER Filter,
840 IN const gctFLOAT * Matrix,
841 IN gceCHANNEL ColorChannels,
842 IN gctBOOL FilterLinear,
843 IN gctBOOL FilterPremultiplied,
844 IN gcsPOINT_PTR SourceOrigin,
845 IN gcsPOINT_PTR TargetOrigin,
851 gcoVG_SeparableConvolve(
855 IN gctINT KernelWidth,
856 IN gctINT KernelHeight,
859 IN const gctINT16 * KernelX,
860 IN const gctINT16 * KernelY,
863 IN gceTILE_MODE TilingMode,
864 IN gctFLOAT_PTR FillColor,
865 IN gceCHANNEL ColorChannels,
866 IN gctBOOL FilterLinear,
867 IN gctBOOL FilterPremultiplied,
868 IN gcsPOINT_PTR SourceOrigin,
869 IN gcsPOINT_PTR TargetOrigin,
870 IN gcsSIZE_PTR SourceSize,
880 IN gctFLOAT StdDeviationX,
881 IN gctFLOAT StdDeviationY,
882 IN gceTILE_MODE TilingMode,
883 IN gctFLOAT_PTR FillColor,
884 IN gceCHANNEL ColorChannels,
885 IN gctBOOL FilterLinear,
886 IN gctBOOL FilterPremultiplied,
887 IN gcsPOINT_PTR SourceOrigin,
888 IN gcsPOINT_PTR TargetOrigin,
889 IN gcsSIZE_PTR SourceSize,
904 #endif /* __gc_hal_vg_h_ */