1 /****************************************************************************
3 * Copyright (C) 2005 - 2014 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_raster_h_
23 #define __gc_hal_raster_h_
25 #include "gc_hal_enum.h"
26 #include "gc_hal_types.h"
32 /******************************************************************************\
33 ****************************** Object Declarations *****************************
34 \******************************************************************************/
36 typedef struct _gcoBRUSH * gcoBRUSH;
37 typedef struct _gcoBRUSH_CACHE * gcoBRUSH_CACHE;
39 /******************************************************************************\
40 ******************************** gcoBRUSH Object *******************************
41 \******************************************************************************/
43 /* Create a new solid color gcoBRUSH object. */
45 gcoBRUSH_ConstructSingleColor(
47 IN gctUINT32 ColorConvert,
53 /* Create a new monochrome gcoBRUSH object. */
55 gcoBRUSH_ConstructMonochrome(
59 IN gctUINT32 ColorConvert,
67 /* Create a color gcoBRUSH object. */
69 gcoBRUSH_ConstructColor(
73 IN gctPOINTER Address,
74 IN gceSURF_FORMAT Format,
79 /* Destroy an gcoBRUSH object. */
85 /******************************************************************************\
86 ******************************** gcoSURF Object *******************************
87 \******************************************************************************/
89 /* Set cipping rectangle. */
95 /* Clear one or more rectangular areas. */
98 IN gcoSURF DestSurface,
99 IN gctUINT32 RectCount,
100 IN gcsRECT_PTR DestRect,
101 IN gctUINT32 LoColor,
105 /* Draw one or more Bresenham lines. */
109 IN gctUINT32 LineCount,
110 IN gcsRECT_PTR Position,
116 /* Generic rectangular blit. */
119 IN OPTIONAL gcoSURF SrcSurface,
120 IN gcoSURF DestSurface,
121 IN gctUINT32 RectCount,
122 IN OPTIONAL gcsRECT_PTR SrcRect,
123 IN gcsRECT_PTR DestRect,
124 IN OPTIONAL gcoBRUSH Brush,
127 IN OPTIONAL gceSURF_TRANSPARENCY Transparency,
128 IN OPTIONAL gctUINT32 TransparencyColor,
129 IN OPTIONAL gctPOINTER Mask,
130 IN OPTIONAL gceSURF_MONOPACK MaskPack
133 /* Monochrome blit. */
136 IN gcoSURF DestSurface,
137 IN gctPOINTER Source,
138 IN gceSURF_MONOPACK SourcePack,
139 IN gcsPOINT_PTR SourceSize,
140 IN gcsPOINT_PTR SourceOrigin,
141 IN gcsRECT_PTR DestRect,
142 IN OPTIONAL gcoBRUSH Brush,
145 IN gctBOOL ColorConvert,
146 IN gctUINT8 MonoTransparency,
147 IN gceSURF_TRANSPARENCY Transparency,
148 IN gctUINT32 FgColor,
155 IN gcoSURF SrcSurface,
156 IN gcoSURF DestSurface,
157 IN gcsRECT_PTR SrcRect,
158 IN gcsRECT_PTR DestRect,
159 IN gcsRECT_PTR DestSubRect
162 /* Enable alpha blending engine in the hardware and disengage the ROP engine. */
164 gcoSURF_EnableAlphaBlend(
166 IN gctUINT8 SrcGlobalAlphaValue,
167 IN gctUINT8 DstGlobalAlphaValue,
168 IN gceSURF_PIXEL_ALPHA_MODE SrcAlphaMode,
169 IN gceSURF_PIXEL_ALPHA_MODE DstAlphaMode,
170 IN gceSURF_GLOBAL_ALPHA_MODE SrcGlobalAlphaMode,
171 IN gceSURF_GLOBAL_ALPHA_MODE DstGlobalAlphaMode,
172 IN gceSURF_BLEND_FACTOR_MODE SrcFactorMode,
173 IN gceSURF_BLEND_FACTOR_MODE DstFactorMode,
174 IN gceSURF_PIXEL_COLOR_MODE SrcColorMode,
175 IN gceSURF_PIXEL_COLOR_MODE DstColorMode
178 /* Disable alpha blending engine in the hardware and engage the ROP engine. */
180 gcoSURF_DisableAlphaBlend(
184 /* Copy a rectangular area with format conversion. */
197 /* Read surface pixel. */
201 IN gctPOINTER Memory,
204 IN gceSURF_FORMAT Format,
205 OUT gctPOINTER PixelValue
208 /* Write surface pixel. */
212 IN gctPOINTER Memory,
215 IN gceSURF_FORMAT Format,
216 IN gctPOINTER PixelValue
228 gceSURF_ROTATION Rotation
234 gceSURF_ROTATION Rotation
237 /******************************************************************************\
238 ********************************** gco2D Object *********************************
239 \******************************************************************************/
241 /* Construct a new gco2D object. */
248 /* Destroy an gco2D object. */
254 /* Sets the maximum number of brushes in the brush cache. */
261 /* Flush the brush. */
266 IN gceSURF_FORMAT Format
269 /* Program the specified solid color brush. */
271 gco2D_LoadSolidBrush(
273 IN gceSURF_FORMAT Format,
274 IN gctUINT32 ColorConvert,
280 gco2D_LoadMonochromeBrush(
282 IN gctUINT32 OriginX,
283 IN gctUINT32 OriginY,
284 IN gctUINT32 ColorConvert,
285 IN gctUINT32 FgColor,
286 IN gctUINT32 BgColor,
292 gco2D_LoadColorBrush(
294 IN gctUINT32 OriginX,
295 IN gctUINT32 OriginY,
296 IN gctUINT32 Address,
297 IN gceSURF_FORMAT Format,
301 /* Configure monochrome source. */
303 gco2D_SetMonochromeSource(
305 IN gctBOOL ColorConvert,
306 IN gctUINT8 MonoTransparency,
307 IN gceSURF_MONOPACK DataPack,
308 IN gctBOOL CoordRelative,
309 IN gceSURF_TRANSPARENCY Transparency,
310 IN gctUINT32 FgColor,
314 /* Configure color source. */
316 gco2D_SetColorSource(
318 IN gctUINT32 Address,
320 IN gceSURF_FORMAT Format,
321 IN gceSURF_ROTATION Rotation,
322 IN gctUINT32 SurfaceWidth,
323 IN gctBOOL CoordRelative,
324 IN gceSURF_TRANSPARENCY Transparency,
325 IN gctUINT32 TransparencyColor
328 /* Configure color source extension for full rotation. */
330 gco2D_SetColorSourceEx(
332 IN gctUINT32 Address,
334 IN gceSURF_FORMAT Format,
335 IN gceSURF_ROTATION Rotation,
336 IN gctUINT32 SurfaceWidth,
337 IN gctUINT32 SurfaceHeight,
338 IN gctBOOL CoordRelative,
339 IN gceSURF_TRANSPARENCY Transparency,
340 IN gctUINT32 TransparencyColor
343 /* Configure color source. */
345 gco2D_SetColorSourceAdvanced(
347 IN gctUINT32 Address,
349 IN gceSURF_FORMAT Format,
350 IN gceSURF_ROTATION Rotation,
351 IN gctUINT32 SurfaceWidth,
352 IN gctUINT32 SurfaceHeight,
353 IN gctBOOL CoordRelative
357 gco2D_SetColorSourceN(
359 IN gctUINT32 Address,
361 IN gceSURF_FORMAT Format,
362 IN gceSURF_ROTATION Rotation,
363 IN gctUINT32 SurfaceWidth,
364 IN gctUINT32 SurfaceHeight,
365 IN gctUINT32 SurfaceNumber
368 /* Configure masked color source. */
370 gco2D_SetMaskedSource(
372 IN gctUINT32 Address,
374 IN gceSURF_FORMAT Format,
375 IN gctBOOL CoordRelative,
376 IN gceSURF_MONOPACK MaskPack
379 /* Configure masked color source extension for full rotation. */
381 gco2D_SetMaskedSourceEx(
383 IN gctUINT32 Address,
385 IN gceSURF_FORMAT Format,
386 IN gctBOOL CoordRelative,
387 IN gceSURF_MONOPACK MaskPack,
388 IN gceSURF_ROTATION Rotation,
389 IN gctUINT32 SurfaceWidth,
390 IN gctUINT32 SurfaceHeight
393 /* Setup the source rectangle. */
397 IN gcsRECT_PTR SrcRect
400 /* Set clipping rectangle. */
407 /* Configure destination. */
411 IN gctUINT32 Address,
413 IN gceSURF_ROTATION Rotation,
414 IN gctUINT32 SurfaceWidth
417 /* Configure destination extension for full rotation. */
421 IN gctUINT32 Address,
423 IN gceSURF_ROTATION Rotation,
424 IN gctUINT32 SurfaceWidth,
425 IN gctUINT32 SurfaceHeight
428 /* Calculate and program the stretch factors. */
430 gco2D_CalcStretchFactor(
433 IN gctINT32 DestSize,
434 OUT gctUINT32_PTR Factor
438 gco2D_SetStretchFactors(
440 IN gctUINT32 HorFactor,
441 IN gctUINT32 VerFactor
444 /* Calculate and program the stretch factors based on the rectangles. */
446 gco2D_SetStretchRectFactors(
448 IN gcsRECT_PTR SrcRect,
449 IN gcsRECT_PTR DestRect
452 /* Create a new solid color gcoBRUSH object. */
454 gco2D_ConstructSingleColorBrush(
456 IN gctUINT32 ColorConvert,
462 /* Create a new monochrome gcoBRUSH object. */
464 gco2D_ConstructMonochromeBrush(
466 IN gctUINT32 OriginX,
467 IN gctUINT32 OriginY,
468 IN gctUINT32 ColorConvert,
469 IN gctUINT32 FgColor,
470 IN gctUINT32 BgColor,
476 /* Create a color gcoBRUSH object. */
478 gco2D_ConstructColorBrush(
480 IN gctUINT32 OriginX,
481 IN gctUINT32 OriginY,
482 IN gctPOINTER Address,
483 IN gceSURF_FORMAT Format,
488 /* Clear one or more rectangular areas. */
492 IN gctUINT32 RectCount,
494 IN gctUINT32 Color32,
497 IN gceSURF_FORMAT DestFormat
500 /* Draw one or more Bresenham lines. */
504 IN gctUINT32 LineCount,
505 IN gcsRECT_PTR Position,
509 IN gceSURF_FORMAT DestFormat
512 /* Draw one or more Bresenham lines based on the 32-bit color. */
516 IN gctUINT32 LineCount,
517 IN gcsRECT_PTR Position,
518 IN gctUINT32 Color32,
521 IN gceSURF_FORMAT DestFormat
528 IN gctUINT32 RectCount,
532 IN gceSURF_FORMAT DestFormat
538 IN gctUINT32 SrcCount,
539 IN gctUINT32 RectCount,
543 IN gceSURF_FORMAT DestFormat
550 IN gctUINT32 RectCount,
551 IN gcsRECT_PTR SrcRect,
552 IN gcsRECT_PTR DestRect,
555 IN gceSURF_FORMAT DestFormat
562 IN gctUINT32 RectCount,
566 IN gceSURF_FORMAT DestFormat
569 /* Monochrome blit. */
573 IN gctPOINTER StreamBits,
574 IN gcsPOINT_PTR StreamSize,
575 IN gcsRECT_PTR StreamRect,
576 IN gceSURF_MONOPACK SrcStreamPack,
577 IN gceSURF_MONOPACK DestStreamPack,
578 IN gcsRECT_PTR DestRect,
581 IN gceSURF_FORMAT DestFormat
587 IN gctPOINTER StreamBits,
588 IN gctINT32 StreamStride,
589 IN gctINT32 StreamWidth,
590 IN gctINT32 StreamHeight,
593 IN gctUINT32 FgColor,
594 IN gctUINT32 BgColor,
595 IN gcsRECT_PTR SrcRect,
596 IN gcsRECT_PTR DstRect,
601 /* Set kernel size. */
605 IN gctUINT8 HorKernelSize,
606 IN gctUINT8 VerKernelSize
609 /* Set filter type. */
613 IN gceFILTER_TYPE FilterType
616 /* Set the filter kernel by user. */
618 gco2D_SetUserFilterKernel(
620 IN gceFILTER_PASS_TYPE PassType,
621 IN gctUINT16_PTR KernelArray
624 /* Select the pass(es) to be done for user defined filter. */
626 gco2D_EnableUserFilterPasses(
632 /* Frees the temporary buffer allocated by filter blit operation. */
634 gco2D_FreeFilterBuffer(
642 IN gctUINT32 SrcAddress,
643 IN gctUINT SrcStride,
644 IN gctUINT32 SrcUAddress,
645 IN gctUINT SrcUStride,
646 IN gctUINT32 SrcVAddress,
647 IN gctUINT SrcVStride,
648 IN gceSURF_FORMAT SrcFormat,
649 IN gceSURF_ROTATION SrcRotation,
650 IN gctUINT32 SrcSurfaceWidth,
651 IN gcsRECT_PTR SrcRect,
652 IN gctUINT32 DestAddress,
653 IN gctUINT DestStride,
654 IN gceSURF_FORMAT DestFormat,
655 IN gceSURF_ROTATION DestRotation,
656 IN gctUINT32 DestSurfaceWidth,
657 IN gcsRECT_PTR DestRect,
658 IN gcsRECT_PTR DestSubRect
661 /* Filter blit extension for full rotation. */
665 IN gctUINT32 SrcAddress,
666 IN gctUINT SrcStride,
667 IN gctUINT32 SrcUAddress,
668 IN gctUINT SrcUStride,
669 IN gctUINT32 SrcVAddress,
670 IN gctUINT SrcVStride,
671 IN gceSURF_FORMAT SrcFormat,
672 IN gceSURF_ROTATION SrcRotation,
673 IN gctUINT32 SrcSurfaceWidth,
674 IN gctUINT32 SrcSurfaceHeight,
675 IN gcsRECT_PTR SrcRect,
676 IN gctUINT32 DestAddress,
677 IN gctUINT DestStride,
678 IN gceSURF_FORMAT DestFormat,
679 IN gceSURF_ROTATION DestRotation,
680 IN gctUINT32 DestSurfaceWidth,
681 IN gctUINT32 DestSurfaceHeight,
682 IN gcsRECT_PTR DestRect,
683 IN gcsRECT_PTR DestSubRect
689 IN gctUINT32_PTR SrcAddresses,
690 IN gctUINT32 SrcAddressNum,
691 IN gctUINT32_PTR SrcStrides,
692 IN gctUINT32 SrcStrideNum,
693 IN gceTILING SrcTiling,
694 IN gceSURF_FORMAT SrcFormat,
695 IN gceSURF_ROTATION SrcRotation,
696 IN gctUINT32 SrcSurfaceWidth,
697 IN gctUINT32 SrcSurfaceHeight,
698 IN gcsRECT_PTR SrcRect,
699 IN gctUINT32_PTR DestAddresses,
700 IN gctUINT32 DestAddressNum,
701 IN gctUINT32_PTR DestStrides,
702 IN gctUINT32 DestStrideNum,
703 IN gceTILING DestTiling,
704 IN gceSURF_FORMAT DestFormat,
705 IN gceSURF_ROTATION DestRotation,
706 IN gctUINT32 DestSurfaceWidth,
707 IN gctUINT32 DestSurfaceHeight,
708 IN gcsRECT_PTR DestRect,
709 IN gcsRECT_PTR DestSubRect
712 /* Enable alpha blending engine in the hardware and disengage the ROP engine. */
714 gco2D_EnableAlphaBlend(
716 IN gctUINT8 SrcGlobalAlphaValue,
717 IN gctUINT8 DstGlobalAlphaValue,
718 IN gceSURF_PIXEL_ALPHA_MODE SrcAlphaMode,
719 IN gceSURF_PIXEL_ALPHA_MODE DstAlphaMode,
720 IN gceSURF_GLOBAL_ALPHA_MODE SrcGlobalAlphaMode,
721 IN gceSURF_GLOBAL_ALPHA_MODE DstGlobalAlphaMode,
722 IN gceSURF_BLEND_FACTOR_MODE SrcFactorMode,
723 IN gceSURF_BLEND_FACTOR_MODE DstFactorMode,
724 IN gceSURF_PIXEL_COLOR_MODE SrcColorMode,
725 IN gceSURF_PIXEL_COLOR_MODE DstColorMode
728 /* Enable alpha blending engine in the hardware. */
730 gco2D_EnableAlphaBlendAdvanced(
732 IN gceSURF_PIXEL_ALPHA_MODE SrcAlphaMode,
733 IN gceSURF_PIXEL_ALPHA_MODE DstAlphaMode,
734 IN gceSURF_GLOBAL_ALPHA_MODE SrcGlobalAlphaMode,
735 IN gceSURF_GLOBAL_ALPHA_MODE DstGlobalAlphaMode,
736 IN gceSURF_BLEND_FACTOR_MODE SrcFactorMode,
737 IN gceSURF_BLEND_FACTOR_MODE DstFactorMode
740 /* Enable alpha blending engine with Porter Duff rule. */
742 gco2D_SetPorterDuffBlending(
744 IN gce2D_PORTER_DUFF_RULE Rule
747 /* Disable alpha blending engine in the hardware and engage the ROP engine. */
749 gco2D_DisableAlphaBlend(
753 /* Retrieve the maximum number of 32-bit data chunks for a single DE command. */
755 gco2D_GetMaximumDataCount(
759 /* Retrieve the maximum number of rectangles, that can be passed in a single DE command. */
761 gco2D_GetMaximumRectCount(
765 /* Returns the pixel alignment of the surface. */
767 gco2D_GetPixelAlignment(
768 gceSURF_FORMAT Format,
769 gcsPOINT_PTR Alignment
772 /* Retrieve monochrome stream pack size. */
775 IN gceSURF_MONOPACK StreamPack,
776 OUT gctUINT32 * PackWidth,
777 OUT gctUINT32 * PackHeight
780 /* Flush the 2D pipeline. */
786 /* Load 256-entry color table for INDEX8 source surfaces. */
790 IN gctUINT FirstIndex,
791 IN gctUINT IndexCount,
792 IN gctPOINTER ColorTable,
793 IN gctBOOL ColorConvert
796 /* Enable/disable 2D BitBlt mirrorring. */
798 gco2D_SetBitBlitMirror(
800 IN gctBOOL HorizontalMirror,
801 IN gctBOOL VerticalMirror
805 * Set the transparency for source, destination and pattern.
806 * It also enable or disable the DFB color key mode.
809 gco2D_SetTransparencyAdvancedEx(
811 IN gce2D_TRANSPARENCY SrcTransparency,
812 IN gce2D_TRANSPARENCY DstTransparency,
813 IN gce2D_TRANSPARENCY PatTransparency,
814 IN gctBOOL EnableDFBColorKeyMode
817 /* Set the transparency for source, destination and pattern. */
819 gco2D_SetTransparencyAdvanced(
821 IN gce2D_TRANSPARENCY SrcTransparency,
822 IN gce2D_TRANSPARENCY DstTransparency,
823 IN gce2D_TRANSPARENCY PatTransparency
826 /* Set the source color key. */
828 gco2D_SetSourceColorKeyAdvanced(
830 IN gctUINT32 ColorKey
833 /* Set the source color key range. */
835 gco2D_SetSourceColorKeyRangeAdvanced(
837 IN gctUINT32 ColorKeyLow,
838 IN gctUINT32 ColorKeyHigh
841 /* Set the target color key. */
843 gco2D_SetTargetColorKeyAdvanced(
845 IN gctUINT32 ColorKey
848 /* Set the target color key range. */
850 gco2D_SetTargetColorKeyRangeAdvanced(
852 IN gctUINT32 ColorKeyLow,
853 IN gctUINT32 ColorKeyHigh
856 /* Set the YUV color space mode. */
858 gco2D_SetYUVColorMode(
860 IN gce2D_YUV_COLOR_MODE Mode
863 /* Setup the source global color value in ARGB8 format. */
864 gceSTATUS gco2D_SetSourceGlobalColorAdvanced(
869 /* Setup the target global color value in ARGB8 format. */
870 gceSTATUS gco2D_SetTargetGlobalColorAdvanced(
875 /* Setup the source and target pixel multiply modes. */
877 gco2D_SetPixelMultiplyModeAdvanced(
879 IN gce2D_PIXEL_COLOR_MULTIPLY_MODE SrcPremultiplySrcAlpha,
880 IN gce2D_PIXEL_COLOR_MULTIPLY_MODE DstPremultiplyDstAlpha,
881 IN gce2D_GLOBAL_COLOR_MULTIPLY_MODE SrcPremultiplyGlobalMode,
882 IN gce2D_PIXEL_COLOR_MULTIPLY_MODE DstDemultiplyDstAlpha
885 /* Set the GPU clock cycles after which the idle engine will keep auto-flushing. */
887 gco2D_SetAutoFlushCycles(
893 /* Read the profile registers available in the 2D engine and sets them in the profile.
894 The function will also reset the pixelsRendered counter every time.
899 OPTIONAL gcs2D_PROFILE_PTR Profile
903 /* Enable or disable 2D dithering. */
911 gco2D_SetGenericSource(
913 IN gctUINT32_PTR Addresses,
914 IN gctUINT32 AddressNum,
915 IN gctUINT32_PTR Strides,
916 IN gctUINT32 StrideNum,
918 IN gceSURF_FORMAT Format,
919 IN gceSURF_ROTATION Rotation,
920 IN gctUINT32 SurfaceWidth,
921 IN gctUINT32 SurfaceHeight
925 gco2D_SetGenericTarget(
927 IN gctUINT32_PTR Addresses,
928 IN gctUINT32 AddressNum,
929 IN gctUINT32_PTR Strides,
930 IN gctUINT32 StrideNum,
932 IN gceSURF_FORMAT Format,
933 IN gceSURF_ROTATION Rotation,
934 IN gctUINT32 SurfaceWidth,
935 IN gctUINT32 SurfaceHeight
939 gco2D_SetCurrentSourceIndex(
941 IN gctUINT32 SrcIndex
945 gco2D_MultiSourceBlit(
947 IN gctUINT32 SourceMask,
948 IN gcsRECT_PTR DestRect,
949 IN gctUINT32 RectCount
960 gco2D_SetGdiStretchMode(
966 gco2D_SetSourceTileStatus(
968 IN gce2D_TILE_STATUS_CONFIG TSControl,
969 IN gceSURF_FORMAT CompressedFormat,
970 IN gctUINT32 ClearValue,
971 IN gctUINT32 GpuAddress
975 gco2D_SetTargetTileStatus(
977 IN gce2D_TILE_STATUS_CONFIG TileStatusConfig,
978 IN gceSURF_FORMAT CompressedFormat,
979 IN gctUINT32 ClearValue,
980 IN gctUINT32 GpuAddress
987 OUT gctUINT32_PTR Value
993 IN gce2D_STATE State,
998 gco2D_SetStateArrayI32(
1000 IN gce2D_STATE State,
1001 IN gctINT32_PTR Array,
1002 IN gctINT32 ArraySize
1006 gco2D_SetStateArrayU32(
1008 IN gce2D_STATE State,
1009 IN gctUINT32_PTR Array,
1010 IN gctINT32 ArraySize
1014 gco2D_SetTargetRect(
1025 gco2D_UnSet2DEngine(
1038 #endif /* __gc_hal_raster_h_ */