12228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifndef __NV30_CONTEXT_H__ 22228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define __NV30_CONTEXT_H__ 32228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 42228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "pipe/p_format.h" 54f0d97057c5c640b25518358886f8c47da9fc052Jean-Michel Trivi 62228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "nv30_screen.h" 72228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "nv30_state.h" 82228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 92228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "nouveau/nouveau_context.h" 102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define BUFCTX_FB 0 122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define BUFCTX_VTXTMP 1 132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define BUFCTX_VTXBUF 2 142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define BUFCTX_IDXBUF 3 152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define BUFCTX_VERTTEX(n) (4 + (n)) 162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define BUFCTX_FRAGPROG 8 172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define BUFCTX_FRAGTEX(n) (9 + (n)) 182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_BLEND (1 << 0) 202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_RASTERIZER (1 << 1) 212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_ZSA (1 << 2) 222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_VERTPROG (1 << 3) 232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_VERTCONST (1 << 4) 242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_FRAGPROG (1 << 5) 252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_FRAGCONST (1 << 6) 262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_BLEND_COLOUR (1 << 7) 272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_STENCIL_REF (1 << 8) 282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_CLIP (1 << 9) 292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_SAMPLE_MASK (1 << 10) 302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_FRAMEBUFFER (1 << 11) 312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_STIPPLE (1 << 12) 322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_SCISSOR (1 << 13) 332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_VIEWPORT (1 << 14) 342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_ARRAYS (1 << 15) 352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_VERTEX (1 << 16) 362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_CONSTBUF (1 << 17) 372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_FRAGTEX (1 << 18) 382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_VERTTEX (1 << 19) 392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_SWTNL (1 << 31) 402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_NEW_ALL 0x000fffff 412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstruct nv30_context { 432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nouveau_context base; 442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nv30_screen *screen; 452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nouveau_bufctx *bufctx; 472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct { 492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned rt_enable; 502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned scissor_off; 512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned num_vtxelts; 522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project boolean prim_restart; 532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nv30_fragprog *fragprog; 542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } state; 552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project uint32_t dirty; 572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct draw_context *draw; 592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project uint32_t draw_flags; 602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project uint32_t draw_dirty; 612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nv30_blend_stateobj *blend; 632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nv30_rasterizer_stateobj *rast; 642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nv30_zsa_stateobj *zsa; 652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nv30_vertex_stateobj *vertex; 662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct { 682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned filter; 692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned aniso; 702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } config; 712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct { 732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nv30_vertprog *program; 742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_resource *constbuf; 762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned constbuf_nr; 772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_sampler_view *textures[PIPE_MAX_SAMPLERS]; 792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned num_textures; 802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nv30_sampler_state *samplers[PIPE_MAX_SAMPLERS]; 812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned num_samplers; 822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned dirty_samplers; 832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } vertprog; 842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct { 862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nv30_fragprog *program; 872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_resource *constbuf; 892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned constbuf_nr; 902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_sampler_view *textures[PIPE_MAX_SAMPLERS]; 922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned num_textures; 932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nv30_sampler_state *samplers[PIPE_MAX_SAMPLERS]; 942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned num_samplers; 952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned dirty_samplers; 962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } fragprog; 972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_framebuffer_state framebuffer; 992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_blend_color blend_colour; 1002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_stencil_ref stencil_ref; 1014f0d97057c5c640b25518358886f8c47da9fc052Jean-Michel Trivi struct pipe_poly_stipple stipple; 1026792cf6361ff339e336287affb0bfe54bf6957a9Jean-Michel Trivi struct pipe_scissor_state scissor; 1032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_viewport_state viewport; 1042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_clip_state clip; 1052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned sample_mask; 1072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_vertex_buffer vtxbuf[PIPE_MAX_ATTRIBS]; 1092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned num_vtxbufs; 1102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_index_buffer idxbuf; 1112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project uint32_t vbo_fifo; 1122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project uint32_t vbo_user; 1132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned vbo_min_index; 1142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned vbo_max_index; 1152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project boolean vbo_push_hint; 1162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct nouveau_heap *blit_vp; 1182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project struct pipe_resource *blit_fp; 1192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /*XXX: nvfx state, DO NOT USE EVER OUTSIDE "STOLEN" NVFX code */ 1212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned is_nv4x; 1222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project unsigned use_nv4x; 1232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project bool hw_pointsprite_control; 1242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project enum { 1252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HW, 1262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } render_mode; 1272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}; 1282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic INLINE struct nv30_context * 1302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_context(struct pipe_context *pipe) 1312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 1322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return (struct nv30_context *)pipe; 1332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 1342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstruct pipe_context * 1362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_context_create(struct pipe_screen *pscreen, void *priv); 1372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_vbo_init(struct pipe_context *pipe); 1402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_vbo_validate(struct nv30_context *nv30); 1432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_query_init(struct pipe_context *pipe); 1462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_state_init(struct pipe_context *pipe); 1492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_clear_init(struct pipe_context *pipe); 1522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_vertprog_init(struct pipe_context *pipe); 1552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_vertprog_validate(struct nv30_context *nv30); 1582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_fragprog_init(struct pipe_context *pipe); 1612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_fragprog_validate(struct nv30_context *nv30); 1642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_texture_init(struct pipe_context *pipe); 1672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_texture_validate(struct nv30_context *nv30); 1702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_fragtex_init(struct pipe_context *pipe); 1732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_fragtex_validate(struct nv30_context *nv30); 1762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv40_verttex_init(struct pipe_context *pipe); 1792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv40_verttex_validate(struct nv30_context *nv30); 1822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_push_vbo(struct nv30_context *nv30, const struct pipe_draw_info *info); 1852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_draw_init(struct pipe_context *pipe); 1882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_render_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info); 1912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectboolean 1932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_state_validate(struct nv30_context *nv30, boolean hwtnl); 1942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 1962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_state_release(struct nv30_context *nv30); 1972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project//XXX: needed to make it build, clean this up! 1992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid 2002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project_nvfx_fragprog_translate(struct nv30_context *nvfx, struct nv30_fragprog *fp, 2012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project boolean emulate_sprite_flipping); 2022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectboolean 2042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project_nvfx_vertprog_translate(struct nv30_context *nv30, struct nv30_vertprog *vp); 2052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifdef NV30_3D_VERTEX_BEGIN_END 2072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define NV30_PRIM_GL_CASE(n) \ 2082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project case PIPE_PRIM_##n: return NV30_3D_VERTEX_BEGIN_END_##n 2092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstatic INLINE unsigned 2112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectnv30_prim_gl(unsigned prim) 2122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 2132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project switch (prim) { 2142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project NV30_PRIM_GL_CASE(POINTS); 2152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project NV30_PRIM_GL_CASE(LINES); 2162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project NV30_PRIM_GL_CASE(LINE_LOOP); 2172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project NV30_PRIM_GL_CASE(LINE_STRIP); 2182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project NV30_PRIM_GL_CASE(TRIANGLES); 2192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project NV30_PRIM_GL_CASE(TRIANGLE_STRIP); 2202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project NV30_PRIM_GL_CASE(TRIANGLE_FAN); 2212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project NV30_PRIM_GL_CASE(QUADS); 2222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project NV30_PRIM_GL_CASE(QUAD_STRIP); 2232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project NV30_PRIM_GL_CASE(POLYGON); 2242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project default: 2252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return NV30_3D_VERTEX_BEGIN_END_POINTS; 2262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project break; 2272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 2282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 2292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 2302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 2322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project