1 /****************************************************************************
3 * Copyright (C) 2005 - 2011 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 *****************************************************************************/
26 #ifndef __gc_hal_engine_vg_h_
27 #define __gc_hal_engine_vg_h_
33 #include "gc_hal_types.h"
35 /******************************************************************************\
36 ******************************** VG Enumerations *******************************
37 \******************************************************************************/
42 ** @brief Tiling mode for painting and imagig.
44 ** This enumeration defines the tiling modes supported by the HAL. This is
45 ** in fact a one-to-one mapping of the OpenVG 1.1 tile modes.
47 typedef enum _gceTILE_MODE
56 /******************************************************************************/
59 ** @brief The different paint modes.
61 ** This enumeration lists the available paint modes.
63 typedef enum _gcePAINT_TYPE
68 /** Linear gradient. */
71 /** Radial gradient. */
75 gcvPAINT_MODE_PATTERN
,
85 ** @brief Types of path data supported by HAL.
87 ** This enumeration defines the types of path data supported by the HAL.
88 ** This is in fact a one-to-one mapping of the OpenVG 1.1 path types.
90 typedef enum _gcePATHTYPE
92 gcePATHTYPE_UNKNOWN
= -1,
103 ** @brief Supported path segment commands.
105 ** This enumeration defines the path segment commands supported by the HAL.
107 typedef enum _gceVGCMD
109 gcvVGCMD_END
, /* 0: GCCMD_TS_OPCODE_END */
110 gcvVGCMD_CLOSE
, /* 1: GCCMD_TS_OPCODE_CLOSE */
111 gcvVGCMD_MOVE
, /* 2: GCCMD_TS_OPCODE_MOVE */
112 gcvVGCMD_MOVE_REL
, /* 3: GCCMD_TS_OPCODE_MOVE_REL */
113 gcvVGCMD_LINE
, /* 4: GCCMD_TS_OPCODE_LINE */
114 gcvVGCMD_LINE_REL
, /* 5: GCCMD_TS_OPCODE_LINE_REL */
115 gcvVGCMD_QUAD
, /* 6: GCCMD_TS_OPCODE_QUADRATIC */
116 gcvVGCMD_QUAD_REL
, /* 7: GCCMD_TS_OPCODE_QUADRATIC_REL */
117 gcvVGCMD_CUBIC
, /* 8: GCCMD_TS_OPCODE_CUBIC */
118 gcvVGCMD_CUBIC_REL
, /* 9: GCCMD_TS_OPCODE_CUBIC_REL */
119 gcvVGCMD_BREAK
, /* 10: GCCMD_TS_OPCODE_BREAK */
120 gcvVGCMD_HLINE
, /* 11: ******* R E S E R V E D *******/
121 gcvVGCMD_HLINE_REL
, /* 12: ******* R E S E R V E D *******/
122 gcvVGCMD_VLINE
, /* 13: ******* R E S E R V E D *******/
123 gcvVGCMD_VLINE_REL
, /* 14: ******* R E S E R V E D *******/
124 gcvVGCMD_SQUAD
, /* 15: ******* R E S E R V E D *******/
125 gcvVGCMD_SQUAD_REL
, /* 16: ******* R E S E R V E D *******/
126 gcvVGCMD_SCUBIC
, /* 17: ******* R E S E R V E D *******/
127 gcvVGCMD_SCUBIC_REL
, /* 18: ******* R E S E R V E D *******/
128 gcvVGCMD_SCCWARC
, /* 19: ******* R E S E R V E D *******/
129 gcvVGCMD_SCCWARC_REL
, /* 20: ******* R E S E R V E D *******/
130 gcvVGCMD_SCWARC
, /* 21: ******* R E S E R V E D *******/
131 gcvVGCMD_SCWARC_REL
, /* 22: ******* R E S E R V E D *******/
132 gcvVGCMD_LCCWARC
, /* 23: ******* R E S E R V E D *******/
133 gcvVGCMD_LCCWARC_REL
, /* 24: ******* R E S E R V E D *******/
134 gcvVGCMD_LCWARC
, /* 25: ******* R E S E R V E D *******/
135 gcvVGCMD_LCWARC_REL
, /* 26: ******* R E S E R V E D *******/
137 /* The width of the command recognized by the hardware on bits. */
140 /* Hardware command mask. */
141 gcvVGCMD_MASK
= (1 << gcvVGCMD_WIDTH
) - 1,
143 /* Command modifiers. */
144 gcvVGCMD_H_MOD
= 1 << gcvVGCMD_WIDTH
, /* = 32 */
145 gcvVGCMD_V_MOD
= 2 << gcvVGCMD_WIDTH
, /* = 64 */
146 gcvVGCMD_S_MOD
= 3 << gcvVGCMD_WIDTH
, /* = 96 */
147 gcvVGCMD_ARC_MOD
= 4 << gcvVGCMD_WIDTH
, /* = 128 */
149 /* Emulated LINE commands. */
150 gcvVGCMD_HLINE_EMUL
= gcvVGCMD_H_MOD
| gcvVGCMD_LINE
, /* = 36 */
151 gcvVGCMD_HLINE_EMUL_REL
= gcvVGCMD_H_MOD
| gcvVGCMD_LINE_REL
, /* = 37 */
152 gcvVGCMD_VLINE_EMUL
= gcvVGCMD_V_MOD
| gcvVGCMD_LINE
, /* = 68 */
153 gcvVGCMD_VLINE_EMUL_REL
= gcvVGCMD_V_MOD
| gcvVGCMD_LINE_REL
, /* = 69 */
155 /* Emulated SMOOTH commands. */
156 gcvVGCMD_SQUAD_EMUL
= gcvVGCMD_S_MOD
| gcvVGCMD_QUAD
, /* = 102 */
157 gcvVGCMD_SQUAD_EMUL_REL
= gcvVGCMD_S_MOD
| gcvVGCMD_QUAD_REL
, /* = 103 */
158 gcvVGCMD_SCUBIC_EMUL
= gcvVGCMD_S_MOD
| gcvVGCMD_CUBIC
, /* = 104 */
159 gcvVGCMD_SCUBIC_EMUL_REL
= gcvVGCMD_S_MOD
| gcvVGCMD_CUBIC_REL
, /* = 105 */
161 /* Emulation ARC commands. */
162 gcvVGCMD_ARC_LINE
= gcvVGCMD_ARC_MOD
| gcvVGCMD_LINE
, /* = 132 */
163 gcvVGCMD_ARC_LINE_REL
= gcvVGCMD_ARC_MOD
| gcvVGCMD_LINE_REL
, /* = 133 */
164 gcvVGCMD_ARC_QUAD
= gcvVGCMD_ARC_MOD
| gcvVGCMD_QUAD
, /* = 134 */
165 gcvVGCMD_ARC_QUAD_REL
= gcvVGCMD_ARC_MOD
| gcvVGCMD_QUAD_REL
/* = 135 */
168 typedef enum _gceVGCMD
* gceVGCMD_PTR
;
173 ** @brief Blending modes supported by the HAL.
175 ** This enumeration defines the blending modes supported by the HAL. This is
176 ** in fact a one-to-one mapping of the OpenVG 1.1 blending modes.
178 typedef enum _gceVG_BLEND
181 gcvVG_BLEND_SRC_OVER
,
182 gcvVG_BLEND_DST_OVER
,
185 gcvVG_BLEND_MULTIPLY
,
189 gcvVG_BLEND_ADDITIVE
,
190 gcvVG_BLEND_SUBTRACT
,
198 ** @brief Image modes supported by the HAL.
200 ** This enumeration defines the image modes supported by the HAL. This is
201 ** in fact a one-to-one mapping of the OpenVG 1.1 image modes with the addition
204 typedef enum _gceVG_IMAGE
208 gcvVG_IMAGE_MULTIPLY
,
217 ** @brief Filter mode patterns and imaging.
219 ** This enumeration defines the filter modes supported by the HAL.
221 typedef enum _gceIMAGE_FILTER
232 ** @brief Primitive modes supported by the HAL.
234 ** This enumeration defines the primitive modes supported by the HAL.
236 typedef enum _gceVG_PRIMITIVE
241 gcvVG_TESSELLATED_TILED
248 ** @brief Rendering quality modes supported by the HAL.
250 ** This enumeration defines the rendering quality modes supported by the HAL.
252 typedef enum _gceRENDER_QUALITY
254 gcvVG_NONANTIALIASED
,
264 ** @brief Fill rules supported by the HAL.
266 ** This enumeration defines the fill rules supported by the HAL.
268 typedef enum _gceFILL_RULE
278 ** @brief Cap styles supported by the HAL.
280 ** This enumeration defines the cap styles supported by the HAL.
282 typedef enum _gceCAP_STYLE
293 ** @brief Join styles supported by the HAL.
295 ** This enumeration defines the join styles supported by the HAL.
297 typedef enum _gceJOIN_STYLE
308 ** @brief Channel mask values.
310 ** This enumeration defines the values for channel mask used in image
314 /* Base values for channel mask definitions. */
315 #define gcvCHANNEL_X (0)
316 #define gcvCHANNEL_R (1 << 0)
317 #define gcvCHANNEL_G (1 << 1)
318 #define gcvCHANNEL_B (1 << 2)
319 #define gcvCHANNEL_A (1 << 3)
321 typedef enum _gceCHANNEL
323 gcvCHANNEL_XXXX
= (gcvCHANNEL_X
| gcvCHANNEL_X
| gcvCHANNEL_X
| gcvCHANNEL_X
),
324 gcvCHANNEL_XXXA
= (gcvCHANNEL_X
| gcvCHANNEL_X
| gcvCHANNEL_X
| gcvCHANNEL_A
),
325 gcvCHANNEL_XXBX
= (gcvCHANNEL_X
| gcvCHANNEL_X
| gcvCHANNEL_B
| gcvCHANNEL_X
),
326 gcvCHANNEL_XXBA
= (gcvCHANNEL_X
| gcvCHANNEL_X
| gcvCHANNEL_B
| gcvCHANNEL_A
),
328 gcvCHANNEL_XGXX
= (gcvCHANNEL_X
| gcvCHANNEL_G
| gcvCHANNEL_X
| gcvCHANNEL_X
),
329 gcvCHANNEL_XGXA
= (gcvCHANNEL_X
| gcvCHANNEL_G
| gcvCHANNEL_X
| gcvCHANNEL_A
),
330 gcvCHANNEL_XGBX
= (gcvCHANNEL_X
| gcvCHANNEL_G
| gcvCHANNEL_B
| gcvCHANNEL_X
),
331 gcvCHANNEL_XGBA
= (gcvCHANNEL_X
| gcvCHANNEL_G
| gcvCHANNEL_B
| gcvCHANNEL_A
),
333 gcvCHANNEL_RXXX
= (gcvCHANNEL_R
| gcvCHANNEL_X
| gcvCHANNEL_X
| gcvCHANNEL_X
),
334 gcvCHANNEL_RXXA
= (gcvCHANNEL_R
| gcvCHANNEL_X
| gcvCHANNEL_X
| gcvCHANNEL_A
),
335 gcvCHANNEL_RXBX
= (gcvCHANNEL_R
| gcvCHANNEL_X
| gcvCHANNEL_B
| gcvCHANNEL_X
),
336 gcvCHANNEL_RXBA
= (gcvCHANNEL_R
| gcvCHANNEL_X
| gcvCHANNEL_B
| gcvCHANNEL_A
),
338 gcvCHANNEL_RGXX
= (gcvCHANNEL_R
| gcvCHANNEL_G
| gcvCHANNEL_X
| gcvCHANNEL_X
),
339 gcvCHANNEL_RGXA
= (gcvCHANNEL_R
| gcvCHANNEL_G
| gcvCHANNEL_X
| gcvCHANNEL_A
),
340 gcvCHANNEL_RGBX
= (gcvCHANNEL_R
| gcvCHANNEL_G
| gcvCHANNEL_B
| gcvCHANNEL_X
),
341 gcvCHANNEL_RGBA
= (gcvCHANNEL_R
| gcvCHANNEL_G
| gcvCHANNEL_B
| gcvCHANNEL_A
),
345 /******************************************************************************\
346 ******************************** VG Structures *******************************
347 \******************************************************************************/
352 ** @brief Definition of the color ramp used by the gradient paints.
354 ** The gcsCOLOR_RAMP structure defines the layout of one single color inside
355 ** a color ramp which is used by gradient paints.
357 typedef struct _gcsCOLOR_RAMP
359 /** Value for the color stop. */
362 /** Red color channel value for the color stop. */
365 /** Green color channel value for the color stop. */
368 /** Blue color channel value for the color stop. */
371 /** Alpha color channel value for the color stop. */
374 gcsCOLOR_RAMP
, * gcsCOLOR_RAMP_PTR
;
379 ** @brief Definition of the color ramp used by the gradient paints in fixed form.
381 ** The gcsCOLOR_RAMP structure defines the layout of one single color inside
382 ** a color ramp which is used by gradient paints.
384 typedef struct _gcsFIXED_COLOR_RAMP
386 /** Value for the color stop. */
389 /** Red color channel value for the color stop. */
392 /** Green color channel value for the color stop. */
393 gctFIXED_POINT green
;
395 /** Blue color channel value for the color stop. */
398 /** Alpha color channel value for the color stop. */
399 gctFIXED_POINT alpha
;
401 gcsFIXED_COLOR_RAMP
, * gcsFIXED_COLOR_RAMP_PTR
;
407 ** @brief Rectangle structure used by the gcoVG object.
409 ** This structure defines the layout of a rectangle. Make sure width and
410 ** height are larger than 0.
412 typedef struct _gcsVG_RECT
* gcsVG_RECT_PTR
;
413 typedef struct _gcsVG_RECT
415 /** Left location of the rectangle. */
418 /** Top location of the rectangle. */
421 /** Width of the rectangle. */
424 /** Height of the rectangle. */
432 ** @brief Path command buffer attribute structure.
434 ** The gcsPATH_BUFFER_INFO structure contains the specifics about
435 ** the layout of the path data command buffer.
437 typedef struct _gcsPATH_BUFFER_INFO
* gcsPATH_BUFFER_INFO_PTR
;
438 typedef struct _gcsPATH_BUFFER_INFO
440 gctUINT reservedForHead
;
441 gctUINT reservedForTail
;
448 ** @brief Definition of the path data container structure.
450 ** The gcsPATH structure defines the layout of the path data container.
452 typedef struct _gcsPATH_DATA
* gcsPATH_DATA_PTR
;
453 typedef struct _gcsPATH_DATA
455 /* Data container in command buffer format. */
458 /* Path data type. */
459 gcePATHTYPE dataType
;
464 /******************************************************************************\
465 ********************************* gcoHAL Object ********************************
466 \******************************************************************************/
468 /* Query path data storage attributes. */
470 gcoHAL_QueryPathStorage(
472 OUT gcsPATH_BUFFER_INFO_PTR Information
475 /* Associate a completion signal with the command buffer. */
477 gcoHAL_AssociateCompletion(
479 IN gcsPATH_DATA_PTR PathData
482 /* Release the current command buffer completion signal. */
484 gcoHAL_DeassociateCompletion(
486 IN gcsPATH_DATA_PTR PathData
489 /* Verify whether the command buffer is still in use. */
491 gcoHAL_CheckCompletion(
493 IN gcsPATH_DATA_PTR PathData
496 /* Wait until the command buffer is no longer in use. */
498 gcoHAL_WaitCompletion(
500 IN gcsPATH_DATA_PTR PathData
503 /* Flush the pixel cache. */
509 /* Split a harwdare address into pool and offset. */
513 IN gctUINT32 Address
,
515 OUT gctUINT32
* Offset
518 /* Combine pool and offset into a harwdare address. */
520 gcoHAL_CombineAddress(
524 OUT gctUINT32
* Address
527 /* Schedule to free linear video memory allocated. */
529 gcoHAL_ScheduleVideoMemory(
531 IN gcuVIDMEM_NODE_PTR Node
534 /* Free linear video memory allocated with gcoHAL_AllocateLinearVideoMemory. */
536 gcoHAL_FreeVideoMemory(
538 IN gcuVIDMEM_NODE_PTR Node
541 /* Query command buffer attributes. */
543 gcoHAL_QueryCommandBuffer(
545 OUT gcsCOMMAND_BUFFER_INFO_PTR Information
547 /* Allocate and lock linear video memory. */
549 gcoHAL_AllocateLinearVideoMemory(
552 IN gctUINT Alignment
,
554 OUT gcuVIDMEM_NODE_PTR
* Node
,
555 OUT gctUINT32
* Address
,
556 OUT gctPOINTER
* Memory
559 /* Align the specified size accordingly to the hardware requirements. */
561 gcoHAL_GetAlignedSurfaceSize(
563 IN gceSURF_TYPE Type
,
564 IN OUT gctUINT32_PTR Width
,
565 IN OUT gctUINT32_PTR Height
572 IN gctUINT TaskCount
,
574 OUT gctPOINTER
* Memory
576 /******************************************************************************\
577 ********************************** gcoVG Object ********************************
578 \******************************************************************************/
580 /** @defgroup gcoVG gcoVG
582 ** The gcoVG object abstracts the VG hardware pipe.
586 gcoVG_IsMaskSupported(
587 IN gceSURF_FORMAT Format
591 gcoVG_IsTargetSupported(
592 IN gceSURF_FORMAT Format
596 gcoVG_IsImageSupported(
597 IN gceSURF_FORMAT Format
600 gctUINT8
gcoVG_PackColorComponent(
628 gcoVG_SetUserToSurface(
630 IN gctFLOAT UserToSurface
[9]
634 gcoVG_SetSurfaceToImage(
636 IN gctFLOAT SurfaceToImage
[9]
671 IN gctSIZE_T RectangleCount
,
672 IN gcsVG_RECT_PTR Rectangles
676 gcoVG_EnableColorTransform(
682 gcoVG_SetColorTransform(
684 IN gctFLOAT ColorTransform
[8]
688 gcoVG_SetTileFillColor(
706 gcoVG_SetLinearPaint(
708 IN gctFLOAT Constant
,
714 gcoVG_SetRadialPaint(
716 IN gctFLOAT LinConstant
,
717 IN gctFLOAT LinStepX
,
718 IN gctFLOAT LinStepY
,
719 IN gctFLOAT RadConstant
,
720 IN gctFLOAT RadStepX
,
721 IN gctFLOAT RadStepY
,
722 IN gctFLOAT RadStepXX
,
723 IN gctFLOAT RadStepYY
,
724 IN gctFLOAT RadStepXY
728 gcoVG_SetPatternPaint(
730 IN gctFLOAT UConstant
,
733 IN gctFLOAT VConstant
,
742 IN gcoSURF ColorRamp
,
743 IN gceTILE_MODE ColorRampSpreadMode
750 IN gceTILE_MODE TileMode
,
751 IN gceIMAGE_FILTER Filter
767 gcoVG_SetRenderingQuality(
769 IN gceRENDER_QUALITY Quality
775 IN gceFILL_RULE FillRule
781 IN gcsPATH_DATA_PTR PathData
796 IN gcsPATH_DATA_PTR PathData
,
799 IN gctBOOL SoftwareTesselation
806 IN gcsPOINT_PTR SourceOrigin
,
807 IN gcsPOINT_PTR TargetOrigin
,
808 IN gcsSIZE_PTR SourceSize
,
819 gcoVG_TesselateImage(
822 IN gcsVG_RECT_PTR Rectangle
,
823 IN gceIMAGE_FILTER Filter
,
825 IN gctBOOL SoftwareTesselation
833 IN gcsVG_RECT_PTR SrcRect
,
834 IN gcsVG_RECT_PTR TrgRect
,
835 IN gceIMAGE_FILTER Filter
,
844 IN
const gctFLOAT
* Matrix
,
845 IN gceCHANNEL ColorChannels
,
846 IN gctBOOL FilterLinear
,
847 IN gctBOOL FilterPremultiplied
,
848 IN gcsPOINT_PTR SourceOrigin
,
849 IN gcsPOINT_PTR TargetOrigin
,
855 gcoVG_SeparableConvolve(
859 IN gctINT KernelWidth
,
860 IN gctINT KernelHeight
,
863 IN
const gctINT16
* KernelX
,
864 IN
const gctINT16
* KernelY
,
867 IN gceTILE_MODE TilingMode
,
868 IN gctFLOAT_PTR FillColor
,
869 IN gceCHANNEL ColorChannels
,
870 IN gctBOOL FilterLinear
,
871 IN gctBOOL FilterPremultiplied
,
872 IN gcsPOINT_PTR SourceOrigin
,
873 IN gcsPOINT_PTR TargetOrigin
,
874 IN gcsSIZE_PTR SourceSize
,
884 IN gctFLOAT StdDeviationX
,
885 IN gctFLOAT StdDeviationY
,
886 IN gceTILE_MODE TilingMode
,
887 IN gctFLOAT_PTR FillColor
,
888 IN gceCHANNEL ColorChannels
,
889 IN gctBOOL FilterLinear
,
890 IN gctBOOL FilterPremultiplied
,
891 IN gcsPOINT_PTR SourceOrigin
,
892 IN gcsPOINT_PTR TargetOrigin
,
893 IN gcsSIZE_PTR SourceSize
,
908 #endif /* __gc_hal_vg_h_ */