1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/*
2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copyright (C) 2006 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_GGL_CONTEXT_H
18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ANDROID_GGL_CONTEXT_H
19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdint.h>
21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stddef.h>
22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <string.h>
23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/types.h>
24ce51b3b55f3facfce5dccebc73bd1903e163103eMathias Agopian#include <endian.h>
25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <pixelflinger/pixelflinger.h>
27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <private/pixelflinger/ggl_fixed.h>
28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectnamespace android {
30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#if BYTE_ORDER == LITTLE_ENDIAN
34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectinline uint32_t GGL_RGBA_TO_HOST(uint32_t v) {
36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return v;
37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectinline uint32_t GGL_HOST_TO_RGBA(uint32_t v) {
39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return v;
40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#else
43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectinline uint32_t GGL_RGBA_TO_HOST(uint32_t v) {
45096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand#if defined(__mips__) && __mips==32 && __mips_isa_rev>=2
46096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand    uint32_t r;
47096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand    __asm__("wsbh %0, %1;"
48096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand        "rotr %0, %0, 16"
49096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand        : "=r" (r)
50096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand        : "r" (v)
51096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand        );
52096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand    return r;
53096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand#else
54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return (v<<24) | (v>>24) | ((v<<8)&0xff0000) | ((v>>8)&0xff00);
55096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand#endif
56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectinline uint32_t GGL_HOST_TO_RGBA(uint32_t v) {
58096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand#if defined(__mips__) && __mips==32 && __mips_isa_rev>=2
59096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand    uint32_t r;
60096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand    __asm__("wsbh %0, %1;"
61096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand        "rotr %0, %0, 16"
62096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand        : "=r" (r)
63096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand        : "r" (v)
64096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand        );
65096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand    return r;
66096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand#else
67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return (v<<24) | (v>>24) | ((v<<8)&0xff0000) | ((v>>8)&0xff00);
68096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand#endif
69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif
72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_DITHER_BITS = 6;  // dither weights stored on 6 bits
76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_DITHER_ORDER_SHIFT= 3;
77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_DITHER_ORDER      = (1<<GGL_DITHER_ORDER_SHIFT);
78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_DITHER_SIZE       = GGL_DITHER_ORDER * GGL_DITHER_ORDER;
79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_DITHER_MASK       = GGL_DITHER_ORDER-1;
80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_SUBPIXEL_BITS = 4;
84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// TRI_FRACTION_BITS defines the number of bits we want to use
86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// for the sub-pixel coordinates during the edge stepping, the
87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// value shouldn't be more than 7, or bad things are going to
88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// happen when drawing large triangles (8 doesn't work because
89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// 32 bit muls will loose the sign bit)
90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_FRACTION_BITS  (GGL_SUBPIXEL_BITS)
92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_ONE            (1 << TRI_FRACTION_BITS)
93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_HALF           (1 << (TRI_FRACTION_BITS-1))
94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_FROM_INT(x)    ((x) << TRI_FRACTION_BITS)
95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_FRAC(x)        ((x)                 &  (TRI_ONE-1))
96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_FLOOR(x)       ((x)                 & ~(TRI_ONE-1))
97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_CEIL(x)        (((x) + (TRI_ONE-1)) & ~(TRI_ONE-1))
98dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_ROUND(x)       (((x) +  TRI_HALF  ) & ~(TRI_ONE-1))
99dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
100dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_ROUDNING       (1 << (16 - TRI_FRACTION_BITS - 1))
101dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_FROM_FIXED(x)  (((x)+TRI_ROUDNING) >> (16-TRI_FRACTION_BITS))
102dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
103dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_SNAP_NEXT_HALF(x)   (TRI_CEIL((x)+TRI_HALF) - TRI_HALF)
104dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define  TRI_SNAP_PREV_HALF(x)   (TRI_CEIL((x)-TRI_HALF) - TRI_HALF)
105dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
106dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
107dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
108dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_COLOR_BITS = 24;
109dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
110dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// To maintain 8-bits color chanels, with a maximum GGLSurface
111dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// size of 4096 and GGL_SUBPIXEL_BITS=4, we need 8 + 12 + 4 = 24 bits
112dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// for encoding the color iterators
113dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
114dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectinline GGLcolor gglFixedToIteratedColor(GGLfixed c) {
115dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return (c << 8) - c;
116dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
117dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
118dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
119dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
120dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<bool> struct CTA;
121dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttemplate<> struct CTA<true> { };
122dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
123dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_CONTEXT(con, c)         context_t *con = static_cast<context_t *>(c)
124dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_OFFSETOF(field)         int(&(((context_t*)0)->field))
125dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_INIT_PROC(p, f)         p.f = ggl_ ## f;
126dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_BETWEEN(x, L, H)        (uint32_t((x)-(L)) <= ((H)-(L)))
127dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
128dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ggl_likely(x)	__builtin_expect(!!(x), 1)
129dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ggl_unlikely(x)	__builtin_expect(!!(x), 0)
130dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
131dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_TEXTURE_UNIT_COUNT    = 2;
132dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_TMU_STATE             = 0x00000001;
133dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_CB_STATE              = 0x00000002;
134dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_PIXEL_PIPELINE_STATE  = 0x00000004;
135dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
136dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
137dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
138dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_RESERVE_NEEDS(name, l, s)                               \
139dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    const uint32_t  GGL_NEEDS_##name##_MASK = (((1LU<<(s))-1)<<l);  \
140dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    const uint32_t  GGL_NEEDS_##name##_SHIFT = (l);
141dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
142dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_BUILD_NEEDS(val, name)                                  \
143dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    (((val)<<(GGL_NEEDS_##name##_SHIFT)) & GGL_NEEDS_##name##_MASK)
144dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
145dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_READ_NEEDS(name, n)                                     \
146dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    (uint32_t(n & GGL_NEEDS_##name##_MASK) >> GGL_NEEDS_##name##_SHIFT)
147dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
148dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_NEED_MASK(name)     (uint32_t(GGL_NEEDS_##name##_MASK))
149dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define GGL_NEED(name, val)     GGL_BUILD_NEEDS(val, name)
150dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
151dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( CB_FORMAT,       0, 6 )
152dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( SHADE,           6, 1 )
153dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( W,               7, 1 )
154dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( BLEND_SRC,       8, 4 )
155dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( BLEND_DST,      12, 4 )
156dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( BLEND_SRCA,     16, 4 )
157dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( BLEND_DSTA,     20, 4 )
158dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( LOGIC_OP,       24, 4 )
159dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( MASK_ARGB,      28, 4 )
160dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
161dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( P_ALPHA_TEST,    0, 3 )
162dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( P_AA,            3, 1 )
163dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( P_DEPTH_TEST,    4, 3 )
164dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( P_MASK_Z,        7, 1 )
165dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( P_DITHER,        8, 1 )
166dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( P_FOG,           9, 1 )
167dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( P_RESERVED1,    10,22 )
168dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
169dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( T_FORMAT,        0, 6 )
170dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( T_RESERVED0,     6, 1 )
171dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( T_POT,           7, 1 )
172dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( T_S_WRAP,        8, 2 )
173dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( T_T_WRAP,       10, 2 )
174dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( T_ENV,          12, 3 )
175dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectGGL_RESERVE_NEEDS( T_LINEAR,       15, 1 )
176dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
177dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_NEEDS_WRAP_CLAMP_TO_EDGE  = 0;
178dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_NEEDS_WRAP_REPEAT         = 1;
179dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectconst int GGL_NEEDS_WRAP_11             = 2;
180dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
181dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectinline uint32_t ggl_wrap_to_needs(uint32_t e) {
182dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    switch (e) {
183dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    case GGL_CLAMP:         return GGL_NEEDS_WRAP_CLAMP_TO_EDGE;
184dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    case GGL_REPEAT:        return GGL_NEEDS_WRAP_REPEAT;
185dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    }
186dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return 0;
187dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
188dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
189dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectinline uint32_t ggl_blendfactor_to_needs(uint32_t b) {
190dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    if (b <= 1) return b;
191dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return (b & 0xF)+2;
192dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
193dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
194dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectinline uint32_t ggl_needs_to_blendfactor(uint32_t n) {
195dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    if (n <= 1) return n;
196dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return (n - 2) + 0x300;
197dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
198dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
199dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectinline uint32_t ggl_env_to_needs(uint32_t e) {
200dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    switch (e) {
201dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    case GGL_REPLACE:   return 0;
202dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    case GGL_MODULATE:  return 1;
203dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    case GGL_DECAL:     return 2;
204dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    case GGL_BLEND:     return 3;
205dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    case GGL_ADD:       return 4;
206dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    }
207dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return 0;
208dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
209dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
210dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectinline uint32_t ggl_needs_to_env(uint32_t n) {
211dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    const uint32_t envs[] = { GGL_REPLACE, GGL_MODULATE,
212dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGL_DECAL, GGL_BLEND, GGL_ADD };
213dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return envs[n];
214dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
215dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
216dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
217dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
218dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
219dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectenum {
220dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_BLENDING     = 0x00000001,
221dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_SMOOTH       = 0x00000002,
222dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_AA           = 0x00000004,
223dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_LOGIC_OP     = 0x00000008,
224dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_ALPHA_TEST   = 0x00000010,
225dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_SCISSOR_TEST = 0x00000020,
226dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_TMUS         = 0x00000040,
227dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_DEPTH_TEST   = 0x00000080,
228dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_STENCIL_TEST = 0x00000100,
229dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_W            = 0x00000200,
230dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_DITHER       = 0x00000400,
231dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_FOG          = 0x00000800,
232dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGL_ENABLE_POINT_AA_NICE= 0x00001000
233dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
234dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
235dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
236dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
237dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectclass needs_filter_t;
238dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct needs_t {
239dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    inline int match(const needs_filter_t& filter);
240dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    inline bool operator == (const needs_t& rhs) const {
241dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        return  (n==rhs.n) &&
242dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                (p==rhs.p) &&
243dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                (t[0]==rhs.t[0]) &&
244dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                (t[1]==rhs.t[1]);
245dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    }
246dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    inline bool operator != (const needs_t& rhs) const {
247dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        return !operator == (rhs);
248dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    }
249dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t    n;
250dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t    p;
251dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t    t[GGL_TEXTURE_UNIT_COUNT];
252dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
253dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
254dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectinline int compare_type(const needs_t& lhs, const needs_t& rhs) {
255dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return memcmp(&lhs, &rhs, sizeof(needs_t));
256dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
257dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
258dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct needs_filter_t {
259dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    needs_t     value;
260dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    needs_t     mask;
261dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
262dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
263dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint needs_t::match(const needs_filter_t& filter) {
264dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t result =
265dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        ((filter.value.n ^ n)       & filter.mask.n)    |
266dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        ((filter.value.p ^ p)       & filter.mask.p)    |
267dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        ((filter.value.t[0] ^ t[0]) & filter.mask.t[0]) |
268dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        ((filter.value.t[1] ^ t[1]) & filter.mask.t[1]);
269dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return (result == 0);
270dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
271dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
272dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
273dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
274dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct context_t;
275dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectclass Assembly;
276dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
277dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct blend_state_t {
278dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint32_t			src;
279dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint32_t			dst;
280dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint32_t			src_alpha;
281dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint32_t			dst_alpha;
282dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint8_t				reserved;
283dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint8_t				alpha_separate;
284dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint8_t				operation;
285dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint8_t				equation;
286dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
287dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
288dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct mask_state_t {
289dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint8_t             color;
290dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint8_t             depth;
291dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            stencil;
292dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
293dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
294dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct clear_state_t {
295dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLclampx           r;
296dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLclampx           g;
297dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLclampx           b;
298dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLclampx           a;
299dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLclampx           depth;
300dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLint              stencil;
301dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            colorPacked;
302dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            depthPacked;
303dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            stencilPacked;
304dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            dirty;
305dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
306dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
307dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct fog_state_t {
308fa36f2c3b7707865867ce2b4710efeaeef993b1dMathias Agopian    uint8_t     color[4];
309dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
310dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
311dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct logic_op_state_t {
312dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint16_t            opcode;
313dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
314dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
315dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct alpha_test_state_t {
316dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint16_t            func;
317dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLcolor            ref;
318dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
319dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
320dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct depth_test_state_t {
321dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint16_t            func;
322dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLclampx           clearValue;
323dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
324dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
325dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct scissor_t {
326dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            user_left;
327dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            user_right;
328dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            user_top;
329dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            user_bottom;
330dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            left;
331dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            right;
332dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            top;
333dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            bottom;
334dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
335dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
336dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct pixel_t {
337dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t    c[4];
338dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint8_t     s[4];
339dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
340dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
341dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct surface_t {
342dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    union {
343dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        GGLSurface      s;
344dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        struct {
345dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        uint32_t            reserved;
346dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        uint32_t			width;
347dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        uint32_t			height;
348dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        int32_t             stride;
349dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        uint8_t*			data;
350dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        uint8_t				format;
351dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        uint8_t				dirty;
352dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        uint8_t				pad[2];
353dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        };
354dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    };
355dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void                (*read) (const surface_t* s, context_t* c,
356dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                                uint32_t x, uint32_t y, pixel_t* pixel);
357dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void                (*write)(const surface_t* s, context_t* c,
358dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                                uint32_t x, uint32_t y, const pixel_t* pixel);
359dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
360dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
361dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
362dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
363dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct texture_shade_t {
364dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    union {
365dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        struct {
366dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int32_t             is0;
367dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int32_t             idsdx;
368dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int32_t             idsdy;
369dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int                 sscale;
370dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int32_t             it0;
371dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int32_t             idtdx;
372dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int32_t             idtdy;
373dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int                 tscale;
374dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        };
375dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        struct {
376dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int32_t             v;
377dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int32_t             dx;
378dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int32_t             dy;
379dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int                 scale;
380dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        } st[2];
381dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    };
382dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
383dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
384dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct texture_iterators_t {
385dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // these are not encoded in the same way than in the
386dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    // texture_shade_t structure
387dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    union {
388dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        struct {
389dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLfixed			ydsdy;
390dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLfixed            dsdx;
391dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLfixed            dsdy;
392dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int                 sscale;
393dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLfixed			ydtdy;
394dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLfixed            dtdx;
395dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLfixed            dtdy;
396dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int                 tscale;
397dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        };
398dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        struct {
399dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLfixed			ydvdy;
400dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLfixed            dvdx;
401dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            GGLfixed            dvdy;
402dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project            int                 scale;
403dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        } st[2];
404dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    };
405dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
406dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
407dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct texture_t {
408dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	surface_t			surface;
409dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	texture_iterators_t	iterators;
410dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    texture_shade_t     shade;
411dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint32_t			s_coord;
412dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint32_t            t_coord;
413dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint16_t			s_wrap;
414dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint16_t            t_wrap;
415dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint16_t            min_filter;
416dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint16_t            mag_filter;
417dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint16_t            env;
418dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint8_t             env_color[4];
419dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint8_t				enable;
420dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint8_t				dirty;
421dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
422dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
423dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct raster_t {
424dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLfixed            x;
425dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLfixed            y;
426dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
427dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
428dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct framebuffer_t {
429dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    surface_t           color;
430dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    surface_t           read;
431dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	surface_t			depth;
432dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	surface_t			stencil;
433dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int16_t             *coverage;
434dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    size_t              coverageBufferSize;
435dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
436dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
437dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
438dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
439dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct iterators_t {
440dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	int32_t             xl;
441dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	int32_t             xr;
442dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t             y;
443dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLcolor			ydady;
444dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLcolor			ydrdy;
445dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLcolor			ydgdy;
446dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLcolor			ydbdy;
447dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLfixed			ydzdy;
448dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLfixed			ydwdy;
449dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLfixed			ydfdy;
450dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
451dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
452dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct shade_t {
453dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLcolor			a0;
454dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLcolor            dadx;
455dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLcolor            dady;
456dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLcolor			r0;
457dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLcolor            drdx;
458dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLcolor            drdy;
459dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLcolor			g0;
460dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLcolor            dgdx;
461dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLcolor            dgdy;
462dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLcolor			b0;
463dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLcolor            dbdx;
464dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLcolor            dbdy;
465dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint32_t            z0;
466dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLfixed32          dzdx;
467dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLfixed32          dzdy;
468dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLfixed            w0;
469dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLfixed            dwdx;
470dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLfixed            dwdy;
471dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	uint32_t			f0;
472dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLfixed            dfdx;
473dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLfixed            dfdy;
474dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
475dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
476dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// these are used in the generated code
477dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// we use this mirror structure to improve
478dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// data locality in the pixel pipeline
479dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct generated_tex_vars_t {
480dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t    width;
481dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t    height;
482dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t    stride;
483dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     data;
484dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     dsdx;
485dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     dtdx;
486dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     spill[2];
487dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
488dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
489dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct generated_vars_t {
490dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    struct {
491dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        int32_t c;
492dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        int32_t dx;
493dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    } argb[4];
494dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     aref;
495dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     dzdx;
496dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     zbase;
497dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     f;
498dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     dfdx;
499dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     spill[3];
500dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    generated_tex_vars_t    texture[GGL_TEXTURE_UNIT_COUNT];
501dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     rt;
502dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int32_t     lb;
503dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
504dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
505dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
506dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
507dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct state_t {
508dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	framebuffer_t		buffers;
509dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	texture_t			texture[GGL_TEXTURE_UNIT_COUNT];
510dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    scissor_t           scissor;
511dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    raster_t            raster;
512dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	blend_state_t		blend;
513dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    alpha_test_state_t  alpha_test;
514dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    depth_test_state_t  depth_test;
515dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    mask_state_t        mask;
516dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    clear_state_t       clear;
517dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    fog_state_t         fog;
518dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    logic_op_state_t    logic_op;
519dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            enables;
520dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            enabled_tmu;
521dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    needs_t             needs;
522dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
523dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
524dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
525dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
526dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct context_t {
527dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	GGLContext          procs;
528dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	state_t             state;
529dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    shade_t             shade;
530dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	iterators_t         iterators;
531dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    generated_vars_t    generated_vars                __attribute__((aligned(32)));
532dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint8_t             ditherMatrix[GGL_DITHER_SIZE] __attribute__((aligned(32)));
533dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            packed;
534dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            packed8888;
535dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    const GGLFormat*    formats;
536dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            dirty;
537dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    texture_t*          activeTMU;
538dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t            activeTMUIndex;
539dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
540dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void                (*init_y)(context_t* c, int32_t y);
541dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	void                (*step_y)(context_t* c);
542dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project	void                (*scanline)(context_t* c);
543dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void                (*span)(context_t* c);
544dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void                (*rect)(context_t* c, size_t yc);
545dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
546dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void*               base;
547dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    Assembly*           scanline_as;
548dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    GGLenum             error;
549dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
550dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
551dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
552dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
553dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid ggl_init_context(context_t* context);
554dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid ggl_uninit_context(context_t* context);
555dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid ggl_error(context_t* c, GGLenum error);
556dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint64_t ggl_system_time();
557dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
558dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// ----------------------------------------------------------------------------
559dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
560dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
561dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
562dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif // ANDROID_GGL_CONTEXT_H
563dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
564