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
2344bef6fba6244292b751387f3d6c31cca96c28adChris Wailes#define RSD_CALL_GL(x, ...) rsc->setWatchdogGL(#x, __LINE__, __FILE__); x(__VA_ARGS__); rsc->setWatchdogGL(nullptr, 0, nullptr)
242382aba4a55c6ae74789c478eead8fbd96593321Jason Sams
25a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass RsdShaderCache;
26a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass RsdVertexArrayState;
27a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchoukclass RsdFrameBufferObj;
284b3de47071d875faaa7d419d050a464b09538797Jason Sams
294b3de47071d875faaa7d419d050a464b09538797Jason Samstypedef struct RsdGLRec {
304b3de47071d875faaa7d419d050a464b09538797Jason Sams    struct {
314b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLint numConfigs;
324b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLint majorVersion;
334b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLint minorVersion;
344b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLConfig config;
354b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLContext context;
364b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLSurface surface;
374b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLSurface surfaceDefault;
384b3de47071d875faaa7d419d050a464b09538797Jason Sams        EGLDisplay display;
394b3de47071d875faaa7d419d050a464b09538797Jason Sams    } egl;
404b3de47071d875faaa7d419d050a464b09538797Jason Sams
414b3de47071d875faaa7d419d050a464b09538797Jason Sams    struct {
424b3de47071d875faaa7d419d050a464b09538797Jason Sams        const uint8_t * vendor;
434b3de47071d875faaa7d419d050a464b09538797Jason Sams        const uint8_t * renderer;
444b3de47071d875faaa7d419d050a464b09538797Jason Sams        const uint8_t * version;
454b3de47071d875faaa7d419d050a464b09538797Jason Sams        const uint8_t * extensions;
464b3de47071d875faaa7d419d050a464b09538797Jason Sams
474b3de47071d875faaa7d419d050a464b09538797Jason Sams        uint32_t majorVersion;
484b3de47071d875faaa7d419d050a464b09538797Jason Sams        uint32_t minorVersion;
494b3de47071d875faaa7d419d050a464b09538797Jason Sams
504b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxVaryingVectors;
514b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxTextureImageUnits;
524b3de47071d875faaa7d419d050a464b09538797Jason Sams
534b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxFragmentTextureImageUnits;
544b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxFragmentUniformVectors;
554b3de47071d875faaa7d419d050a464b09538797Jason Sams
564b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxVertexAttribs;
574b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxVertexUniformVectors;
584b3de47071d875faaa7d419d050a464b09538797Jason Sams        int32_t maxVertexTextureUnits;
594b3de47071d875faaa7d419d050a464b09538797Jason Sams
604b3de47071d875faaa7d419d050a464b09538797Jason Sams        bool OES_texture_npot;
61917027582745bbf27335a70360a4e6da51961978Mathias Agopian        bool IMG_texture_npot;
62917027582745bbf27335a70360a4e6da51961978Mathias Agopian        bool NV_texture_npot_2D_mipmap;
634b3de47071d875faaa7d419d050a464b09538797Jason Sams        float EXT_texture_max_aniso;
644b3de47071d875faaa7d419d050a464b09538797Jason Sams    } gl;
654b3de47071d875faaa7d419d050a464b09538797Jason Sams
664b3de47071d875faaa7d419d050a464b09538797Jason Sams    ANativeWindow *wndSurface;
67b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    ANativeWindow *currentWndSurface;
68b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
69a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    RsdShaderCache *shaderCache;
70a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    RsdVertexArrayState *vertexArrayState;
71a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    RsdFrameBufferObj *currentFrameBuffer;
724b3de47071d875faaa7d419d050a464b09538797Jason Sams} RsdGL;
734b3de47071d875faaa7d419d050a464b09538797Jason Sams
74b322033c13487a174bb9c26466e9684d1ff4de8dJason Samsbool rsdGLSetInternalSurface(const android::renderscript::Context *rsc,
75b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams                             RsNativeWindow sur);
76025a1f48df53a3bd13dd3a5d765a7a78de3a1bf5Miao Wangint32_t rsdGLInit(const android::renderscript::Context *rsc);
774b3de47071d875faaa7d419d050a464b09538797Jason Samsvoid rsdGLShutdown(const android::renderscript::Context *rsc);
784b3de47071d875faaa7d419d050a464b09538797Jason Samsbool rsdGLSetSurface(const android::renderscript::Context *rsc,
797257c7ee4b66f00c43d9235f3ac600061ae79968Alex Sakhartchouk                     uint32_t w, uint32_t h, RsNativeWindow sur);
804b3de47071d875faaa7d419d050a464b09538797Jason Samsvoid rsdGLSwap(const android::renderscript::Context *rsc);
81c19ff0177a7a0dadfc01b1990f822354fdc95991Alex Sakhartchoukvoid rsdGLCheckError(const android::renderscript::Context *rsc,
82c19ff0177a7a0dadfc01b1990f822354fdc95991Alex Sakhartchouk                     const char *msg, bool isFatal = false);
839719bd4a0187c400ba868712612fe66da4635aacJason Samsvoid rsdGLSetPriority(const android::renderscript::Context *rsc,
849719bd4a0187c400ba868712612fe66da4635aacJason Sams                      int32_t priority);
85653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchoukvoid rsdGLClearColor(const android::renderscript::Context *rsc,
86653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk                     float r, float g, float b, float a);
87653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchoukvoid rsdGLClearDepth(const android::renderscript::Context *rsc, float v);
88653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchoukvoid rsdGLFinish(const android::renderscript::Context *rsc);
89653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchoukvoid rsdGLDrawQuadTexCoords(const android::renderscript::Context *rsc,
90653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk                            float x1, float y1, float z1, float u1, float v1,
91653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk                            float x2, float y2, float z2, float u2, float v2,
92653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk                            float x3, float y3, float z3, float u3, float v3,
93653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk                            float x4, float y4, float z4, float u4, float v4);
944b3de47071d875faaa7d419d050a464b09538797Jason Sams
954b3de47071d875faaa7d419d050a464b09538797Jason Sams#endif
96