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