1803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams/*
2803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * Copyright (C) 2011 The Android Open Source Project
3803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams *
4803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * you may not use this file except in compliance with the License.
6803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * You may obtain a copy of the License at
7803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams *
8803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams *
10803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * Unless required by applicable law or agreed to in writing, software
11803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * See the License for the specific language governing permissions and
14803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams * limitations under the License.
15803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams */
16803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
17803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams#ifndef RSD_GL_H
18803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams#define RSD_GL_H
19803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
20803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams#include <rs_hal.h>
216c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk#include <EGL/egl.h>
22803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
235316b9eead0c29df36f46d29c17914bc3c61ed9fJason Sams#define RSD_CALL_GL(x, ...) rsc->setWatchdogGL(#x, __LINE__, __FILE__); x(__VA_ARGS__); rsc->setWatchdogGL(NULL, 0, NULL)
245316b9eead0c29df36f46d29c17914bc3c61ed9fJason Sams
254a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchoukclass RsdShaderCache;
264a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchoukclass RsdVertexArrayState;
278650c32907b74b945dd6cc9a5bf41c12fde005dfAlex Sakhartchoukclass RsdFrameBufferObj;
28803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
29803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Samstypedef void (* InvokeFunc_t)(void);
30803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Samstypedef void (*WorkerCallback_t)(void *usr, uint32_t idx);
31803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
32803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Samstypedef struct RsdGLRec {
33803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    struct {
34803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        EGLint numConfigs;
35803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        EGLint majorVersion;
36803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        EGLint minorVersion;
37803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        EGLConfig config;
38803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        EGLContext context;
39803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        EGLSurface surface;
40803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        EGLSurface surfaceDefault;
41803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        EGLDisplay display;
42803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    } egl;
43803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
44803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    struct {
45803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        const uint8_t * vendor;
46803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        const uint8_t * renderer;
47803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        const uint8_t * version;
48803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        const uint8_t * extensions;
49803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
50803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        uint32_t majorVersion;
51803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        uint32_t minorVersion;
52803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
53803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        int32_t maxVaryingVectors;
54803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        int32_t maxTextureImageUnits;
55803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
56803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        int32_t maxFragmentTextureImageUnits;
57803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        int32_t maxFragmentUniformVectors;
58803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
59803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        int32_t maxVertexAttribs;
60803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        int32_t maxVertexUniformVectors;
61803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        int32_t maxVertexTextureUnits;
62803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
63803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        bool OES_texture_npot;
64803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        bool GL_IMG_texture_npot;
65803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        bool GL_NV_texture_npot_2D_mipmap;
66803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams        float EXT_texture_max_aniso;
67803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    } gl;
68803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
69803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    ANativeWindow *wndSurface;
70803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    uint32_t width;
71803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams    uint32_t height;
724a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk    RsdShaderCache *shaderCache;
734a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk    RsdVertexArrayState *vertexArrayState;
748650c32907b74b945dd6cc9a5bf41c12fde005dfAlex Sakhartchouk    RsdFrameBufferObj *currentFrameBuffer;
75803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams} RsdGL;
76803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
77803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
78803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Samsbool rsdGLInit(const android::renderscript::Context *rsc);
79803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Samsvoid rsdGLShutdown(const android::renderscript::Context *rsc);
80803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Samsbool rsdGLSetSurface(const android::renderscript::Context *rsc,
816c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk                     uint32_t w, uint32_t h, RsNativeWindow sur);
82803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Samsvoid rsdGLSwap(const android::renderscript::Context *rsc);
83407cae950325682a56fe5373dd218a666da901efAlex Sakhartchoukvoid rsdGLCheckError(const android::renderscript::Context *rsc,
84407cae950325682a56fe5373dd218a666da901efAlex Sakhartchouk                     const char *msg, bool isFatal = false);
85803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
86803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams#endif
87803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Sams
88