ggl_context.h revision 096041174b1d8cc09b06c51053b2b7e8545bd93f
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