14b3de47071d875faaa7d419d050a464b09538797Jason Sams/*
24b3de47071d875faaa7d419d050a464b09538797Jason Sams * Copyright (C) 2011 The Android Open Source Project
34b3de47071d875faaa7d419d050a464b09538797Jason Sams *
44b3de47071d875faaa7d419d050a464b09538797Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
54b3de47071d875faaa7d419d050a464b09538797Jason Sams * you may not use this file except in compliance with the License.
64b3de47071d875faaa7d419d050a464b09538797Jason Sams * You may obtain a copy of the License at
74b3de47071d875faaa7d419d050a464b09538797Jason Sams *
84b3de47071d875faaa7d419d050a464b09538797Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
94b3de47071d875faaa7d419d050a464b09538797Jason Sams *
104b3de47071d875faaa7d419d050a464b09538797Jason Sams * Unless required by applicable law or agreed to in writing, software
114b3de47071d875faaa7d419d050a464b09538797Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
124b3de47071d875faaa7d419d050a464b09538797Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134b3de47071d875faaa7d419d050a464b09538797Jason Sams * See the License for the specific language governing permissions and
144b3de47071d875faaa7d419d050a464b09538797Jason Sams * limitations under the License.
154b3de47071d875faaa7d419d050a464b09538797Jason Sams */
164b3de47071d875faaa7d419d050a464b09538797Jason Sams
174b3de47071d875faaa7d419d050a464b09538797Jason Sams#ifndef RSD_GL_H
184b3de47071d875faaa7d419d050a464b09538797Jason Sams#define RSD_GL_H
194b3de47071d875faaa7d419d050a464b09538797Jason Sams
204b3de47071d875faaa7d419d050a464b09538797Jason Sams#include <rs_hal.h>
217257c7ee4b66f00c43d9235f3ac600061ae79968Alex Sakhartchouk#include <EGL/egl.h>
224b3de47071d875faaa7d419d050a464b09538797Jason Sams
232382aba4a55c6ae74789c478eead8fbd96593321Jason Sams#define RSD_CALL_GL(x, ...) rsc->setWatchdogGL(#x, __LINE__, __FILE__); x(__VA_ARGS__); rsc->setWatchdogGL(NULL, 0, NULL)
242382aba4a55c6ae74789c478eead8fbd96593321Jason Sams
25a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass RsdShaderCache;
26a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass RsdVertexArrayState;
27a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchoukclass RsdFrameBufferObj;
284b3de47071d875faaa7d419d050a464b09538797Jason Sams
294b3de47071d875faaa7d419d050a464b09538797Jason Samstypedef void (* InvokeFunc_t)(void);
304b3de47071d875faaa7d419d050a464b09538797Jason Samstypedef void (*WorkerCallback_t)(void *usr, uint32_t idx);
314b3de47071d875faaa7d419d050a464b09538797Jason Sams
324b3de47071d875faaa7d419d050a464b09538797Jason Samstypedef struct RsdGLRec {
334b3de47071d875faaa7d419d050a464b09538797Jason Sams    struct {
344b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLint numConfigs;
354b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLint majorVersion;
364b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLint minorVersion;
374b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLConfig config;
384b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLContext context;
394b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLSurface surface;
404b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLSurface surfaceDefault;
414b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLDisplay display;
424b3de47071d875faaa7d419d050a464b09538797Jason Sams    } egl;
434b3de47071d875faaa7d419d050a464b09538797Jason Sams
444b3de47071d875faaa7d419d050a464b09538797Jason Sams    struct {
454b3de47071d875faaa7d419d050a464b09538797Jason Sams        const uint8_t * vendor;
464b3de47071d875faaa7d419d050a464b09538797Jason Sams        const uint8_t * renderer;
474b3de47071d875faaa7d419d050a464b09538797Jason Sams        const uint8_t * version;
484b3de47071d875faaa7d419d050a464b09538797Jason Sams        const uint8_t * extensions;
494b3de47071d875faaa7d419d050a464b09538797Jason Sams
504b3de47071d875faaa7d419d050a464b09538797Jason Sams        uint32_t majorVersion;
514b3de47071d875faaa7d419d050a464b09538797Jason Sams        uint32_t minorVersion;
524b3de47071d875faaa7d419d050a464b09538797Jason Sams
534b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxVaryingVectors;
544b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxTextureImageUnits;
554b3de47071d875faaa7d419d050a464b09538797Jason Sams
564b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxFragmentTextureImageUnits;
574b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxFragmentUniformVectors;
584b3de47071d875faaa7d419d050a464b09538797Jason Sams
594b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxVertexAttribs;
604b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxVertexUniformVectors;
614b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxVertexTextureUnits;
624b3de47071d875faaa7d419d050a464b09538797Jason Sams
634b3de47071d875faaa7d419d050a464b09538797Jason Sams        bool OES_texture_npot;
64917027582745bbf27335a70360a4e6da51961978Mathias Agopian        bool IMG_texture_npot;
65917027582745bbf27335a70360a4e6da51961978Mathias Agopian        bool NV_texture_npot_2D_mipmap;
664b3de47071d875faaa7d419d050a464b09538797Jason Sams        float EXT_texture_max_aniso;
674b3de47071d875faaa7d419d050a464b09538797Jason Sams    } gl;
684b3de47071d875faaa7d419d050a464b09538797Jason Sams
694b3de47071d875faaa7d419d050a464b09538797Jason Sams    ANativeWindow *wndSurface;
70b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    ANativeWindow *currentWndSurface;
71b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
72a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    RsdShaderCache *shaderCache;
73a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    RsdVertexArrayState *vertexArrayState;
74a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    RsdFrameBufferObj *currentFrameBuffer;
754b3de47071d875faaa7d419d050a464b09538797Jason Sams} RsdGL;
764b3de47071d875faaa7d419d050a464b09538797Jason Sams
77b322033c13487a174bb9c26466e9684d1ff4de8dJason Samsbool rsdGLSetInternalSurface(const android::renderscript::Context *rsc,
78b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams                             RsNativeWindow sur);
794b3de47071d875faaa7d419d050a464b09538797Jason Samsbool rsdGLInit(const android::renderscript::Context *rsc);
804b3de47071d875faaa7d419d050a464b09538797Jason Samsvoid rsdGLShutdown(const android::renderscript::Context *rsc);
814b3de47071d875faaa7d419d050a464b09538797Jason Samsbool rsdGLSetSurface(const android::renderscript::Context *rsc,
827257c7ee4b66f00c43d9235f3ac600061ae79968Alex Sakhartchouk                     uint32_t w, uint32_t h, RsNativeWindow sur);
834b3de47071d875faaa7d419d050a464b09538797Jason Samsvoid rsdGLSwap(const android::renderscript::Context *rsc);
84c19ff0177a7a0dadfc01b1990f822354fdc95991Alex Sakhartchoukvoid rsdGLCheckError(const android::renderscript::Context *rsc,
85c19ff0177a7a0dadfc01b1990f822354fdc95991Alex Sakhartchouk                     const char *msg, bool isFatal = false);
869719bd4a0187c400ba868712612fe66da4635aacJason Samsvoid rsdGLSetPriority(const android::renderscript::Context *rsc,
879719bd4a0187c400ba868712612fe66da4635aacJason Sams                      int32_t priority);
88653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchoukvoid rsdGLClearColor(const android::renderscript::Context *rsc,
89653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk                     float r, float g, float b, float a);
90653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchoukvoid rsdGLClearDepth(const android::renderscript::Context *rsc, float v);
91653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchoukvoid rsdGLFinish(const android::renderscript::Context *rsc);
92653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchoukvoid rsdGLDrawQuadTexCoords(const android::renderscript::Context *rsc,
93653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk                            float x1, float y1, float z1, float u1, float v1,
94653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk                            float x2, float y2, float z2, float u2, float v2,
95653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk                            float x3, float y3, float z3, float u3, float v3,
96653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk                            float x4, float y4, float z4, float u4, float v4);
974b3de47071d875faaa7d419d050a464b09538797Jason Sams
984b3de47071d875faaa7d419d050a464b09538797Jason Sams#endif
994b3de47071d875faaa7d419d050a464b09538797Jason Sams
100