1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/*
2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * you may not use this file except in compliance with the License.
6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * You may obtain a copy of the License at
7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * See the License for the specific language governing permissions and
14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * limitations under the License.
15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifndef ANDROID_PIXELFLINGER_H
18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ANDROID_PIXELFLINGER_H
19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdint.h>
21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/types.h>
22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <pixelflinger/format.h>
24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// GGL types
26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef int8_t			GGLbyte;		// b
28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef int16_t			GGLshort;		// s
29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef int32_t			GGLint;			// i
30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef ssize_t			GGLsizei;		// i
31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef int32_t			GGLfixed;		// x
32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef int32_t			GGLclampx;		// x
33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef float			GGLfloat;		// f
34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef float			GGLclampf;		// f
35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef double			GGLdouble;		// d
36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef double			GGLclampd;		// d
37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef uint8_t			GGLubyte;		// ub
38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef uint8_t			GGLboolean;		// ub
39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef uint16_t		GGLushort;		// us
40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef uint32_t		GGLuint;		// ui
41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef unsigned int	GGLenum;		// ui
42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef unsigned int	GGLbitfield;	// ui
43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef void			GGLvoid;
44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef int32_t         GGLfixed32;
45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef	int32_t         GGLcolor;
46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef int32_t         GGLcoord;
47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_MAX_VIEWPORT_DIMS           4096
51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_MAX_TEXTURE_SIZE            4096
52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_MAX_ALIASED_POINT_SIZE      0x7FFFFFF
53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_MAX_SMOOTH_POINT_SIZE       2048
54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_MAX_SMOOTH_LINE_WIDTH       2048
55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// All these names are compatible with their OpenGL equivalents
59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// some of them are listed only for completeness
60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectenum GGLNames {
61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_FALSE						= 0,
62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_TRUE						= 1,
63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	// enable/disable
65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_SCISSOR_TEST                = 0x0C11,
66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_TEXTURE_2D					= 0x0DE1,
67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_ALPHA_TEST					= 0x0BC0,
68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_BLEND						= 0x0BE2,
69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_COLOR_LOGIC_OP				= 0x0BF2,
70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_DITHER						= 0x0BD0,
71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_STENCIL_TEST				= 0x0B90,
72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_DEPTH_TEST					= 0x0B71,
73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_AA                          = 0x80000001,
74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_W_LERP                      = 0x80000004,
75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_POINT_SMOOTH_NICE           = 0x80000005,
76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // buffers, pixel drawing/reading
78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_COLOR                       = 0x1800,
79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // fog
81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_FOG                         = 0x0B60,
82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	// shade model
84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_FLAT						= 0x1D00,
85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_SMOOTH						= 0x1D01,
86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	// Texture parameter name
88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_TEXTURE_MIN_FILTER			= 0x2801,
89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_TEXTURE_MAG_FILTER			= 0x2800,
90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_TEXTURE_WRAP_S				= 0x2802,
91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_TEXTURE_WRAP_T				= 0x2803,
92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_TEXTURE_WRAP_R				= 0x2804,
93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	// Texture Filter
95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_NEAREST						= 0x2600,
96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_LINEAR						= 0x2601,
97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_NEAREST_MIPMAP_NEAREST		= 0x2700,
98dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_LINEAR_MIPMAP_NEAREST		= 0x2701,
99dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_NEAREST_MIPMAP_LINEAR		= 0x2702,
100dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_LINEAR_MIPMAP_LINEAR		= 0x2703,
101dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
102dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	// Texture Wrap Mode
103dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_CLAMP						= 0x2900,
104dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_REPEAT						= 0x2901,
105dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_CLAMP_TO_EDGE               = 0x812F,
106dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
107dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	// Texture Env Mode
108dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_REPLACE						= 0x1E01,
109dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_MODULATE					= 0x2100,
110dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_DECAL						= 0x2101,
111dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_ADD							= 0x0104,
112dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
113dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	// Texture Env Parameter
114dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_TEXTURE_ENV_MODE			= 0x2200,
115dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_TEXTURE_ENV_COLOR			= 0x2201,
116dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
117dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	// Texture Env Target
118dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_TEXTURE_ENV					= 0x2300,
119dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
120dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // Texture coord generation
121dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_TEXTURE_GEN_MODE            = 0x2500,
122dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_S                           = 0x2000,
123dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_T                           = 0x2001,
124dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_R                           = 0x2002,
125dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_Q                           = 0x2003,
126dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ONE_TO_ONE                  = 0x80000002,
127dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_AUTOMATIC                   = 0x80000003,
128dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
129dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // AlphaFunction
130dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_NEVER                       = 0x0200,
131dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_LESS                        = 0x0201,
132dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_EQUAL                       = 0x0202,
133dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_LEQUAL                      = 0x0203,
134dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_GREATER                     = 0x0204,
135dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_NOTEQUAL                    = 0x0205,
136dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_GEQUAL                      = 0x0206,
137dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ALWAYS                      = 0x0207,
138dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
139dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // LogicOp
140dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_CLEAR                       = 0x1500,   // 0
141dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_AND                         = 0x1501,   // s & d
142dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_AND_REVERSE                 = 0x1502,   // s & ~d
143dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_COPY                        = 0x1503,   // s
144dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_AND_INVERTED                = 0x1504,   // ~s & d
145dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_NOOP                        = 0x1505,   // d
146dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_XOR                         = 0x1506,   // s ^ d
147dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_OR                          = 0x1507,   // s | d
148dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_NOR                         = 0x1508,   // ~(s | d)
149dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_EQUIV                       = 0x1509,   // ~(s ^ d)
150dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_INVERT                      = 0x150A,   // ~d
151dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_OR_REVERSE                  = 0x150B,   // s | ~d
152dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_COPY_INVERTED               = 0x150C,   // ~s
153dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_OR_INVERTED                 = 0x150D,   // ~s | d
154dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_NAND                        = 0x150E,   // ~(s & d)
155dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_SET                         = 0x150F,   // 1
156dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
157dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	// blending equation & function
158dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_ZERO                        = 0,		// SD
159dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_ONE                         = 1,		// SD
160dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_SRC_COLOR                   = 0x0300,	//  D
161dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_ONE_MINUS_SRC_COLOR         = 0x0301,	//	D
162dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_SRC_ALPHA                   = 0x0302,	// SD
163dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_ONE_MINUS_SRC_ALPHA			= 0x0303,	// SD
164dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_DST_ALPHA					= 0x0304,	// SD
165dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_ONE_MINUS_DST_ALPHA			= 0x0305,	// SD
166dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_DST_COLOR					= 0x0306,	// S
167dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_ONE_MINUS_DST_COLOR			= 0x0307,	// S
168dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGL_SRC_ALPHA_SATURATE			= 0x0308,	// S
169dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
170dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // clear bits
171dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_DEPTH_BUFFER_BIT            = 0x00000100,
172dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_STENCIL_BUFFER_BIT          = 0x00000400,
173dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_COLOR_BUFFER_BIT            = 0x00004000,
174dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
175dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // errors
176dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_NO_ERROR                    = 0,
177dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_INVALID_ENUM                = 0x0500,
178dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_INVALID_VALUE               = 0x0501,
179dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_INVALID_OPERATION           = 0x0502,
180dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_STACK_OVERFLOW              = 0x0503,
181dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_STACK_UNDERFLOW             = 0x0504,
182dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_OUT_OF_MEMORY               = 0x0505
183dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
184dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
185dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
186dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
187dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct {
188dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLsizei    version;    // always set to sizeof(GGLSurface)
189dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLuint     width;      // width in pixels
190dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLuint     height;     // height in pixels
191dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLint      stride;     // stride in pixels
192dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLubyte*   data;       // pointer to the bits
193dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLubyte    format;     // pixel format
194dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLubyte    rfu[3];     // must be zero
195dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // these values are dependent on the used format
196dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    union {
197dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        GGLint  compressedFormat;
198dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        GGLint  vstride;
199dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    };
200dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void*       reserved;
201dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} GGLSurface;
202dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
203dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
204dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct {
205dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // immediate rendering
206dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*pointx)(void *con, const GGLcoord* v, GGLcoord r);
207dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*linex)(void *con,
208dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            const GGLcoord* v0, const GGLcoord* v1, GGLcoord width);
209dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*recti)(void* c, GGLint l, GGLint t, GGLint r, GGLint b);
210dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*trianglex)(void* c,
211dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLcoord const* v0, GGLcoord const* v1, GGLcoord const* v2);
212dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
213dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // scissor
214dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*scissor)(void* c, GGLint x, GGLint y, GGLsizei width, GGLsizei height);
215dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
216dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // Set the textures and color buffers
217dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*activeTexture)(void* c, GGLuint tmu);
218dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*bindTexture)(void* c, const GGLSurface* surface);
219dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*colorBuffer)(void* c, const GGLSurface* surface);
220dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*readBuffer)(void* c, const GGLSurface* surface);
221dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*depthBuffer)(void* c, const GGLSurface* surface);
222dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*bindTextureLod)(void* c, GGLuint tmu, const GGLSurface* surface);
223dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
224dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // enable/disable features
225dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*enable)(void* c, GGLenum name);
226dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*disable)(void* c, GGLenum name);
227dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*enableDisable)(void* c, GGLenum name, GGLboolean en);
228dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
229dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // specify the fragment's color
230dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*shadeModel)(void* c, GGLenum mode);
231dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*color4xv)(void* c, const GGLclampx* color);
232dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // specify color iterators (16.16)
233dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*colorGrad12xv)(void* c, const GGLcolor* grad);
234dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
235dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // specify Z coordinate iterators (0.32)
236dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*zGrad3xv)(void* c, const GGLfixed32* grad);
237dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
238dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // specify W coordinate iterators (16.16)
239dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*wGrad3xv)(void* c, const GGLfixed* grad);
240dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
241dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // specify fog iterator & color (16.16)
242dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*fogGrad3xv)(void* c, const GGLfixed* grad);
243dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*fogColor3xv)(void* c, const GGLclampx* color);
244dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
245dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // specify blending parameters
246dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*blendFunc)(void* c, GGLenum src, GGLenum dst);
247dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*blendFuncSeparate)(void* c,  GGLenum src, GGLenum dst,
248dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                                        GGLenum srcAlpha, GGLenum dstAplha);
249dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
250dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // texture environnement (REPLACE / MODULATE / DECAL / BLEND)
251dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*texEnvi)(void* c,    GGLenum target,
252dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                                GGLenum pname,
253dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                                GGLint param);
254dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
255dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*texEnvxv)(void* c, GGLenum target,
256dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLenum pname, const GGLfixed* params);
257dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
258dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // texture parameters (Wrapping, filter)
259dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*texParameteri)(void* c,  GGLenum target,
260dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                                    GGLenum pname,
261dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                                    GGLint param);
262dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
263dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // texture iterators (16.16)
264dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*texCoord2i)(void* c, GGLint s, GGLint t);
265dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*texCoord2x)(void* c, GGLfixed s, GGLfixed t);
266dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
267dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // s, dsdx, dsdy, scale, t, dtdx, dtdy, tscale
268dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // This api uses block floating-point for S and T texture coordinates.
269dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // All values are given in 16.16, scaled by 'scale'. In other words,
270dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // set scale to 0, for 16.16 values.
271dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*texCoordGradScale8xv)(void* c, GGLint tmu, const int32_t* grad8);
272dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
273dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*texGeni)(void* c, GGLenum coord, GGLenum pname, GGLint param);
274dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
275dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // masking
276dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*colorMask)(void* c,  GGLboolean red,
277dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                                GGLboolean green,
278dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                                GGLboolean blue,
279dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                                GGLboolean alpha);
280dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
281dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*depthMask)(void* c, GGLboolean flag);
282dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
283dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*stencilMask)(void* c, GGLuint mask);
284dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
285dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // alpha func
286dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*alphaFuncx)(void* c, GGLenum func, GGLclampx ref);
287dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
288dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // depth func
289dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*depthFunc)(void* c, GGLenum func);
290dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
291dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // logic op
292dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*logicOp)(void* c, GGLenum opcode);
293dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
294dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // clear
295dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*clear)(void* c, GGLbitfield mask);
296dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*clearColorx)(void* c,
297dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLclampx r, GGLclampx g, GGLclampx b, GGLclampx a);
298dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*clearDepthx)(void* c, GGLclampx depth);
299dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*clearStencil)(void* c, GGLint s);
300dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
301dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // framebuffer operations
302dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*copyPixels)(void* c, GGLint x, GGLint y,
303dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLsizei width, GGLsizei height, GGLenum type);
304dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*rasterPos2x)(void* c, GGLfixed x, GGLfixed y);
305dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void (*rasterPos2i)(void* c, GGLint x, GGLint y);
306dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} GGLContext;
307dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
308dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
309dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
310dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifdef __cplusplus
311dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern "C" {
312dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif
313dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
314dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// construct / destroy the context
315dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectssize_t gglInit(GGLContext** context);
316dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectssize_t gglUninit(GGLContext* context);
317dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
3186e1a9430e8e8de13109f1b234d937541a45a8ac5Jim HuangGGLint gglBitBlit(
319dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        GGLContext* c,
320dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        int tmu,
321dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        GGLint crop[4],
322dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        GGLint where[4]);
323dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
324dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifdef __cplusplus
325dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
326dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif
327dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
328dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
329dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
330dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif // ANDROID_PIXELFLINGER_H
331