diff options
author | 2016-01-22 16:28:07 -0800 | |
---|---|---|
committer | 2016-01-25 16:15:14 -0800 | |
commit | 975591a7af883d866d86ab819e164c6004694744 (patch) | |
tree | b0247aebad80c7380141137e9de8d7edcf1ef89f | |
parent | fe434a15d6bde9299b51dc284b336944e5cf8a1c (diff) |
Add fine-grained debug layer
Full GLES error checking layer via -include
trickery. Change DEBUG_OPENGL to a level system.
HIGH = every GL call is error checked
MODERATE = checkpointing at interesting spots
LOW = only asserts there are no errors at the end of a frame
or when the FBO changes
NONE = AIN'T GOT NO TIME FOR ERRORS GOTTA GO FAST!
Change-Id: Ibe81aae93d942059c4ddf1cbb11c828b7ce4c10b
-rw-r--r-- | libs/hwui/Android.mk | 16 | ||||
-rw-r--r-- | libs/hwui/BakedOpDispatcher.cpp | 2 | ||||
-rw-r--r-- | libs/hwui/BakedOpRenderer.cpp | 10 | ||||
-rw-r--r-- | libs/hwui/Debug.h | 12 | ||||
-rw-r--r-- | libs/hwui/FrameBuilder.h | 16 | ||||
-rw-r--r-- | libs/hwui/LayerRenderer.cpp | 8 | ||||
-rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 2 | ||||
-rw-r--r-- | libs/hwui/Texture.cpp | 4 | ||||
-rw-r--r-- | libs/hwui/debug/nullegl.cpp (renamed from libs/hwui/tests/common/nullegl.cpp) | 0 | ||||
-rw-r--r-- | libs/hwui/debug/nullgles.cpp (renamed from libs/hwui/tests/common/nullgles.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/debug/unwrap_gles.h | 918 | ||||
-rw-r--r-- | libs/hwui/debug/wrap_gles.cpp | 93 | ||||
-rw-r--r-- | libs/hwui/debug/wrap_gles.h | 918 | ||||
-rw-r--r-- | libs/hwui/renderstate/RenderState.cpp | 12 | ||||
-rw-r--r-- | libs/hwui/renderthread/CanvasContext.cpp | 8 | ||||
-rw-r--r-- | libs/hwui/utils/GLUtils.cpp | 10 | ||||
-rw-r--r-- | libs/hwui/utils/GLUtils.h | 11 |
17 files changed, 2001 insertions, 41 deletions
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk index 8ba6318983fc..4d86e158dd3e 100644 --- a/libs/hwui/Android.mk +++ b/libs/hwui/Android.mk @@ -4,6 +4,11 @@ LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk HWUI_NEW_OPS := true +# Enables fine-grained GLES error checking +# If set to true, every GLES call is wrapped & error checked +# Has moderate overhead +HWUI_ENABLE_OPENGL_VALIDATION := false + hwui_src_files := \ font/CacheTexture.cpp \ font/Font.cpp \ @@ -157,6 +162,13 @@ ifneq (false,$(ANDROID_ENABLE_RENDERSCRIPT)) frameworks/rs endif +ifeq (true, $(HWUI_ENABLE_OPENGL_VALIDATION)) + hwui_cflags += -include debug/wrap_gles.h + hwui_src_files += debug/wrap_gles.cpp + hwui_c_includes += frameworks/native/opengl/libs/GLES2 + hwui_cflags += -DDEBUG_OPENGL=3 +endif + # ------------------------ # static library @@ -188,8 +200,8 @@ LOCAL_CFLAGS := \ -DHWUI_NULL_GPU LOCAL_SRC_FILES := \ $(hwui_src_files) \ - tests/common/nullegl.cpp \ - tests/common/nullgles.cpp + debug/nullegl.cpp \ + debug/nullgles.cpp LOCAL_C_INCLUDES := $(hwui_c_includes) $(call hwui_proto_include) LOCAL_EXPORT_C_INCLUDE_DIRS := $(hwui_c_includes) $(call hwui_proto_include) diff --git a/libs/hwui/BakedOpDispatcher.cpp b/libs/hwui/BakedOpDispatcher.cpp index 00381eea4147..7ecc743b700c 100644 --- a/libs/hwui/BakedOpDispatcher.cpp +++ b/libs/hwui/BakedOpDispatcher.cpp @@ -784,9 +784,7 @@ void BakedOpDispatcher::onCopyFromLayerOp(BakedOpRenderer& renderer, const CopyF .build(); renderer.renderGlop(state, glop); } - GL_CHECKPOINT(); renderer.renderState().layerPool().putOrDelete(*op.layerHandle); - GL_CHECKPOINT(); } } // namespace uirenderer diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp index e65746eea98a..c752526a0bd4 100644 --- a/libs/hwui/BakedOpRenderer.cpp +++ b/libs/hwui/BakedOpRenderer.cpp @@ -49,7 +49,8 @@ void BakedOpRenderer::startRepaintLayer(OffscreenBuffer* offscreenBuffer, const // attach the texture to the FBO glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, offscreenBuffer->texture.id(), 0); - LOG_ALWAYS_FATAL_IF(GLUtils::dumpGLErrors(), "startLayer FAILED"); + GL_CHECKPOINT(LOW); + LOG_ALWAYS_FATAL_IF(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, "framebuffer incomplete!"); @@ -63,7 +64,7 @@ void BakedOpRenderer::endLayer() { if (mRenderTarget.stencil) { // if stencil was used for clipping, detach it and return it to pool glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0); - LOG_ALWAYS_FATAL_IF(GLUtils::dumpGLErrors(), "glfbrb endlayer failed"); + GL_CHECKPOINT(MODERATE); mCaches.renderBufferCache.put(mRenderTarget.stencil); mRenderTarget.stencil = nullptr; } @@ -74,8 +75,7 @@ void BakedOpRenderer::endLayer() { // Detach the texture from the FBO glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); - LOG_ALWAYS_FATAL_IF(GLUtils::dumpGLErrors(), "endLayer FAILED, bound fbo = %u", - mRenderState.getFramebuffer()); + GL_CHECKPOINT(LOW); mRenderState.deleteFramebuffer(mRenderTarget.frameBufferId); mRenderTarget.frameBufferId = 0; } @@ -139,8 +139,6 @@ void BakedOpRenderer::endFrame(const Rect& repaintRect) { mCaches.pathCache.trim(); mCaches.tessellationCache.trim(); - GL_CHECKPOINT(); - #if DEBUG_MEMORY_USAGE mCaches.dumpMemoryUsage(); #else diff --git a/libs/hwui/Debug.h b/libs/hwui/Debug.h index e98fa0440591..748edef730b7 100644 --- a/libs/hwui/Debug.h +++ b/libs/hwui/Debug.h @@ -17,8 +17,18 @@ #ifndef ANDROID_HWUI_DEBUG_H #define ANDROID_HWUI_DEBUG_H +#define DEBUG_LEVEL_HIGH 3 +#define DEBUG_LEVEL_MODERATE 2 +#define DEBUG_LEVEL_LOW 1 +#define DEBUG_LEVEL_NONE 0 + // Turn on to check for OpenGL errors on each frame -#define DEBUG_OPENGL 1 +// Note DEBUG_LEVEL_HIGH for DEBUG_OPENGL is only setable by enabling +// HWUI_ENABLE_OPENGL_VALIDATION when building HWUI. Similarly if +// HWUI_ENABLE_OPENGL_VALIDATION is set then this is always DEBUG_LEVEL_HIGH +#ifndef DEBUG_OPENGL +#define DEBUG_OPENGL DEBUG_LEVEL_LOW +#endif // Turn on to enable initialization information #define DEBUG_INIT 0 diff --git a/libs/hwui/FrameBuilder.h b/libs/hwui/FrameBuilder.h index bd0185017f52..4fd39be67b78 100644 --- a/libs/hwui/FrameBuilder.h +++ b/libs/hwui/FrameBuilder.h @@ -100,30 +100,30 @@ public: // Relay through layers in reverse order, since layers // later in the list will be drawn by earlier ones for (int i = mLayerBuilders.size() - 1; i >= 1; i--) { - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); LayerBuilder& layer = *(mLayerBuilders[i]); if (layer.renderNode) { // cached HW layer - can't skip layer if empty renderer.startRepaintLayer(layer.offscreenBuffer, layer.repaintRect); - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers); - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); renderer.endLayer(); } else if (!layer.empty()) { // save layer - skip entire layer if empty layer.offscreenBuffer = renderer.startTemporaryLayer(layer.width, layer.height); - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers); - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); renderer.endLayer(); } } - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); const LayerBuilder& fbo0 = *(mLayerBuilders[0]); renderer.startFrame(fbo0.width, fbo0.height, fbo0.repaintRect); - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); fbo0.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers); - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); renderer.endFrame(fbo0.repaintRect); } diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp index 0f219e4792f6..3123e8e06ae7 100644 --- a/libs/hwui/LayerRenderer.cpp +++ b/libs/hwui/LayerRenderer.cpp @@ -407,7 +407,6 @@ bool LayerRenderer::copyLayer(RenderState& renderState, Layer* layer, SkBitmap* renderState.bindFramebuffer(fbo); glGenTextures(1, &texture); - GL_CHECKPOINT(); caches.textureState().activateTexture(0); caches.textureState().bindTexture(texture); @@ -422,11 +421,9 @@ bool LayerRenderer::copyLayer(RenderState& renderState, Layer* layer, SkBitmap* glTexImage2D(GL_TEXTURE_2D, 0, format, bitmap->width(), bitmap->height(), 0, format, type, nullptr); - GL_CHECKPOINT(); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); - GL_CHECKPOINT(); { LayerRenderer renderer(renderState, layer); @@ -437,8 +434,6 @@ bool LayerRenderer::copyLayer(RenderState& renderState, Layer* layer, SkBitmap* renderer.translate(0.0f, bitmap->height()); renderer.scale(1.0f, -1.0f); - GL_CHECKPOINT(); - { Rect bounds; bounds.set(0.0f, 0.0f, bitmap->width(), bitmap->height()); @@ -447,7 +442,6 @@ bool LayerRenderer::copyLayer(RenderState& renderState, Layer* layer, SkBitmap* glReadPixels(0, 0, bitmap->width(), bitmap->height(), format, type, bitmap->getPixels()); - GL_CHECKPOINT(); } status = true; @@ -460,6 +454,8 @@ bool LayerRenderer::copyLayer(RenderState& renderState, Layer* layer, SkBitmap* renderState.deleteFramebuffer(fbo); renderState.setViewport(previousViewportWidth, previousViewportHeight); + GL_CHECKPOINT(MODERATE); + return status; } return false; diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index db017feff577..cc58d6b4c237 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -195,7 +195,7 @@ bool OpenGLRenderer::finish() { } if (!suppressErrorChecks()) { - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); #if DEBUG_MEMORY_USAGE mCaches.dumpMemoryUsage(); diff --git a/libs/hwui/Texture.cpp b/libs/hwui/Texture.cpp index 5046d37150fe..c09b6dd89e4e 100644 --- a/libs/hwui/Texture.cpp +++ b/libs/hwui/Texture.cpp @@ -97,7 +97,7 @@ void Texture::resetCachedParams() { void Texture::upload(GLint internalformat, uint32_t width, uint32_t height, GLenum format, GLenum type, const void* pixels) { - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); bool needsAlloc = updateSize(width, height, internalformat); if (!mId) { glGenTextures(1, &mId); @@ -112,7 +112,7 @@ void Texture::upload(GLint internalformat, uint32_t width, uint32_t height, glTexSubImage2D(GL_TEXTURE_2D, 0, mFormat, mWidth, mHeight, 0, format, type, pixels); } - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); } static void uploadToTexture(bool resize, GLenum format, GLenum type, GLsizei stride, GLsizei bpp, diff --git a/libs/hwui/tests/common/nullegl.cpp b/libs/hwui/debug/nullegl.cpp index b6cc2f247627..b6cc2f247627 100644 --- a/libs/hwui/tests/common/nullegl.cpp +++ b/libs/hwui/debug/nullegl.cpp diff --git a/libs/hwui/tests/common/nullgles.cpp b/libs/hwui/debug/nullgles.cpp index f8e8c98c20ba..ffb064942911 100644 --- a/libs/hwui/tests/common/nullgles.cpp +++ b/libs/hwui/debug/nullgles.cpp @@ -14,6 +14,8 @@ * limitations under the License. */ +#include "unwrap_gles.h" + #include <GLES3/gl3.h> #include <GLES2/gl2ext.h> diff --git a/libs/hwui/debug/unwrap_gles.h b/libs/hwui/debug/unwrap_gles.h new file mode 100644 index 000000000000..7716a735a63b --- /dev/null +++ b/libs/hwui/debug/unwrap_gles.h @@ -0,0 +1,918 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifdef HWUI_GLES_WRAP_ENABLED +#undef HWUI_GLES_WRAP_ENABLED + +#undef glActiveShaderProgram +#undef glActiveShaderProgramEXT +#undef glActiveTexture +#undef glAlphaFunc +#undef glAlphaFuncQCOM +#undef glAlphaFuncx +#undef glAlphaFuncxOES +#undef glApplyFramebufferAttachmentCMAAINTEL +#undef glAttachShader +#undef glBeginConditionalRenderNV +#undef glBeginPerfMonitorAMD +#undef glBeginPerfQueryINTEL +#undef glBeginQuery +#undef glBeginQueryEXT +#undef glBeginTransformFeedback +#undef glBindAttribLocation +#undef glBindBuffer +#undef glBindBufferBase +#undef glBindBufferRange +#undef glBindFragDataLocationEXT +#undef glBindFragDataLocationIndexedEXT +#undef glBindFramebuffer +#undef glBindFramebufferOES +#undef glBindImageTexture +#undef glBindProgramPipeline +#undef glBindProgramPipelineEXT +#undef glBindRenderbuffer +#undef glBindRenderbufferOES +#undef glBindSampler +#undef glBindTexture +#undef glBindTransformFeedback +#undef glBindVertexArray +#undef glBindVertexArrayOES +#undef glBindVertexBuffer +#undef glBlendBarrier +#undef glBlendBarrierKHR +#undef glBlendBarrierNV +#undef glBlendColor +#undef glBlendEquation +#undef glBlendEquationOES +#undef glBlendEquationSeparate +#undef glBlendEquationSeparateOES +#undef glBlendEquationSeparatei +#undef glBlendEquationSeparateiEXT +#undef glBlendEquationSeparateiOES +#undef glBlendEquationi +#undef glBlendEquationiEXT +#undef glBlendEquationiOES +#undef glBlendFunc +#undef glBlendFuncSeparate +#undef glBlendFuncSeparateOES +#undef glBlendFuncSeparatei +#undef glBlendFuncSeparateiEXT +#undef glBlendFuncSeparateiOES +#undef glBlendFunci +#undef glBlendFunciEXT +#undef glBlendFunciOES +#undef glBlendParameteriNV +#undef glBlitFramebuffer +#undef glBlitFramebufferANGLE +#undef glBlitFramebufferNV +#undef glBufferData +#undef glBufferStorageEXT +#undef glBufferSubData +#undef glCheckFramebufferStatus +#undef glCheckFramebufferStatusOES +#undef glClear +#undef glClearBufferfi +#undef glClearBufferfv +#undef glClearBufferiv +#undef glClearBufferuiv +#undef glClearColor +#undef glClearColorx +#undef glClearColorxOES +#undef glClearDepthf +#undef glClearDepthfOES +#undef glClearDepthx +#undef glClearDepthxOES +#undef glClearStencil +#undef glClientActiveTexture +#undef glClientWaitSync +#undef glClientWaitSyncAPPLE +#undef glClipPlanef +#undef glClipPlanefIMG +#undef glClipPlanefOES +#undef glClipPlanex +#undef glClipPlanexIMG +#undef glClipPlanexOES +#undef glColor4f +#undef glColor4ub +#undef glColor4x +#undef glColor4xOES +#undef glColorMask +#undef glColorMaski +#undef glColorMaskiEXT +#undef glColorMaskiOES +#undef glColorPointer +#undef glCompileShader +#undef glCompressedTexImage2D +#undef glCompressedTexImage3D +#undef glCompressedTexImage3DOES +#undef glCompressedTexSubImage2D +#undef glCompressedTexSubImage3D +#undef glCompressedTexSubImage3DOES +#undef glCopyBufferSubData +#undef glCopyBufferSubDataNV +#undef glCopyImageSubData +#undef glCopyImageSubDataEXT +#undef glCopyImageSubDataOES +#undef glCopyPathNV +#undef glCopyTexImage2D +#undef glCopyTexSubImage2D +#undef glCopyTexSubImage3D +#undef glCopyTexSubImage3DOES +#undef glCopyTextureLevelsAPPLE +#undef glCoverFillPathInstancedNV +#undef glCoverFillPathNV +#undef glCoverStrokePathInstancedNV +#undef glCoverStrokePathNV +#undef glCoverageMaskNV +#undef glCoverageModulationNV +#undef glCoverageModulationTableNV +#undef glCoverageOperationNV +#undef glCreatePerfQueryINTEL +#undef glCreateProgram +#undef glCreateShader +#undef glCreateShaderProgramv +#undef glCreateShaderProgramvEXT +#undef glCullFace +#undef glCurrentPaletteMatrixOES +#undef glDebugMessageCallback +#undef glDebugMessageCallbackKHR +#undef glDebugMessageControl +#undef glDebugMessageControlKHR +#undef glDebugMessageInsert +#undef glDebugMessageInsertKHR +#undef glDeleteBuffers +#undef glDeleteFencesNV +#undef glDeleteFramebuffers +#undef glDeleteFramebuffersOES +#undef glDeletePathsNV +#undef glDeletePerfMonitorsAMD +#undef glDeletePerfQueryINTEL +#undef glDeleteProgram +#undef glDeleteProgramPipelines +#undef glDeleteProgramPipelinesEXT +#undef glDeleteQueries +#undef glDeleteQueriesEXT +#undef glDeleteRenderbuffers +#undef glDeleteRenderbuffersOES +#undef glDeleteSamplers +#undef glDeleteShader +#undef glDeleteSync +#undef glDeleteSyncAPPLE +#undef glDeleteTextures +#undef glDeleteTransformFeedbacks +#undef glDeleteVertexArrays +#undef glDeleteVertexArraysOES +#undef glDepthFunc +#undef glDepthMask +#undef glDepthRangeArrayfvNV +#undef glDepthRangeIndexedfNV +#undef glDepthRangef +#undef glDepthRangefOES +#undef glDepthRangex +#undef glDepthRangexOES +#undef glDetachShader +#undef glDisable +#undef glDisableClientState +#undef glDisableDriverControlQCOM +#undef glDisableVertexAttribArray +#undef glDisablei +#undef glDisableiEXT +#undef glDisableiNV +#undef glDisableiOES +#undef glDiscardFramebufferEXT +#undef glDispatchCompute +#undef glDispatchComputeIndirect +#undef glDrawArrays +#undef glDrawArraysIndirect +#undef glDrawArraysInstanced +#undef glDrawArraysInstancedANGLE +#undef glDrawArraysInstancedBaseInstanceEXT +#undef glDrawArraysInstancedEXT +#undef glDrawArraysInstancedNV +#undef glDrawBuffers +#undef glDrawBuffersEXT +#undef glDrawBuffersIndexedEXT +#undef glDrawBuffersNV +#undef glDrawElements +#undef glDrawElementsBaseVertex +#undef glDrawElementsBaseVertexEXT +#undef glDrawElementsBaseVertexOES +#undef glDrawElementsIndirect +#undef glDrawElementsInstanced +#undef glDrawElementsInstancedANGLE +#undef glDrawElementsInstancedBaseInstanceEXT +#undef glDrawElementsInstancedBaseVertex +#undef glDrawElementsInstancedBaseVertexBaseInstanceEXT +#undef glDrawElementsInstancedBaseVertexEXT +#undef glDrawElementsInstancedBaseVertexOES +#undef glDrawElementsInstancedEXT +#undef glDrawElementsInstancedNV +#undef glDrawRangeElements +#undef glDrawRangeElementsBaseVertex +#undef glDrawRangeElementsBaseVertexEXT +#undef glDrawRangeElementsBaseVertexOES +#undef glDrawTexfOES +#undef glDrawTexfvOES +#undef glDrawTexiOES +#undef glDrawTexivOES +#undef glDrawTexsOES +#undef glDrawTexsvOES +#undef glDrawTexxOES +#undef glDrawTexxvOES +#undef glEGLImageTargetRenderbufferStorageOES +#undef glEGLImageTargetTexture2DOES +#undef glEnable +#undef glEnableClientState +#undef glEnableDriverControlQCOM +#undef glEnableVertexAttribArray +#undef glEnablei +#undef glEnableiEXT +#undef glEnableiNV +#undef glEnableiOES +#undef glEndConditionalRenderNV +#undef glEndPerfMonitorAMD +#undef glEndPerfQueryINTEL +#undef glEndQuery +#undef glEndQueryEXT +#undef glEndTilingQCOM +#undef glEndTransformFeedback +#undef glExtGetBufferPointervQCOM +#undef glExtGetBuffersQCOM +#undef glExtGetFramebuffersQCOM +#undef glExtGetProgramBinarySourceQCOM +#undef glExtGetProgramsQCOM +#undef glExtGetRenderbuffersQCOM +#undef glExtGetShadersQCOM +#undef glExtGetTexLevelParameterivQCOM +#undef glExtGetTexSubImageQCOM +#undef glExtGetTexturesQCOM +#undef glExtIsProgramBinaryQCOM +#undef glExtTexObjectStateOverrideiQCOM +#undef glFenceSync +#undef glFenceSyncAPPLE +#undef glFinish +#undef glFinishFenceNV +#undef glFlush +#undef glFlushMappedBufferRange +#undef glFlushMappedBufferRangeEXT +#undef glFogf +#undef glFogfv +#undef glFogx +#undef glFogxOES +#undef glFogxv +#undef glFogxvOES +#undef glFragmentCoverageColorNV +#undef glFramebufferParameteri +#undef glFramebufferRenderbuffer +#undef glFramebufferRenderbufferOES +#undef glFramebufferSampleLocationsfvNV +#undef glFramebufferTexture +#undef glFramebufferTexture2D +#undef glFramebufferTexture2DMultisampleEXT +#undef glFramebufferTexture2DMultisampleIMG +#undef glFramebufferTexture2DOES +#undef glFramebufferTexture3DOES +#undef glFramebufferTextureEXT +#undef glFramebufferTextureLayer +#undef glFramebufferTextureMultisampleMultiviewOVR +#undef glFramebufferTextureMultiviewOVR +#undef glFramebufferTextureOES +#undef glFrontFace +#undef glFrustumf +#undef glFrustumfOES +#undef glFrustumx +#undef glFrustumxOES +#undef glGenBuffers +#undef glGenFencesNV +#undef glGenFramebuffers +#undef glGenFramebuffersOES +#undef glGenPathsNV +#undef glGenPerfMonitorsAMD +#undef glGenProgramPipelines +#undef glGenProgramPipelinesEXT +#undef glGenQueries +#undef glGenQueriesEXT +#undef glGenRenderbuffers +#undef glGenRenderbuffersOES +#undef glGenSamplers +#undef glGenTextures +#undef glGenTransformFeedbacks +#undef glGenVertexArrays +#undef glGenVertexArraysOES +#undef glGenerateMipmap +#undef glGenerateMipmapOES +#undef glGetActiveAttrib +#undef glGetActiveUniform +#undef glGetActiveUniformBlockName +#undef glGetActiveUniformBlockiv +#undef glGetActiveUniformsiv +#undef glGetAttachedShaders +#undef glGetAttribLocation +#undef glGetBooleani_v +#undef glGetBooleanv +#undef glGetBufferParameteri64v +#undef glGetBufferParameteriv +#undef glGetBufferPointerv +#undef glGetBufferPointervOES +#undef glGetClipPlanef +#undef glGetClipPlanefOES +#undef glGetClipPlanex +#undef glGetClipPlanexOES +#undef glGetCoverageModulationTableNV +#undef glGetDebugMessageLog +#undef glGetDebugMessageLogKHR +#undef glGetDriverControlStringQCOM +#undef glGetDriverControlsQCOM +#undef glGetError +#undef glGetFenceivNV +#undef glGetFirstPerfQueryIdINTEL +#undef glGetFixedv +#undef glGetFixedvOES +#undef glGetFloati_vNV +#undef glGetFloatv +#undef glGetFragDataIndexEXT +#undef glGetFragDataLocation +#undef glGetFramebufferAttachmentParameteriv +#undef glGetFramebufferAttachmentParameterivOES +#undef glGetFramebufferParameteriv +#undef glGetGraphicsResetStatus +#undef glGetGraphicsResetStatusEXT +#undef glGetGraphicsResetStatusKHR +#undef glGetImageHandleNV +#undef glGetInteger64i_v +#undef glGetInteger64v +#undef glGetInteger64vAPPLE +#undef glGetIntegeri_v +#undef glGetIntegeri_vEXT +#undef glGetIntegerv +#undef glGetInternalformatSampleivNV +#undef glGetInternalformativ +#undef glGetLightfv +#undef glGetLightxv +#undef glGetLightxvOES +#undef glGetMaterialfv +#undef glGetMaterialxv +#undef glGetMaterialxvOES +#undef glGetMultisamplefv +#undef glGetNextPerfQueryIdINTEL +#undef glGetObjectLabel +#undef glGetObjectLabelEXT +#undef glGetObjectLabelKHR +#undef glGetObjectPtrLabel +#undef glGetObjectPtrLabelKHR +#undef glGetPathCommandsNV +#undef glGetPathCoordsNV +#undef glGetPathDashArrayNV +#undef glGetPathLengthNV +#undef glGetPathMetricRangeNV +#undef glGetPathMetricsNV +#undef glGetPathParameterfvNV +#undef glGetPathParameterivNV +#undef glGetPathSpacingNV +#undef glGetPerfCounterInfoINTEL +#undef glGetPerfMonitorCounterDataAMD +#undef glGetPerfMonitorCounterInfoAMD +#undef glGetPerfMonitorCounterStringAMD +#undef glGetPerfMonitorCountersAMD +#undef glGetPerfMonitorGroupStringAMD +#undef glGetPerfMonitorGroupsAMD +#undef glGetPerfQueryDataINTEL +#undef glGetPerfQueryIdByNameINTEL +#undef glGetPerfQueryInfoINTEL +#undef glGetPointerv +#undef glGetPointervKHR +#undef glGetProgramBinary +#undef glGetProgramBinaryOES +#undef glGetProgramInfoLog +#undef glGetProgramInterfaceiv +#undef glGetProgramPipelineInfoLog +#undef glGetProgramPipelineInfoLogEXT +#undef glGetProgramPipelineiv +#undef glGetProgramPipelineivEXT +#undef glGetProgramResourceIndex +#undef glGetProgramResourceLocation +#undef glGetProgramResourceLocationIndexEXT +#undef glGetProgramResourceName +#undef glGetProgramResourcefvNV +#undef glGetProgramResourceiv +#undef glGetProgramiv +#undef glGetQueryObjecti64vEXT +#undef glGetQueryObjectivEXT +#undef glGetQueryObjectui64vEXT +#undef glGetQueryObjectuiv +#undef glGetQueryObjectuivEXT +#undef glGetQueryiv +#undef glGetQueryivEXT +#undef glGetRenderbufferParameteriv +#undef glGetRenderbufferParameterivOES +#undef glGetSamplerParameterIiv +#undef glGetSamplerParameterIivEXT +#undef glGetSamplerParameterIivOES +#undef glGetSamplerParameterIuiv +#undef glGetSamplerParameterIuivEXT +#undef glGetSamplerParameterIuivOES +#undef glGetSamplerParameterfv +#undef glGetSamplerParameteriv +#undef glGetShaderInfoLog +#undef glGetShaderPrecisionFormat +#undef glGetShaderSource +#undef glGetShaderiv +#undef glGetString +#undef glGetStringi +#undef glGetSynciv +#undef glGetSyncivAPPLE +#undef glGetTexEnvfv +#undef glGetTexEnviv +#undef glGetTexEnvxv +#undef glGetTexEnvxvOES +#undef glGetTexGenfvOES +#undef glGetTexGenivOES +#undef glGetTexGenxvOES +#undef glGetTexLevelParameterfv +#undef glGetTexLevelParameteriv +#undef glGetTexParameterIiv +#undef glGetTexParameterIivEXT +#undef glGetTexParameterIivOES +#undef glGetTexParameterIuiv +#undef glGetTexParameterIuivEXT +#undef glGetTexParameterIuivOES +#undef glGetTexParameterfv +#undef glGetTexParameteriv +#undef glGetTexParameterxv +#undef glGetTexParameterxvOES +#undef glGetTextureHandleNV +#undef glGetTextureSamplerHandleNV +#undef glGetTransformFeedbackVarying +#undef glGetTranslatedShaderSourceANGLE +#undef glGetUniformBlockIndex +#undef glGetUniformIndices +#undef glGetUniformLocation +#undef glGetUniformfv +#undef glGetUniformiv +#undef glGetUniformuiv +#undef glGetVertexAttribIiv +#undef glGetVertexAttribIuiv +#undef glGetVertexAttribPointerv +#undef glGetVertexAttribfv +#undef glGetVertexAttribiv +#undef glGetnUniformfv +#undef glGetnUniformfvEXT +#undef glGetnUniformfvKHR +#undef glGetnUniformiv +#undef glGetnUniformivEXT +#undef glGetnUniformivKHR +#undef glGetnUniformuiv +#undef glGetnUniformuivKHR +#undef glHint +#undef glInsertEventMarkerEXT +#undef glInterpolatePathsNV +#undef glInvalidateFramebuffer +#undef glInvalidateSubFramebuffer +#undef glIsBuffer +#undef glIsEnabled +#undef glIsEnabledi +#undef glIsEnablediEXT +#undef glIsEnablediNV +#undef glIsEnablediOES +#undef glIsFenceNV +#undef glIsFramebuffer +#undef glIsFramebufferOES +#undef glIsImageHandleResidentNV +#undef glIsPathNV +#undef glIsPointInFillPathNV +#undef glIsPointInStrokePathNV +#undef glIsProgram +#undef glIsProgramPipeline +#undef glIsProgramPipelineEXT +#undef glIsQuery +#undef glIsQueryEXT +#undef glIsRenderbuffer +#undef glIsRenderbufferOES +#undef glIsSampler +#undef glIsShader +#undef glIsSync +#undef glIsSyncAPPLE +#undef glIsTexture +#undef glIsTextureHandleResidentNV +#undef glIsTransformFeedback +#undef glIsVertexArray +#undef glIsVertexArrayOES +#undef glLabelObjectEXT +#undef glLightModelf +#undef glLightModelfv +#undef glLightModelx +#undef glLightModelxOES +#undef glLightModelxv +#undef glLightModelxvOES +#undef glLightf +#undef glLightfv +#undef glLightx +#undef glLightxOES +#undef glLightxv +#undef glLightxvOES +#undef glLineWidth +#undef glLineWidthx +#undef glLineWidthxOES +#undef glLinkProgram +#undef glLoadIdentity +#undef glLoadMatrixf +#undef glLoadMatrixx +#undef glLoadMatrixxOES +#undef glLoadPaletteFromModelViewMatrixOES +#undef glLogicOp +#undef glMakeImageHandleNonResidentNV +#undef glMakeImageHandleResidentNV +#undef glMakeTextureHandleNonResidentNV +#undef glMakeTextureHandleResidentNV +#undef glMapBufferOES +#undef glMapBufferRange +#undef glMapBufferRangeEXT +#undef glMaterialf +#undef glMaterialfv +#undef glMaterialx +#undef glMaterialxOES +#undef glMaterialxv +#undef glMaterialxvOES +#undef glMatrixIndexPointerOES +#undef glMatrixLoad3x2fNV +#undef glMatrixLoad3x3fNV +#undef glMatrixLoadTranspose3x3fNV +#undef glMatrixMode +#undef glMatrixMult3x2fNV +#undef glMatrixMult3x3fNV +#undef glMatrixMultTranspose3x3fNV +#undef glMemoryBarrier +#undef glMemoryBarrierByRegion +#undef glMinSampleShading +#undef glMinSampleShadingOES +#undef glMultMatrixf +#undef glMultMatrixx +#undef glMultMatrixxOES +#undef glMultiDrawArraysEXT +#undef glMultiDrawArraysIndirectEXT +#undef glMultiDrawElementsBaseVertexEXT +#undef glMultiDrawElementsBaseVertexOES +#undef glMultiDrawElementsEXT +#undef glMultiDrawElementsIndirectEXT +#undef glMultiTexCoord4f +#undef glMultiTexCoord4x +#undef glMultiTexCoord4xOES +#undef glNamedFramebufferSampleLocationsfvNV +#undef glNormal3f +#undef glNormal3x +#undef glNormal3xOES +#undef glNormalPointer +#undef glObjectLabel +#undef glObjectLabelKHR +#undef glObjectPtrLabel +#undef glObjectPtrLabelKHR +#undef glOrthof +#undef glOrthofOES +#undef glOrthox +#undef glOrthoxOES +#undef glPatchParameteri +#undef glPatchParameteriEXT +#undef glPatchParameteriOES +#undef glPathCommandsNV +#undef glPathCoordsNV +#undef glPathCoverDepthFuncNV +#undef glPathDashArrayNV +#undef glPathGlyphIndexArrayNV +#undef glPathGlyphIndexRangeNV +#undef glPathGlyphRangeNV +#undef glPathGlyphsNV +#undef glPathMemoryGlyphIndexArrayNV +#undef glPathParameterfNV +#undef glPathParameterfvNV +#undef glPathParameteriNV +#undef glPathParameterivNV +#undef glPathStencilDepthOffsetNV +#undef glPathStencilFuncNV +#undef glPathStringNV +#undef glPathSubCommandsNV +#undef glPathSubCoordsNV +#undef glPauseTransformFeedback +#undef glPixelStorei +#undef glPointAlongPathNV +#undef glPointParameterf +#undef glPointParameterfv +#undef glPointParameterx +#undef glPointParameterxOES +#undef glPointParameterxv +#undef glPointParameterxvOES +#undef glPointSize +#undef glPointSizePointerOES +#undef glPointSizex +#undef glPointSizexOES +#undef glPolygonModeNV +#undef glPolygonOffset +#undef glPolygonOffsetx +#undef glPolygonOffsetxOES +#undef glPopDebugGroup +#undef glPopDebugGroupKHR +#undef glPopGroupMarkerEXT +#undef glPopMatrix +#undef glPrimitiveBoundingBox +#undef glPrimitiveBoundingBoxEXT +#undef glPrimitiveBoundingBoxOES +#undef glProgramBinary +#undef glProgramBinaryOES +#undef glProgramParameteri +#undef glProgramParameteriEXT +#undef glProgramPathFragmentInputGenNV +#undef glProgramUniform1f +#undef glProgramUniform1fEXT +#undef glProgramUniform1fv +#undef glProgramUniform1fvEXT +#undef glProgramUniform1i +#undef glProgramUniform1iEXT +#undef glProgramUniform1iv +#undef glProgramUniform1ivEXT +#undef glProgramUniform1ui +#undef glProgramUniform1uiEXT +#undef glProgramUniform1uiv +#undef glProgramUniform1uivEXT +#undef glProgramUniform2f +#undef glProgramUniform2fEXT +#undef glProgramUniform2fv +#undef glProgramUniform2fvEXT +#undef glProgramUniform2i +#undef glProgramUniform2iEXT +#undef glProgramUniform2iv +#undef glProgramUniform2ivEXT +#undef glProgramUniform2ui +#undef glProgramUniform2uiEXT +#undef glProgramUniform2uiv +#undef glProgramUniform2uivEXT +#undef glProgramUniform3f +#undef glProgramUniform3fEXT +#undef glProgramUniform3fv +#undef glProgramUniform3fvEXT +#undef glProgramUniform3i +#undef glProgramUniform3iEXT +#undef glProgramUniform3iv +#undef glProgramUniform3ivEXT +#undef glProgramUniform3ui +#undef glProgramUniform3uiEXT +#undef glProgramUniform3uiv +#undef glProgramUniform3uivEXT +#undef glProgramUniform4f +#undef glProgramUniform4fEXT +#undef glProgramUniform4fv +#undef glProgramUniform4fvEXT +#undef glProgramUniform4i +#undef glProgramUniform4iEXT +#undef glProgramUniform4iv +#undef glProgramUniform4ivEXT +#undef glProgramUniform4ui +#undef glProgramUniform4uiEXT +#undef glProgramUniform4uiv +#undef glProgramUniform4uivEXT +#undef glProgramUniformHandleui64NV +#undef glProgramUniformHandleui64vNV +#undef glProgramUniformMatrix2fv +#undef glProgramUniformMatrix2fvEXT +#undef glProgramUniformMatrix2x3fv +#undef glProgramUniformMatrix2x3fvEXT +#undef glProgramUniformMatrix2x4fv +#undef glProgramUniformMatrix2x4fvEXT +#undef glProgramUniformMatrix3fv +#undef glProgramUniformMatrix3fvEXT +#undef glProgramUniformMatrix3x2fv +#undef glProgramUniformMatrix3x2fvEXT +#undef glProgramUniformMatrix3x4fv +#undef glProgramUniformMatrix3x4fvEXT +#undef glProgramUniformMatrix4fv +#undef glProgramUniformMatrix4fvEXT +#undef glProgramUniformMatrix4x2fv +#undef glProgramUniformMatrix4x2fvEXT +#undef glProgramUniformMatrix4x3fv +#undef glProgramUniformMatrix4x3fvEXT +#undef glPushDebugGroup +#undef glPushDebugGroupKHR +#undef glPushGroupMarkerEXT +#undef glPushMatrix +#undef glQueryCounterEXT +#undef glQueryMatrixxOES +#undef glRasterSamplesEXT +#undef glReadBuffer +#undef glReadBufferIndexedEXT +#undef glReadBufferNV +#undef glReadPixels +#undef glReadnPixels +#undef glReadnPixelsEXT +#undef glReadnPixelsKHR +#undef glReleaseShaderCompiler +#undef glRenderbufferStorage +#undef glRenderbufferStorageMultisample +#undef glRenderbufferStorageMultisampleANGLE +#undef glRenderbufferStorageMultisampleAPPLE +#undef glRenderbufferStorageMultisampleEXT +#undef glRenderbufferStorageMultisampleIMG +#undef glRenderbufferStorageMultisampleNV +#undef glRenderbufferStorageOES +#undef glResolveDepthValuesNV +#undef glResolveMultisampleFramebufferAPPLE +#undef glResumeTransformFeedback +#undef glRotatef +#undef glRotatex +#undef glRotatexOES +#undef glSampleCoverage +#undef glSampleCoveragex +#undef glSampleCoveragexOES +#undef glSampleMaski +#undef glSamplerParameterIiv +#undef glSamplerParameterIivEXT +#undef glSamplerParameterIivOES +#undef glSamplerParameterIuiv +#undef glSamplerParameterIuivEXT +#undef glSamplerParameterIuivOES +#undef glSamplerParameterf +#undef glSamplerParameterfv +#undef glSamplerParameteri +#undef glSamplerParameteriv +#undef glScalef +#undef glScalex +#undef glScalexOES +#undef glScissor +#undef glScissorArrayvNV +#undef glScissorIndexedNV +#undef glScissorIndexedvNV +#undef glSelectPerfMonitorCountersAMD +#undef glSetFenceNV +#undef glShadeModel +#undef glShaderBinary +#undef glShaderSource +#undef glStartTilingQCOM +#undef glStencilFillPathInstancedNV +#undef glStencilFillPathNV +#undef glStencilFunc +#undef glStencilFuncSeparate +#undef glStencilMask +#undef glStencilMaskSeparate +#undef glStencilOp +#undef glStencilOpSeparate +#undef glStencilStrokePathInstancedNV +#undef glStencilStrokePathNV +#undef glStencilThenCoverFillPathInstancedNV +#undef glStencilThenCoverFillPathNV +#undef glStencilThenCoverStrokePathInstancedNV +#undef glStencilThenCoverStrokePathNV +#undef glSubpixelPrecisionBiasNV +#undef glTestFenceNV +#undef glTexBuffer +#undef glTexBufferEXT +#undef glTexBufferOES +#undef glTexBufferRange +#undef glTexBufferRangeEXT +#undef glTexBufferRangeOES +#undef glTexCoordPointer +#undef glTexEnvf +#undef glTexEnvfv +#undef glTexEnvi +#undef glTexEnviv +#undef glTexEnvx +#undef glTexEnvxOES +#undef glTexEnvxv +#undef glTexEnvxvOES +#undef glTexGenfOES +#undef glTexGenfvOES +#undef glTexGeniOES +#undef glTexGenivOES +#undef glTexGenxOES +#undef glTexGenxvOES +#undef glTexImage2D +#undef glTexImage3D +#undef glTexImage3DOES +#undef glTexPageCommitmentEXT +#undef glTexParameterIiv +#undef glTexParameterIivEXT +#undef glTexParameterIivOES +#undef glTexParameterIuiv +#undef glTexParameterIuivEXT +#undef glTexParameterIuivOES +#undef glTexParameterf +#undef glTexParameterfv +#undef glTexParameteri +#undef glTexParameteriv +#undef glTexParameterx +#undef glTexParameterxOES +#undef glTexParameterxv +#undef glTexParameterxvOES +#undef glTexStorage1DEXT +#undef glTexStorage2D +#undef glTexStorage2DEXT +#undef glTexStorage2DMultisample +#undef glTexStorage3D +#undef glTexStorage3DEXT +#undef glTexStorage3DMultisample +#undef glTexStorage3DMultisampleOES +#undef glTexSubImage2D +#undef glTexSubImage3D +#undef glTexSubImage3DOES +#undef glTextureStorage1DEXT +#undef glTextureStorage2DEXT +#undef glTextureStorage3DEXT +#undef glTextureViewEXT +#undef glTextureViewOES +#undef glTransformFeedbackVaryings +#undef glTransformPathNV +#undef glTranslatef +#undef glTranslatex +#undef glTranslatexOES +#undef glUniform1f +#undef glUniform1fv +#undef glUniform1i +#undef glUniform1iv +#undef glUniform1ui +#undef glUniform1uiv +#undef glUniform2f +#undef glUniform2fv +#undef glUniform2i +#undef glUniform2iv +#undef glUniform2ui +#undef glUniform2uiv +#undef glUniform3f +#undef glUniform3fv +#undef glUniform3i +#undef glUniform3iv +#undef glUniform3ui +#undef glUniform3uiv +#undef glUniform4f +#undef glUniform4fv +#undef glUniform4i +#undef glUniform4iv +#undef glUniform4ui +#undef glUniform4uiv +#undef glUniformBlockBinding +#undef glUniformHandleui64NV +#undef glUniformHandleui64vNV +#undef glUniformMatrix2fv +#undef glUniformMatrix2x3fv +#undef glUniformMatrix2x3fvNV +#undef glUniformMatrix2x4fv +#undef glUniformMatrix2x4fvNV +#undef glUniformMatrix3fv +#undef glUniformMatrix3x2fv +#undef glUniformMatrix3x2fvNV +#undef glUniformMatrix3x4fv +#undef glUniformMatrix3x4fvNV +#undef glUniformMatrix4fv +#undef glUniformMatrix4x2fv +#undef glUniformMatrix4x2fvNV +#undef glUniformMatrix4x3fv +#undef glUniformMatrix4x3fvNV +#undef glUnmapBuffer +#undef glUnmapBufferOES +#undef glUseProgram +#undef glUseProgramStages +#undef glUseProgramStagesEXT +#undef glValidateProgram +#undef glValidateProgramPipeline +#undef glValidateProgramPipelineEXT +#undef glVertexAttrib1f +#undef glVertexAttrib1fv +#undef glVertexAttrib2f +#undef glVertexAttrib2fv +#undef glVertexAttrib3f +#undef glVertexAttrib3fv +#undef glVertexAttrib4f +#undef glVertexAttrib4fv +#undef glVertexAttribBinding +#undef glVertexAttribDivisor +#undef glVertexAttribDivisorANGLE +#undef glVertexAttribDivisorEXT +#undef glVertexAttribDivisorNV +#undef glVertexAttribFormat +#undef glVertexAttribI4i +#undef glVertexAttribI4iv +#undef glVertexAttribI4ui +#undef glVertexAttribI4uiv +#undef glVertexAttribIFormat +#undef glVertexAttribIPointer +#undef glVertexAttribPointer +#undef glVertexBindingDivisor +#undef glVertexPointer +#undef glViewport +#undef glViewportArrayvNV +#undef glViewportIndexedfNV +#undef glViewportIndexedfvNV +#undef glWaitSync +#undef glWaitSyncAPPLE +#undef glWeightPathsNV +#undef glWeightPointerOES + +#endif // HWUI_GLES_WRAP_ENABLED diff --git a/libs/hwui/debug/wrap_gles.cpp b/libs/hwui/debug/wrap_gles.cpp new file mode 100644 index 000000000000..c4f2e3537fe8 --- /dev/null +++ b/libs/hwui/debug/wrap_gles.cpp @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "unwrap_gles.h" + +#include <EGL/egl.h> +#include <EGL/eglext.h> +#include <GLES/gl.h> +#include <GLES/glext.h> +#include <GLES2/gl2.h> +#include <GLES2/gl2ext.h> +#include <GLES3/gl3.h> +#include <GLES3/gl31.h> +#include <GLES3/gl32.h> + +#include <cutils/log.h> + +void assertNoGlErrors(const char* apicall) { + GLenum status = GL_NO_ERROR; + GLenum lastError = GL_NO_ERROR; + const char* lastErrorName = nullptr; + while ((status = glGetError()) != GL_NO_ERROR) { + lastError = status; + switch (status) { + case GL_INVALID_ENUM: + ALOGE("GL error: GL_INVALID_ENUM"); + lastErrorName = "GL_INVALID_ENUM"; + break; + case GL_INVALID_VALUE: + ALOGE("GL error: GL_INVALID_VALUE"); + lastErrorName = "GL_INVALID_VALUE"; + break; + case GL_INVALID_OPERATION: + ALOGE("GL error: GL_INVALID_OPERATION"); + lastErrorName = "GL_INVALID_OPERATION"; + break; + case GL_OUT_OF_MEMORY: + ALOGE("GL error: Out of memory!"); + lastErrorName = "GL_OUT_OF_MEMORY"; + break; + default: + ALOGE("GL error: 0x%x", status); + lastErrorName = "UNKNOWN"; + } + } + LOG_ALWAYS_FATAL_IF(lastError != GL_NO_ERROR, + "%s error! %s (0x%x)", apicall, lastErrorName, lastError); +} + +#define API_ENTRY(x) wrap_##x +#define CALL_GL_API(x, ...) x(__VA_ARGS__); assertNoGlErrors(#x) +#define CALL_GL_API_RETURN(x, ...) auto ret = x(__VA_ARGS__);\ + assertNoGlErrors(#x);\ + return ret + +extern "C" { +#include <gl2_api.in> +#include <gl2ext_api.in> + +// libGLESv2 handles these specially, so they are not in gl2_api.in + +void API_ENTRY(glGetBooleanv)(GLenum pname, GLboolean *data) { + CALL_GL_API(glGetBooleanv, pname, data); +} +void API_ENTRY(glGetFloatv)(GLenum pname, GLfloat *data) { + CALL_GL_API(glGetFloatv, pname, data); +} +void API_ENTRY(glGetIntegerv)(GLenum pname, GLint *data) { + CALL_GL_API(glGetIntegerv, pname, data); +} +const GLubyte * API_ENTRY(glGetString)(GLenum name) { + CALL_GL_API_RETURN(glGetString, name); +} +const GLubyte * API_ENTRY(glGetStringi)(GLenum name, GLuint index) { + CALL_GL_API_RETURN(glGetStringi, name, index); +} +void API_ENTRY(glGetInteger64v)(GLenum pname, GLint64 *data) { + CALL_GL_API(glGetInteger64v, pname, data); +} +} diff --git a/libs/hwui/debug/wrap_gles.h b/libs/hwui/debug/wrap_gles.h new file mode 100644 index 000000000000..4a3537442e73 --- /dev/null +++ b/libs/hwui/debug/wrap_gles.h @@ -0,0 +1,918 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef HWUI_GLES_WRAP_ENABLED +#define HWUI_GLES_WRAP_ENABLED + +#define glActiveShaderProgram wrap_glActiveShaderProgram +#define glActiveShaderProgramEXT wrap_glActiveShaderProgramEXT +#define glActiveTexture wrap_glActiveTexture +#define glAlphaFunc wrap_glAlphaFunc +#define glAlphaFuncQCOM wrap_glAlphaFuncQCOM +#define glAlphaFuncx wrap_glAlphaFuncx +#define glAlphaFuncxOES wrap_glAlphaFuncxOES +#define glApplyFramebufferAttachmentCMAAINTEL wrap_glApplyFramebufferAttachmentCMAAINTEL +#define glAttachShader wrap_glAttachShader +#define glBeginConditionalRenderNV wrap_glBeginConditionalRenderNV +#define glBeginPerfMonitorAMD wrap_glBeginPerfMonitorAMD +#define glBeginPerfQueryINTEL wrap_glBeginPerfQueryINTEL +#define glBeginQuery wrap_glBeginQuery +#define glBeginQueryEXT wrap_glBeginQueryEXT +#define glBeginTransformFeedback wrap_glBeginTransformFeedback +#define glBindAttribLocation wrap_glBindAttribLocation +#define glBindBuffer wrap_glBindBuffer +#define glBindBufferBase wrap_glBindBufferBase +#define glBindBufferRange wrap_glBindBufferRange +#define glBindFragDataLocationEXT wrap_glBindFragDataLocationEXT +#define glBindFragDataLocationIndexedEXT wrap_glBindFragDataLocationIndexedEXT +#define glBindFramebuffer wrap_glBindFramebuffer +#define glBindFramebufferOES wrap_glBindFramebufferOES +#define glBindImageTexture wrap_glBindImageTexture +#define glBindProgramPipeline wrap_glBindProgramPipeline +#define glBindProgramPipelineEXT wrap_glBindProgramPipelineEXT +#define glBindRenderbuffer wrap_glBindRenderbuffer +#define glBindRenderbufferOES wrap_glBindRenderbufferOES +#define glBindSampler wrap_glBindSampler +#define glBindTexture wrap_glBindTexture +#define glBindTransformFeedback wrap_glBindTransformFeedback +#define glBindVertexArray wrap_glBindVertexArray +#define glBindVertexArrayOES wrap_glBindVertexArrayOES +#define glBindVertexBuffer wrap_glBindVertexBuffer +#define glBlendBarrier wrap_glBlendBarrier +#define glBlendBarrierKHR wrap_glBlendBarrierKHR +#define glBlendBarrierNV wrap_glBlendBarrierNV +#define glBlendColor wrap_glBlendColor +#define glBlendEquation wrap_glBlendEquation +#define glBlendEquationOES wrap_glBlendEquationOES +#define glBlendEquationSeparate wrap_glBlendEquationSeparate +#define glBlendEquationSeparateOES wrap_glBlendEquationSeparateOES +#define glBlendEquationSeparatei wrap_glBlendEquationSeparatei +#define glBlendEquationSeparateiEXT wrap_glBlendEquationSeparateiEXT +#define glBlendEquationSeparateiOES wrap_glBlendEquationSeparateiOES +#define glBlendEquationi wrap_glBlendEquationi +#define glBlendEquationiEXT wrap_glBlendEquationiEXT +#define glBlendEquationiOES wrap_glBlendEquationiOES +#define glBlendFunc wrap_glBlendFunc +#define glBlendFuncSeparate wrap_glBlendFuncSeparate +#define glBlendFuncSeparateOES wrap_glBlendFuncSeparateOES +#define glBlendFuncSeparatei wrap_glBlendFuncSeparatei +#define glBlendFuncSeparateiEXT wrap_glBlendFuncSeparateiEXT +#define glBlendFuncSeparateiOES wrap_glBlendFuncSeparateiOES +#define glBlendFunci wrap_glBlendFunci +#define glBlendFunciEXT wrap_glBlendFunciEXT +#define glBlendFunciOES wrap_glBlendFunciOES +#define glBlendParameteriNV wrap_glBlendParameteriNV +#define glBlitFramebuffer wrap_glBlitFramebuffer +#define glBlitFramebufferANGLE wrap_glBlitFramebufferANGLE +#define glBlitFramebufferNV wrap_glBlitFramebufferNV +#define glBufferData wrap_glBufferData +#define glBufferStorageEXT wrap_glBufferStorageEXT +#define glBufferSubData wrap_glBufferSubData +#define glCheckFramebufferStatus wrap_glCheckFramebufferStatus +#define glCheckFramebufferStatusOES wrap_glCheckFramebufferStatusOES +#define glClear wrap_glClear +#define glClearBufferfi wrap_glClearBufferfi +#define glClearBufferfv wrap_glClearBufferfv +#define glClearBufferiv wrap_glClearBufferiv +#define glClearBufferuiv wrap_glClearBufferuiv +#define glClearColor wrap_glClearColor +#define glClearColorx wrap_glClearColorx +#define glClearColorxOES wrap_glClearColorxOES +#define glClearDepthf wrap_glClearDepthf +#define glClearDepthfOES wrap_glClearDepthfOES +#define glClearDepthx wrap_glClearDepthx +#define glClearDepthxOES wrap_glClearDepthxOES +#define glClearStencil wrap_glClearStencil +#define glClientActiveTexture wrap_glClientActiveTexture +#define glClientWaitSync wrap_glClientWaitSync +#define glClientWaitSyncAPPLE wrap_glClientWaitSyncAPPLE +#define glClipPlanef wrap_glClipPlanef +#define glClipPlanefIMG wrap_glClipPlanefIMG +#define glClipPlanefOES wrap_glClipPlanefOES +#define glClipPlanex wrap_glClipPlanex +#define glClipPlanexIMG wrap_glClipPlanexIMG +#define glClipPlanexOES wrap_glClipPlanexOES +#define glColor4f wrap_glColor4f +#define glColor4ub wrap_glColor4ub +#define glColor4x wrap_glColor4x +#define glColor4xOES wrap_glColor4xOES +#define glColorMask wrap_glColorMask +#define glColorMaski wrap_glColorMaski +#define glColorMaskiEXT wrap_glColorMaskiEXT +#define glColorMaskiOES wrap_glColorMaskiOES +#define glColorPointer wrap_glColorPointer +#define glCompileShader wrap_glCompileShader +#define glCompressedTexImage2D wrap_glCompressedTexImage2D +#define glCompressedTexImage3D wrap_glCompressedTexImage3D +#define glCompressedTexImage3DOES wrap_glCompressedTexImage3DOES +#define glCompressedTexSubImage2D wrap_glCompressedTexSubImage2D +#define glCompressedTexSubImage3D wrap_glCompressedTexSubImage3D +#define glCompressedTexSubImage3DOES wrap_glCompressedTexSubImage3DOES +#define glCopyBufferSubData wrap_glCopyBufferSubData +#define glCopyBufferSubDataNV wrap_glCopyBufferSubDataNV +#define glCopyImageSubData wrap_glCopyImageSubData +#define glCopyImageSubDataEXT wrap_glCopyImageSubDataEXT +#define glCopyImageSubDataOES wrap_glCopyImageSubDataOES +#define glCopyPathNV wrap_glCopyPathNV +#define glCopyTexImage2D wrap_glCopyTexImage2D +#define glCopyTexSubImage2D wrap_glCopyTexSubImage2D +#define glCopyTexSubImage3D wrap_glCopyTexSubImage3D +#define glCopyTexSubImage3DOES wrap_glCopyTexSubImage3DOES +#define glCopyTextureLevelsAPPLE wrap_glCopyTextureLevelsAPPLE +#define glCoverFillPathInstancedNV wrap_glCoverFillPathInstancedNV +#define glCoverFillPathNV wrap_glCoverFillPathNV +#define glCoverStrokePathInstancedNV wrap_glCoverStrokePathInstancedNV +#define glCoverStrokePathNV wrap_glCoverStrokePathNV +#define glCoverageMaskNV wrap_glCoverageMaskNV +#define glCoverageModulationNV wrap_glCoverageModulationNV +#define glCoverageModulationTableNV wrap_glCoverageModulationTableNV +#define glCoverageOperationNV wrap_glCoverageOperationNV +#define glCreatePerfQueryINTEL wrap_glCreatePerfQueryINTEL +#define glCreateProgram wrap_glCreateProgram +#define glCreateShader wrap_glCreateShader +#define glCreateShaderProgramv wrap_glCreateShaderProgramv +#define glCreateShaderProgramvEXT wrap_glCreateShaderProgramvEXT +#define glCullFace wrap_glCullFace +#define glCurrentPaletteMatrixOES wrap_glCurrentPaletteMatrixOES +#define glDebugMessageCallback wrap_glDebugMessageCallback +#define glDebugMessageCallbackKHR wrap_glDebugMessageCallbackKHR +#define glDebugMessageControl wrap_glDebugMessageControl +#define glDebugMessageControlKHR wrap_glDebugMessageControlKHR +#define glDebugMessageInsert wrap_glDebugMessageInsert +#define glDebugMessageInsertKHR wrap_glDebugMessageInsertKHR +#define glDeleteBuffers wrap_glDeleteBuffers +#define glDeleteFencesNV wrap_glDeleteFencesNV +#define glDeleteFramebuffers wrap_glDeleteFramebuffers +#define glDeleteFramebuffersOES wrap_glDeleteFramebuffersOES +#define glDeletePathsNV wrap_glDeletePathsNV +#define glDeletePerfMonitorsAMD wrap_glDeletePerfMonitorsAMD +#define glDeletePerfQueryINTEL wrap_glDeletePerfQueryINTEL +#define glDeleteProgram wrap_glDeleteProgram +#define glDeleteProgramPipelines wrap_glDeleteProgramPipelines +#define glDeleteProgramPipelinesEXT wrap_glDeleteProgramPipelinesEXT +#define glDeleteQueries wrap_glDeleteQueries +#define glDeleteQueriesEXT wrap_glDeleteQueriesEXT +#define glDeleteRenderbuffers wrap_glDeleteRenderbuffers +#define glDeleteRenderbuffersOES wrap_glDeleteRenderbuffersOES +#define glDeleteSamplers wrap_glDeleteSamplers +#define glDeleteShader wrap_glDeleteShader +#define glDeleteSync wrap_glDeleteSync +#define glDeleteSyncAPPLE wrap_glDeleteSyncAPPLE +#define glDeleteTextures wrap_glDeleteTextures +#define glDeleteTransformFeedbacks wrap_glDeleteTransformFeedbacks +#define glDeleteVertexArrays wrap_glDeleteVertexArrays +#define glDeleteVertexArraysOES wrap_glDeleteVertexArraysOES +#define glDepthFunc wrap_glDepthFunc +#define glDepthMask wrap_glDepthMask +#define glDepthRangeArrayfvNV wrap_glDepthRangeArrayfvNV +#define glDepthRangeIndexedfNV wrap_glDepthRangeIndexedfNV +#define glDepthRangef wrap_glDepthRangef +#define glDepthRangefOES wrap_glDepthRangefOES +#define glDepthRangex wrap_glDepthRangex +#define glDepthRangexOES wrap_glDepthRangexOES +#define glDetachShader wrap_glDetachShader +#define glDisable wrap_glDisable +#define glDisableClientState wrap_glDisableClientState +#define glDisableDriverControlQCOM wrap_glDisableDriverControlQCOM +#define glDisableVertexAttribArray wrap_glDisableVertexAttribArray +#define glDisablei wrap_glDisablei +#define glDisableiEXT wrap_glDisableiEXT +#define glDisableiNV wrap_glDisableiNV +#define glDisableiOES wrap_glDisableiOES +#define glDiscardFramebufferEXT wrap_glDiscardFramebufferEXT +#define glDispatchCompute wrap_glDispatchCompute +#define glDispatchComputeIndirect wrap_glDispatchComputeIndirect +#define glDrawArrays wrap_glDrawArrays +#define glDrawArraysIndirect wrap_glDrawArraysIndirect +#define glDrawArraysInstanced wrap_glDrawArraysInstanced +#define glDrawArraysInstancedANGLE wrap_glDrawArraysInstancedANGLE +#define glDrawArraysInstancedBaseInstanceEXT wrap_glDrawArraysInstancedBaseInstanceEXT +#define glDrawArraysInstancedEXT wrap_glDrawArraysInstancedEXT +#define glDrawArraysInstancedNV wrap_glDrawArraysInstancedNV +#define glDrawBuffers wrap_glDrawBuffers +#define glDrawBuffersEXT wrap_glDrawBuffersEXT +#define glDrawBuffersIndexedEXT wrap_glDrawBuffersIndexedEXT +#define glDrawBuffersNV wrap_glDrawBuffersNV +#define glDrawElements wrap_glDrawElements +#define glDrawElementsBaseVertex wrap_glDrawElementsBaseVertex +#define glDrawElementsBaseVertexEXT wrap_glDrawElementsBaseVertexEXT +#define glDrawElementsBaseVertexOES wrap_glDrawElementsBaseVertexOES +#define glDrawElementsIndirect wrap_glDrawElementsIndirect +#define glDrawElementsInstanced wrap_glDrawElementsInstanced +#define glDrawElementsInstancedANGLE wrap_glDrawElementsInstancedANGLE +#define glDrawElementsInstancedBaseInstanceEXT wrap_glDrawElementsInstancedBaseInstanceEXT +#define glDrawElementsInstancedBaseVertex wrap_glDrawElementsInstancedBaseVertex +#define glDrawElementsInstancedBaseVertexBaseInstanceEXT wrap_glDrawElementsInstancedBaseVertexBaseInstanceEXT +#define glDrawElementsInstancedBaseVertexEXT wrap_glDrawElementsInstancedBaseVertexEXT +#define glDrawElementsInstancedBaseVertexOES wrap_glDrawElementsInstancedBaseVertexOES +#define glDrawElementsInstancedEXT wrap_glDrawElementsInstancedEXT +#define glDrawElementsInstancedNV wrap_glDrawElementsInstancedNV +#define glDrawRangeElements wrap_glDrawRangeElements +#define glDrawRangeElementsBaseVertex wrap_glDrawRangeElementsBaseVertex +#define glDrawRangeElementsBaseVertexEXT wrap_glDrawRangeElementsBaseVertexEXT +#define glDrawRangeElementsBaseVertexOES wrap_glDrawRangeElementsBaseVertexOES +#define glDrawTexfOES wrap_glDrawTexfOES +#define glDrawTexfvOES wrap_glDrawTexfvOES +#define glDrawTexiOES wrap_glDrawTexiOES +#define glDrawTexivOES wrap_glDrawTexivOES +#define glDrawTexsOES wrap_glDrawTexsOES +#define glDrawTexsvOES wrap_glDrawTexsvOES +#define glDrawTexxOES wrap_glDrawTexxOES +#define glDrawTexxvOES wrap_glDrawTexxvOES +#define glEGLImageTargetRenderbufferStorageOES wrap_glEGLImageTargetRenderbufferStorageOES +#define glEGLImageTargetTexture2DOES wrap_glEGLImageTargetTexture2DOES +#define glEnable wrap_glEnable +#define glEnableClientState wrap_glEnableClientState +#define glEnableDriverControlQCOM wrap_glEnableDriverControlQCOM +#define glEnableVertexAttribArray wrap_glEnableVertexAttribArray +#define glEnablei wrap_glEnablei +#define glEnableiEXT wrap_glEnableiEXT +#define glEnableiNV wrap_glEnableiNV +#define glEnableiOES wrap_glEnableiOES +#define glEndConditionalRenderNV wrap_glEndConditionalRenderNV +#define glEndPerfMonitorAMD wrap_glEndPerfMonitorAMD +#define glEndPerfQueryINTEL wrap_glEndPerfQueryINTEL +#define glEndQuery wrap_glEndQuery +#define glEndQueryEXT wrap_glEndQueryEXT +#define glEndTilingQCOM wrap_glEndTilingQCOM +#define glEndTransformFeedback wrap_glEndTransformFeedback +#define glExtGetBufferPointervQCOM wrap_glExtGetBufferPointervQCOM +#define glExtGetBuffersQCOM wrap_glExtGetBuffersQCOM +#define glExtGetFramebuffersQCOM wrap_glExtGetFramebuffersQCOM +#define glExtGetProgramBinarySourceQCOM wrap_glExtGetProgramBinarySourceQCOM +#define glExtGetProgramsQCOM wrap_glExtGetProgramsQCOM +#define glExtGetRenderbuffersQCOM wrap_glExtGetRenderbuffersQCOM +#define glExtGetShadersQCOM wrap_glExtGetShadersQCOM +#define glExtGetTexLevelParameterivQCOM wrap_glExtGetTexLevelParameterivQCOM +#define glExtGetTexSubImageQCOM wrap_glExtGetTexSubImageQCOM +#define glExtGetTexturesQCOM wrap_glExtGetTexturesQCOM +#define glExtIsProgramBinaryQCOM wrap_glExtIsProgramBinaryQCOM +#define glExtTexObjectStateOverrideiQCOM wrap_glExtTexObjectStateOverrideiQCOM +#define glFenceSync wrap_glFenceSync +#define glFenceSyncAPPLE wrap_glFenceSyncAPPLE +#define glFinish wrap_glFinish +#define glFinishFenceNV wrap_glFinishFenceNV +#define glFlush wrap_glFlush +#define glFlushMappedBufferRange wrap_glFlushMappedBufferRange +#define glFlushMappedBufferRangeEXT wrap_glFlushMappedBufferRangeEXT +#define glFogf wrap_glFogf +#define glFogfv wrap_glFogfv +#define glFogx wrap_glFogx +#define glFogxOES wrap_glFogxOES +#define glFogxv wrap_glFogxv +#define glFogxvOES wrap_glFogxvOES +#define glFragmentCoverageColorNV wrap_glFragmentCoverageColorNV +#define glFramebufferParameteri wrap_glFramebufferParameteri +#define glFramebufferRenderbuffer wrap_glFramebufferRenderbuffer +#define glFramebufferRenderbufferOES wrap_glFramebufferRenderbufferOES +#define glFramebufferSampleLocationsfvNV wrap_glFramebufferSampleLocationsfvNV +#define glFramebufferTexture wrap_glFramebufferTexture +#define glFramebufferTexture2D wrap_glFramebufferTexture2D +#define glFramebufferTexture2DMultisampleEXT wrap_glFramebufferTexture2DMultisampleEXT +#define glFramebufferTexture2DMultisampleIMG wrap_glFramebufferTexture2DMultisampleIMG +#define glFramebufferTexture2DOES wrap_glFramebufferTexture2DOES +#define glFramebufferTexture3DOES wrap_glFramebufferTexture3DOES +#define glFramebufferTextureEXT wrap_glFramebufferTextureEXT +#define glFramebufferTextureLayer wrap_glFramebufferTextureLayer +#define glFramebufferTextureMultisampleMultiviewOVR wrap_glFramebufferTextureMultisampleMultiviewOVR +#define glFramebufferTextureMultiviewOVR wrap_glFramebufferTextureMultiviewOVR +#define glFramebufferTextureOES wrap_glFramebufferTextureOES +#define glFrontFace wrap_glFrontFace +#define glFrustumf wrap_glFrustumf +#define glFrustumfOES wrap_glFrustumfOES +#define glFrustumx wrap_glFrustumx +#define glFrustumxOES wrap_glFrustumxOES +#define glGenBuffers wrap_glGenBuffers +#define glGenFencesNV wrap_glGenFencesNV +#define glGenFramebuffers wrap_glGenFramebuffers +#define glGenFramebuffersOES wrap_glGenFramebuffersOES +#define glGenPathsNV wrap_glGenPathsNV +#define glGenPerfMonitorsAMD wrap_glGenPerfMonitorsAMD +#define glGenProgramPipelines wrap_glGenProgramPipelines +#define glGenProgramPipelinesEXT wrap_glGenProgramPipelinesEXT +#define glGenQueries wrap_glGenQueries +#define glGenQueriesEXT wrap_glGenQueriesEXT +#define glGenRenderbuffers wrap_glGenRenderbuffers +#define glGenRenderbuffersOES wrap_glGenRenderbuffersOES +#define glGenSamplers wrap_glGenSamplers +#define glGenTextures wrap_glGenTextures +#define glGenTransformFeedbacks wrap_glGenTransformFeedbacks +#define glGenVertexArrays wrap_glGenVertexArrays +#define glGenVertexArraysOES wrap_glGenVertexArraysOES +#define glGenerateMipmap wrap_glGenerateMipmap +#define glGenerateMipmapOES wrap_glGenerateMipmapOES +#define glGetActiveAttrib wrap_glGetActiveAttrib +#define glGetActiveUniform wrap_glGetActiveUniform +#define glGetActiveUniformBlockName wrap_glGetActiveUniformBlockName +#define glGetActiveUniformBlockiv wrap_glGetActiveUniformBlockiv +#define glGetActiveUniformsiv wrap_glGetActiveUniformsiv +#define glGetAttachedShaders wrap_glGetAttachedShaders +#define glGetAttribLocation wrap_glGetAttribLocation +#define glGetBooleani_v wrap_glGetBooleani_v +#define glGetBooleanv wrap_glGetBooleanv +#define glGetBufferParameteri64v wrap_glGetBufferParameteri64v +#define glGetBufferParameteriv wrap_glGetBufferParameteriv +#define glGetBufferPointerv wrap_glGetBufferPointerv +#define glGetBufferPointervOES wrap_glGetBufferPointervOES +#define glGetClipPlanef wrap_glGetClipPlanef +#define glGetClipPlanefOES wrap_glGetClipPlanefOES +#define glGetClipPlanex wrap_glGetClipPlanex +#define glGetClipPlanexOES wrap_glGetClipPlanexOES +#define glGetCoverageModulationTableNV wrap_glGetCoverageModulationTableNV +#define glGetDebugMessageLog wrap_glGetDebugMessageLog +#define glGetDebugMessageLogKHR wrap_glGetDebugMessageLogKHR +#define glGetDriverControlStringQCOM wrap_glGetDriverControlStringQCOM +#define glGetDriverControlsQCOM wrap_glGetDriverControlsQCOM +#define glGetError wrap_glGetError +#define glGetFenceivNV wrap_glGetFenceivNV +#define glGetFirstPerfQueryIdINTEL wrap_glGetFirstPerfQueryIdINTEL +#define glGetFixedv wrap_glGetFixedv +#define glGetFixedvOES wrap_glGetFixedvOES +#define glGetFloati_vNV wrap_glGetFloati_vNV +#define glGetFloatv wrap_glGetFloatv +#define glGetFragDataIndexEXT wrap_glGetFragDataIndexEXT +#define glGetFragDataLocation wrap_glGetFragDataLocation +#define glGetFramebufferAttachmentParameteriv wrap_glGetFramebufferAttachmentParameteriv +#define glGetFramebufferAttachmentParameterivOES wrap_glGetFramebufferAttachmentParameterivOES +#define glGetFramebufferParameteriv wrap_glGetFramebufferParameteriv +#define glGetGraphicsResetStatus wrap_glGetGraphicsResetStatus +#define glGetGraphicsResetStatusEXT wrap_glGetGraphicsResetStatusEXT +#define glGetGraphicsResetStatusKHR wrap_glGetGraphicsResetStatusKHR +#define glGetImageHandleNV wrap_glGetImageHandleNV +#define glGetInteger64i_v wrap_glGetInteger64i_v +#define glGetInteger64v wrap_glGetInteger64v +#define glGetInteger64vAPPLE wrap_glGetInteger64vAPPLE +#define glGetIntegeri_v wrap_glGetIntegeri_v +#define glGetIntegeri_vEXT wrap_glGetIntegeri_vEXT +#define glGetIntegerv wrap_glGetIntegerv +#define glGetInternalformatSampleivNV wrap_glGetInternalformatSampleivNV +#define glGetInternalformativ wrap_glGetInternalformativ +#define glGetLightfv wrap_glGetLightfv +#define glGetLightxv wrap_glGetLightxv +#define glGetLightxvOES wrap_glGetLightxvOES +#define glGetMaterialfv wrap_glGetMaterialfv +#define glGetMaterialxv wrap_glGetMaterialxv +#define glGetMaterialxvOES wrap_glGetMaterialxvOES +#define glGetMultisamplefv wrap_glGetMultisamplefv +#define glGetNextPerfQueryIdINTEL wrap_glGetNextPerfQueryIdINTEL +#define glGetObjectLabel wrap_glGetObjectLabel +#define glGetObjectLabelEXT wrap_glGetObjectLabelEXT +#define glGetObjectLabelKHR wrap_glGetObjectLabelKHR +#define glGetObjectPtrLabel wrap_glGetObjectPtrLabel +#define glGetObjectPtrLabelKHR wrap_glGetObjectPtrLabelKHR +#define glGetPathCommandsNV wrap_glGetPathCommandsNV +#define glGetPathCoordsNV wrap_glGetPathCoordsNV +#define glGetPathDashArrayNV wrap_glGetPathDashArrayNV +#define glGetPathLengthNV wrap_glGetPathLengthNV +#define glGetPathMetricRangeNV wrap_glGetPathMetricRangeNV +#define glGetPathMetricsNV wrap_glGetPathMetricsNV +#define glGetPathParameterfvNV wrap_glGetPathParameterfvNV +#define glGetPathParameterivNV wrap_glGetPathParameterivNV +#define glGetPathSpacingNV wrap_glGetPathSpacingNV +#define glGetPerfCounterInfoINTEL wrap_glGetPerfCounterInfoINTEL +#define glGetPerfMonitorCounterDataAMD wrap_glGetPerfMonitorCounterDataAMD +#define glGetPerfMonitorCounterInfoAMD wrap_glGetPerfMonitorCounterInfoAMD +#define glGetPerfMonitorCounterStringAMD wrap_glGetPerfMonitorCounterStringAMD +#define glGetPerfMonitorCountersAMD wrap_glGetPerfMonitorCountersAMD +#define glGetPerfMonitorGroupStringAMD wrap_glGetPerfMonitorGroupStringAMD +#define glGetPerfMonitorGroupsAMD wrap_glGetPerfMonitorGroupsAMD +#define glGetPerfQueryDataINTEL wrap_glGetPerfQueryDataINTEL +#define glGetPerfQueryIdByNameINTEL wrap_glGetPerfQueryIdByNameINTEL +#define glGetPerfQueryInfoINTEL wrap_glGetPerfQueryInfoINTEL +#define glGetPointerv wrap_glGetPointerv +#define glGetPointervKHR wrap_glGetPointervKHR +#define glGetProgramBinary wrap_glGetProgramBinary +#define glGetProgramBinaryOES wrap_glGetProgramBinaryOES +#define glGetProgramInfoLog wrap_glGetProgramInfoLog +#define glGetProgramInterfaceiv wrap_glGetProgramInterfaceiv +#define glGetProgramPipelineInfoLog wrap_glGetProgramPipelineInfoLog +#define glGetProgramPipelineInfoLogEXT wrap_glGetProgramPipelineInfoLogEXT +#define glGetProgramPipelineiv wrap_glGetProgramPipelineiv +#define glGetProgramPipelineivEXT wrap_glGetProgramPipelineivEXT +#define glGetProgramResourceIndex wrap_glGetProgramResourceIndex +#define glGetProgramResourceLocation wrap_glGetProgramResourceLocation +#define glGetProgramResourceLocationIndexEXT wrap_glGetProgramResourceLocationIndexEXT +#define glGetProgramResourceName wrap_glGetProgramResourceName +#define glGetProgramResourcefvNV wrap_glGetProgramResourcefvNV +#define glGetProgramResourceiv wrap_glGetProgramResourceiv +#define glGetProgramiv wrap_glGetProgramiv +#define glGetQueryObjecti64vEXT wrap_glGetQueryObjecti64vEXT +#define glGetQueryObjectivEXT wrap_glGetQueryObjectivEXT +#define glGetQueryObjectui64vEXT wrap_glGetQueryObjectui64vEXT +#define glGetQueryObjectuiv wrap_glGetQueryObjectuiv +#define glGetQueryObjectuivEXT wrap_glGetQueryObjectuivEXT +#define glGetQueryiv wrap_glGetQueryiv +#define glGetQueryivEXT wrap_glGetQueryivEXT +#define glGetRenderbufferParameteriv wrap_glGetRenderbufferParameteriv +#define glGetRenderbufferParameterivOES wrap_glGetRenderbufferParameterivOES +#define glGetSamplerParameterIiv wrap_glGetSamplerParameterIiv +#define glGetSamplerParameterIivEXT wrap_glGetSamplerParameterIivEXT +#define glGetSamplerParameterIivOES wrap_glGetSamplerParameterIivOES +#define glGetSamplerParameterIuiv wrap_glGetSamplerParameterIuiv +#define glGetSamplerParameterIuivEXT wrap_glGetSamplerParameterIuivEXT +#define glGetSamplerParameterIuivOES wrap_glGetSamplerParameterIuivOES +#define glGetSamplerParameterfv wrap_glGetSamplerParameterfv +#define glGetSamplerParameteriv wrap_glGetSamplerParameteriv +#define glGetShaderInfoLog wrap_glGetShaderInfoLog +#define glGetShaderPrecisionFormat wrap_glGetShaderPrecisionFormat +#define glGetShaderSource wrap_glGetShaderSource +#define glGetShaderiv wrap_glGetShaderiv +#define glGetString wrap_glGetString +#define glGetStringi wrap_glGetStringi +#define glGetSynciv wrap_glGetSynciv +#define glGetSyncivAPPLE wrap_glGetSyncivAPPLE +#define glGetTexEnvfv wrap_glGetTexEnvfv +#define glGetTexEnviv wrap_glGetTexEnviv +#define glGetTexEnvxv wrap_glGetTexEnvxv +#define glGetTexEnvxvOES wrap_glGetTexEnvxvOES +#define glGetTexGenfvOES wrap_glGetTexGenfvOES +#define glGetTexGenivOES wrap_glGetTexGenivOES +#define glGetTexGenxvOES wrap_glGetTexGenxvOES +#define glGetTexLevelParameterfv wrap_glGetTexLevelParameterfv +#define glGetTexLevelParameteriv wrap_glGetTexLevelParameteriv +#define glGetTexParameterIiv wrap_glGetTexParameterIiv +#define glGetTexParameterIivEXT wrap_glGetTexParameterIivEXT +#define glGetTexParameterIivOES wrap_glGetTexParameterIivOES +#define glGetTexParameterIuiv wrap_glGetTexParameterIuiv +#define glGetTexParameterIuivEXT wrap_glGetTexParameterIuivEXT +#define glGetTexParameterIuivOES wrap_glGetTexParameterIuivOES +#define glGetTexParameterfv wrap_glGetTexParameterfv +#define glGetTexParameteriv wrap_glGetTexParameteriv +#define glGetTexParameterxv wrap_glGetTexParameterxv +#define glGetTexParameterxvOES wrap_glGetTexParameterxvOES +#define glGetTextureHandleNV wrap_glGetTextureHandleNV +#define glGetTextureSamplerHandleNV wrap_glGetTextureSamplerHandleNV +#define glGetTransformFeedbackVarying wrap_glGetTransformFeedbackVarying +#define glGetTranslatedShaderSourceANGLE wrap_glGetTranslatedShaderSourceANGLE +#define glGetUniformBlockIndex wrap_glGetUniformBlockIndex +#define glGetUniformIndices wrap_glGetUniformIndices +#define glGetUniformLocation wrap_glGetUniformLocation +#define glGetUniformfv wrap_glGetUniformfv +#define glGetUniformiv wrap_glGetUniformiv +#define glGetUniformuiv wrap_glGetUniformuiv +#define glGetVertexAttribIiv wrap_glGetVertexAttribIiv +#define glGetVertexAttribIuiv wrap_glGetVertexAttribIuiv +#define glGetVertexAttribPointerv wrap_glGetVertexAttribPointerv +#define glGetVertexAttribfv wrap_glGetVertexAttribfv +#define glGetVertexAttribiv wrap_glGetVertexAttribiv +#define glGetnUniformfv wrap_glGetnUniformfv +#define glGetnUniformfvEXT wrap_glGetnUniformfvEXT +#define glGetnUniformfvKHR wrap_glGetnUniformfvKHR +#define glGetnUniformiv wrap_glGetnUniformiv +#define glGetnUniformivEXT wrap_glGetnUniformivEXT +#define glGetnUniformivKHR wrap_glGetnUniformivKHR +#define glGetnUniformuiv wrap_glGetnUniformuiv +#define glGetnUniformuivKHR wrap_glGetnUniformuivKHR +#define glHint wrap_glHint +#define glInsertEventMarkerEXT wrap_glInsertEventMarkerEXT +#define glInterpolatePathsNV wrap_glInterpolatePathsNV +#define glInvalidateFramebuffer wrap_glInvalidateFramebuffer +#define glInvalidateSubFramebuffer wrap_glInvalidateSubFramebuffer +#define glIsBuffer wrap_glIsBuffer +#define glIsEnabled wrap_glIsEnabled +#define glIsEnabledi wrap_glIsEnabledi +#define glIsEnablediEXT wrap_glIsEnablediEXT +#define glIsEnablediNV wrap_glIsEnablediNV +#define glIsEnablediOES wrap_glIsEnablediOES +#define glIsFenceNV wrap_glIsFenceNV +#define glIsFramebuffer wrap_glIsFramebuffer +#define glIsFramebufferOES wrap_glIsFramebufferOES +#define glIsImageHandleResidentNV wrap_glIsImageHandleResidentNV +#define glIsPathNV wrap_glIsPathNV +#define glIsPointInFillPathNV wrap_glIsPointInFillPathNV +#define glIsPointInStrokePathNV wrap_glIsPointInStrokePathNV +#define glIsProgram wrap_glIsProgram +#define glIsProgramPipeline wrap_glIsProgramPipeline +#define glIsProgramPipelineEXT wrap_glIsProgramPipelineEXT +#define glIsQuery wrap_glIsQuery +#define glIsQueryEXT wrap_glIsQueryEXT +#define glIsRenderbuffer wrap_glIsRenderbuffer +#define glIsRenderbufferOES wrap_glIsRenderbufferOES +#define glIsSampler wrap_glIsSampler +#define glIsShader wrap_glIsShader +#define glIsSync wrap_glIsSync +#define glIsSyncAPPLE wrap_glIsSyncAPPLE +#define glIsTexture wrap_glIsTexture +#define glIsTextureHandleResidentNV wrap_glIsTextureHandleResidentNV +#define glIsTransformFeedback wrap_glIsTransformFeedback +#define glIsVertexArray wrap_glIsVertexArray +#define glIsVertexArrayOES wrap_glIsVertexArrayOES +#define glLabelObjectEXT wrap_glLabelObjectEXT +#define glLightModelf wrap_glLightModelf +#define glLightModelfv wrap_glLightModelfv +#define glLightModelx wrap_glLightModelx +#define glLightModelxOES wrap_glLightModelxOES +#define glLightModelxv wrap_glLightModelxv +#define glLightModelxvOES wrap_glLightModelxvOES +#define glLightf wrap_glLightf +#define glLightfv wrap_glLightfv +#define glLightx wrap_glLightx +#define glLightxOES wrap_glLightxOES +#define glLightxv wrap_glLightxv +#define glLightxvOES wrap_glLightxvOES +#define glLineWidth wrap_glLineWidth +#define glLineWidthx wrap_glLineWidthx +#define glLineWidthxOES wrap_glLineWidthxOES +#define glLinkProgram wrap_glLinkProgram +#define glLoadIdentity wrap_glLoadIdentity +#define glLoadMatrixf wrap_glLoadMatrixf +#define glLoadMatrixx wrap_glLoadMatrixx +#define glLoadMatrixxOES wrap_glLoadMatrixxOES +#define glLoadPaletteFromModelViewMatrixOES wrap_glLoadPaletteFromModelViewMatrixOES +#define glLogicOp wrap_glLogicOp +#define glMakeImageHandleNonResidentNV wrap_glMakeImageHandleNonResidentNV +#define glMakeImageHandleResidentNV wrap_glMakeImageHandleResidentNV +#define glMakeTextureHandleNonResidentNV wrap_glMakeTextureHandleNonResidentNV +#define glMakeTextureHandleResidentNV wrap_glMakeTextureHandleResidentNV +#define glMapBufferOES wrap_glMapBufferOES +#define glMapBufferRange wrap_glMapBufferRange +#define glMapBufferRangeEXT wrap_glMapBufferRangeEXT +#define glMaterialf wrap_glMaterialf +#define glMaterialfv wrap_glMaterialfv +#define glMaterialx wrap_glMaterialx +#define glMaterialxOES wrap_glMaterialxOES +#define glMaterialxv wrap_glMaterialxv +#define glMaterialxvOES wrap_glMaterialxvOES +#define glMatrixIndexPointerOES wrap_glMatrixIndexPointerOES +#define glMatrixLoad3x2fNV wrap_glMatrixLoad3x2fNV +#define glMatrixLoad3x3fNV wrap_glMatrixLoad3x3fNV +#define glMatrixLoadTranspose3x3fNV wrap_glMatrixLoadTranspose3x3fNV +#define glMatrixMode wrap_glMatrixMode +#define glMatrixMult3x2fNV wrap_glMatrixMult3x2fNV +#define glMatrixMult3x3fNV wrap_glMatrixMult3x3fNV +#define glMatrixMultTranspose3x3fNV wrap_glMatrixMultTranspose3x3fNV +#define glMemoryBarrier wrap_glMemoryBarrier +#define glMemoryBarrierByRegion wrap_glMemoryBarrierByRegion +#define glMinSampleShading wrap_glMinSampleShading +#define glMinSampleShadingOES wrap_glMinSampleShadingOES +#define glMultMatrixf wrap_glMultMatrixf +#define glMultMatrixx wrap_glMultMatrixx +#define glMultMatrixxOES wrap_glMultMatrixxOES +#define glMultiDrawArraysEXT wrap_glMultiDrawArraysEXT +#define glMultiDrawArraysIndirectEXT wrap_glMultiDrawArraysIndirectEXT +#define glMultiDrawElementsBaseVertexEXT wrap_glMultiDrawElementsBaseVertexEXT +#define glMultiDrawElementsBaseVertexOES wrap_glMultiDrawElementsBaseVertexOES +#define glMultiDrawElementsEXT wrap_glMultiDrawElementsEXT +#define glMultiDrawElementsIndirectEXT wrap_glMultiDrawElementsIndirectEXT +#define glMultiTexCoord4f wrap_glMultiTexCoord4f +#define glMultiTexCoord4x wrap_glMultiTexCoord4x +#define glMultiTexCoord4xOES wrap_glMultiTexCoord4xOES +#define glNamedFramebufferSampleLocationsfvNV wrap_glNamedFramebufferSampleLocationsfvNV +#define glNormal3f wrap_glNormal3f +#define glNormal3x wrap_glNormal3x +#define glNormal3xOES wrap_glNormal3xOES +#define glNormalPointer wrap_glNormalPointer +#define glObjectLabel wrap_glObjectLabel +#define glObjectLabelKHR wrap_glObjectLabelKHR +#define glObjectPtrLabel wrap_glObjectPtrLabel +#define glObjectPtrLabelKHR wrap_glObjectPtrLabelKHR +#define glOrthof wrap_glOrthof +#define glOrthofOES wrap_glOrthofOES +#define glOrthox wrap_glOrthox +#define glOrthoxOES wrap_glOrthoxOES +#define glPatchParameteri wrap_glPatchParameteri +#define glPatchParameteriEXT wrap_glPatchParameteriEXT +#define glPatchParameteriOES wrap_glPatchParameteriOES +#define glPathCommandsNV wrap_glPathCommandsNV +#define glPathCoordsNV wrap_glPathCoordsNV +#define glPathCoverDepthFuncNV wrap_glPathCoverDepthFuncNV +#define glPathDashArrayNV wrap_glPathDashArrayNV +#define glPathGlyphIndexArrayNV wrap_glPathGlyphIndexArrayNV +#define glPathGlyphIndexRangeNV wrap_glPathGlyphIndexRangeNV +#define glPathGlyphRangeNV wrap_glPathGlyphRangeNV +#define glPathGlyphsNV wrap_glPathGlyphsNV +#define glPathMemoryGlyphIndexArrayNV wrap_glPathMemoryGlyphIndexArrayNV +#define glPathParameterfNV wrap_glPathParameterfNV +#define glPathParameterfvNV wrap_glPathParameterfvNV +#define glPathParameteriNV wrap_glPathParameteriNV +#define glPathParameterivNV wrap_glPathParameterivNV +#define glPathStencilDepthOffsetNV wrap_glPathStencilDepthOffsetNV +#define glPathStencilFuncNV wrap_glPathStencilFuncNV +#define glPathStringNV wrap_glPathStringNV +#define glPathSubCommandsNV wrap_glPathSubCommandsNV +#define glPathSubCoordsNV wrap_glPathSubCoordsNV +#define glPauseTransformFeedback wrap_glPauseTransformFeedback +#define glPixelStorei wrap_glPixelStorei +#define glPointAlongPathNV wrap_glPointAlongPathNV +#define glPointParameterf wrap_glPointParameterf +#define glPointParameterfv wrap_glPointParameterfv +#define glPointParameterx wrap_glPointParameterx +#define glPointParameterxOES wrap_glPointParameterxOES +#define glPointParameterxv wrap_glPointParameterxv +#define glPointParameterxvOES wrap_glPointParameterxvOES +#define glPointSize wrap_glPointSize +#define glPointSizePointerOES wrap_glPointSizePointerOES +#define glPointSizex wrap_glPointSizex +#define glPointSizexOES wrap_glPointSizexOES +#define glPolygonModeNV wrap_glPolygonModeNV +#define glPolygonOffset wrap_glPolygonOffset +#define glPolygonOffsetx wrap_glPolygonOffsetx +#define glPolygonOffsetxOES wrap_glPolygonOffsetxOES +#define glPopDebugGroup wrap_glPopDebugGroup +#define glPopDebugGroupKHR wrap_glPopDebugGroupKHR +#define glPopGroupMarkerEXT wrap_glPopGroupMarkerEXT +#define glPopMatrix wrap_glPopMatrix +#define glPrimitiveBoundingBox wrap_glPrimitiveBoundingBox +#define glPrimitiveBoundingBoxEXT wrap_glPrimitiveBoundingBoxEXT +#define glPrimitiveBoundingBoxOES wrap_glPrimitiveBoundingBoxOES +#define glProgramBinary wrap_glProgramBinary +#define glProgramBinaryOES wrap_glProgramBinaryOES +#define glProgramParameteri wrap_glProgramParameteri +#define glProgramParameteriEXT wrap_glProgramParameteriEXT +#define glProgramPathFragmentInputGenNV wrap_glProgramPathFragmentInputGenNV +#define glProgramUniform1f wrap_glProgramUniform1f +#define glProgramUniform1fEXT wrap_glProgramUniform1fEXT +#define glProgramUniform1fv wrap_glProgramUniform1fv +#define glProgramUniform1fvEXT wrap_glProgramUniform1fvEXT +#define glProgramUniform1i wrap_glProgramUniform1i +#define glProgramUniform1iEXT wrap_glProgramUniform1iEXT +#define glProgramUniform1iv wrap_glProgramUniform1iv +#define glProgramUniform1ivEXT wrap_glProgramUniform1ivEXT +#define glProgramUniform1ui wrap_glProgramUniform1ui +#define glProgramUniform1uiEXT wrap_glProgramUniform1uiEXT +#define glProgramUniform1uiv wrap_glProgramUniform1uiv +#define glProgramUniform1uivEXT wrap_glProgramUniform1uivEXT +#define glProgramUniform2f wrap_glProgramUniform2f +#define glProgramUniform2fEXT wrap_glProgramUniform2fEXT +#define glProgramUniform2fv wrap_glProgramUniform2fv +#define glProgramUniform2fvEXT wrap_glProgramUniform2fvEXT +#define glProgramUniform2i wrap_glProgramUniform2i +#define glProgramUniform2iEXT wrap_glProgramUniform2iEXT +#define glProgramUniform2iv wrap_glProgramUniform2iv +#define glProgramUniform2ivEXT wrap_glProgramUniform2ivEXT +#define glProgramUniform2ui wrap_glProgramUniform2ui +#define glProgramUniform2uiEXT wrap_glProgramUniform2uiEXT +#define glProgramUniform2uiv wrap_glProgramUniform2uiv +#define glProgramUniform2uivEXT wrap_glProgramUniform2uivEXT +#define glProgramUniform3f wrap_glProgramUniform3f +#define glProgramUniform3fEXT wrap_glProgramUniform3fEXT +#define glProgramUniform3fv wrap_glProgramUniform3fv +#define glProgramUniform3fvEXT wrap_glProgramUniform3fvEXT +#define glProgramUniform3i wrap_glProgramUniform3i +#define glProgramUniform3iEXT wrap_glProgramUniform3iEXT +#define glProgramUniform3iv wrap_glProgramUniform3iv +#define glProgramUniform3ivEXT wrap_glProgramUniform3ivEXT +#define glProgramUniform3ui wrap_glProgramUniform3ui +#define glProgramUniform3uiEXT wrap_glProgramUniform3uiEXT +#define glProgramUniform3uiv wrap_glProgramUniform3uiv +#define glProgramUniform3uivEXT wrap_glProgramUniform3uivEXT +#define glProgramUniform4f wrap_glProgramUniform4f +#define glProgramUniform4fEXT wrap_glProgramUniform4fEXT +#define glProgramUniform4fv wrap_glProgramUniform4fv +#define glProgramUniform4fvEXT wrap_glProgramUniform4fvEXT +#define glProgramUniform4i wrap_glProgramUniform4i +#define glProgramUniform4iEXT wrap_glProgramUniform4iEXT +#define glProgramUniform4iv wrap_glProgramUniform4iv +#define glProgramUniform4ivEXT wrap_glProgramUniform4ivEXT +#define glProgramUniform4ui wrap_glProgramUniform4ui +#define glProgramUniform4uiEXT wrap_glProgramUniform4uiEXT +#define glProgramUniform4uiv wrap_glProgramUniform4uiv +#define glProgramUniform4uivEXT wrap_glProgramUniform4uivEXT +#define glProgramUniformHandleui64NV wrap_glProgramUniformHandleui64NV +#define glProgramUniformHandleui64vNV wrap_glProgramUniformHandleui64vNV +#define glProgramUniformMatrix2fv wrap_glProgramUniformMatrix2fv +#define glProgramUniformMatrix2fvEXT wrap_glProgramUniformMatrix2fvEXT +#define glProgramUniformMatrix2x3fv wrap_glProgramUniformMatrix2x3fv +#define glProgramUniformMatrix2x3fvEXT wrap_glProgramUniformMatrix2x3fvEXT +#define glProgramUniformMatrix2x4fv wrap_glProgramUniformMatrix2x4fv +#define glProgramUniformMatrix2x4fvEXT wrap_glProgramUniformMatrix2x4fvEXT +#define glProgramUniformMatrix3fv wrap_glProgramUniformMatrix3fv +#define glProgramUniformMatrix3fvEXT wrap_glProgramUniformMatrix3fvEXT +#define glProgramUniformMatrix3x2fv wrap_glProgramUniformMatrix3x2fv +#define glProgramUniformMatrix3x2fvEXT wrap_glProgramUniformMatrix3x2fvEXT +#define glProgramUniformMatrix3x4fv wrap_glProgramUniformMatrix3x4fv +#define glProgramUniformMatrix3x4fvEXT wrap_glProgramUniformMatrix3x4fvEXT +#define glProgramUniformMatrix4fv wrap_glProgramUniformMatrix4fv +#define glProgramUniformMatrix4fvEXT wrap_glProgramUniformMatrix4fvEXT +#define glProgramUniformMatrix4x2fv wrap_glProgramUniformMatrix4x2fv +#define glProgramUniformMatrix4x2fvEXT wrap_glProgramUniformMatrix4x2fvEXT +#define glProgramUniformMatrix4x3fv wrap_glProgramUniformMatrix4x3fv +#define glProgramUniformMatrix4x3fvEXT wrap_glProgramUniformMatrix4x3fvEXT +#define glPushDebugGroup wrap_glPushDebugGroup +#define glPushDebugGroupKHR wrap_glPushDebugGroupKHR +#define glPushGroupMarkerEXT wrap_glPushGroupMarkerEXT +#define glPushMatrix wrap_glPushMatrix +#define glQueryCounterEXT wrap_glQueryCounterEXT +#define glQueryMatrixxOES wrap_glQueryMatrixxOES +#define glRasterSamplesEXT wrap_glRasterSamplesEXT +#define glReadBuffer wrap_glReadBuffer +#define glReadBufferIndexedEXT wrap_glReadBufferIndexedEXT +#define glReadBufferNV wrap_glReadBufferNV +#define glReadPixels wrap_glReadPixels +#define glReadnPixels wrap_glReadnPixels +#define glReadnPixelsEXT wrap_glReadnPixelsEXT +#define glReadnPixelsKHR wrap_glReadnPixelsKHR +#define glReleaseShaderCompiler wrap_glReleaseShaderCompiler +#define glRenderbufferStorage wrap_glRenderbufferStorage +#define glRenderbufferStorageMultisample wrap_glRenderbufferStorageMultisample +#define glRenderbufferStorageMultisampleANGLE wrap_glRenderbufferStorageMultisampleANGLE +#define glRenderbufferStorageMultisampleAPPLE wrap_glRenderbufferStorageMultisampleAPPLE +#define glRenderbufferStorageMultisampleEXT wrap_glRenderbufferStorageMultisampleEXT +#define glRenderbufferStorageMultisampleIMG wrap_glRenderbufferStorageMultisampleIMG +#define glRenderbufferStorageMultisampleNV wrap_glRenderbufferStorageMultisampleNV +#define glRenderbufferStorageOES wrap_glRenderbufferStorageOES +#define glResolveDepthValuesNV wrap_glResolveDepthValuesNV +#define glResolveMultisampleFramebufferAPPLE wrap_glResolveMultisampleFramebufferAPPLE +#define glResumeTransformFeedback wrap_glResumeTransformFeedback +#define glRotatef wrap_glRotatef +#define glRotatex wrap_glRotatex +#define glRotatexOES wrap_glRotatexOES +#define glSampleCoverage wrap_glSampleCoverage +#define glSampleCoveragex wrap_glSampleCoveragex +#define glSampleCoveragexOES wrap_glSampleCoveragexOES +#define glSampleMaski wrap_glSampleMaski +#define glSamplerParameterIiv wrap_glSamplerParameterIiv +#define glSamplerParameterIivEXT wrap_glSamplerParameterIivEXT +#define glSamplerParameterIivOES wrap_glSamplerParameterIivOES +#define glSamplerParameterIuiv wrap_glSamplerParameterIuiv +#define glSamplerParameterIuivEXT wrap_glSamplerParameterIuivEXT +#define glSamplerParameterIuivOES wrap_glSamplerParameterIuivOES +#define glSamplerParameterf wrap_glSamplerParameterf +#define glSamplerParameterfv wrap_glSamplerParameterfv +#define glSamplerParameteri wrap_glSamplerParameteri +#define glSamplerParameteriv wrap_glSamplerParameteriv +#define glScalef wrap_glScalef +#define glScalex wrap_glScalex +#define glScalexOES wrap_glScalexOES +#define glScissor wrap_glScissor +#define glScissorArrayvNV wrap_glScissorArrayvNV +#define glScissorIndexedNV wrap_glScissorIndexedNV +#define glScissorIndexedvNV wrap_glScissorIndexedvNV +#define glSelectPerfMonitorCountersAMD wrap_glSelectPerfMonitorCountersAMD +#define glSetFenceNV wrap_glSetFenceNV +#define glShadeModel wrap_glShadeModel +#define glShaderBinary wrap_glShaderBinary +#define glShaderSource wrap_glShaderSource +#define glStartTilingQCOM wrap_glStartTilingQCOM +#define glStencilFillPathInstancedNV wrap_glStencilFillPathInstancedNV +#define glStencilFillPathNV wrap_glStencilFillPathNV +#define glStencilFunc wrap_glStencilFunc +#define glStencilFuncSeparate wrap_glStencilFuncSeparate +#define glStencilMask wrap_glStencilMask +#define glStencilMaskSeparate wrap_glStencilMaskSeparate +#define glStencilOp wrap_glStencilOp +#define glStencilOpSeparate wrap_glStencilOpSeparate +#define glStencilStrokePathInstancedNV wrap_glStencilStrokePathInstancedNV +#define glStencilStrokePathNV wrap_glStencilStrokePathNV +#define glStencilThenCoverFillPathInstancedNV wrap_glStencilThenCoverFillPathInstancedNV +#define glStencilThenCoverFillPathNV wrap_glStencilThenCoverFillPathNV +#define glStencilThenCoverStrokePathInstancedNV wrap_glStencilThenCoverStrokePathInstancedNV +#define glStencilThenCoverStrokePathNV wrap_glStencilThenCoverStrokePathNV +#define glSubpixelPrecisionBiasNV wrap_glSubpixelPrecisionBiasNV +#define glTestFenceNV wrap_glTestFenceNV +#define glTexBuffer wrap_glTexBuffer +#define glTexBufferEXT wrap_glTexBufferEXT +#define glTexBufferOES wrap_glTexBufferOES +#define glTexBufferRange wrap_glTexBufferRange +#define glTexBufferRangeEXT wrap_glTexBufferRangeEXT +#define glTexBufferRangeOES wrap_glTexBufferRangeOES +#define glTexCoordPointer wrap_glTexCoordPointer +#define glTexEnvf wrap_glTexEnvf +#define glTexEnvfv wrap_glTexEnvfv +#define glTexEnvi wrap_glTexEnvi +#define glTexEnviv wrap_glTexEnviv +#define glTexEnvx wrap_glTexEnvx +#define glTexEnvxOES wrap_glTexEnvxOES +#define glTexEnvxv wrap_glTexEnvxv +#define glTexEnvxvOES wrap_glTexEnvxvOES +#define glTexGenfOES wrap_glTexGenfOES +#define glTexGenfvOES wrap_glTexGenfvOES +#define glTexGeniOES wrap_glTexGeniOES +#define glTexGenivOES wrap_glTexGenivOES +#define glTexGenxOES wrap_glTexGenxOES +#define glTexGenxvOES wrap_glTexGenxvOES +#define glTexImage2D wrap_glTexImage2D +#define glTexImage3D wrap_glTexImage3D +#define glTexImage3DOES wrap_glTexImage3DOES +#define glTexPageCommitmentEXT wrap_glTexPageCommitmentEXT +#define glTexParameterIiv wrap_glTexParameterIiv +#define glTexParameterIivEXT wrap_glTexParameterIivEXT +#define glTexParameterIivOES wrap_glTexParameterIivOES +#define glTexParameterIuiv wrap_glTexParameterIuiv +#define glTexParameterIuivEXT wrap_glTexParameterIuivEXT +#define glTexParameterIuivOES wrap_glTexParameterIuivOES +#define glTexParameterf wrap_glTexParameterf +#define glTexParameterfv wrap_glTexParameterfv +#define glTexParameteri wrap_glTexParameteri +#define glTexParameteriv wrap_glTexParameteriv +#define glTexParameterx wrap_glTexParameterx +#define glTexParameterxOES wrap_glTexParameterxOES +#define glTexParameterxv wrap_glTexParameterxv +#define glTexParameterxvOES wrap_glTexParameterxvOES +#define glTexStorage1DEXT wrap_glTexStorage1DEXT +#define glTexStorage2D wrap_glTexStorage2D +#define glTexStorage2DEXT wrap_glTexStorage2DEXT +#define glTexStorage2DMultisample wrap_glTexStorage2DMultisample +#define glTexStorage3D wrap_glTexStorage3D +#define glTexStorage3DEXT wrap_glTexStorage3DEXT +#define glTexStorage3DMultisample wrap_glTexStorage3DMultisample +#define glTexStorage3DMultisampleOES wrap_glTexStorage3DMultisampleOES +#define glTexSubImage2D wrap_glTexSubImage2D +#define glTexSubImage3D wrap_glTexSubImage3D +#define glTexSubImage3DOES wrap_glTexSubImage3DOES +#define glTextureStorage1DEXT wrap_glTextureStorage1DEXT +#define glTextureStorage2DEXT wrap_glTextureStorage2DEXT +#define glTextureStorage3DEXT wrap_glTextureStorage3DEXT +#define glTextureViewEXT wrap_glTextureViewEXT +#define glTextureViewOES wrap_glTextureViewOES +#define glTransformFeedbackVaryings wrap_glTransformFeedbackVaryings +#define glTransformPathNV wrap_glTransformPathNV +#define glTranslatef wrap_glTranslatef +#define glTranslatex wrap_glTranslatex +#define glTranslatexOES wrap_glTranslatexOES +#define glUniform1f wrap_glUniform1f +#define glUniform1fv wrap_glUniform1fv +#define glUniform1i wrap_glUniform1i +#define glUniform1iv wrap_glUniform1iv +#define glUniform1ui wrap_glUniform1ui +#define glUniform1uiv wrap_glUniform1uiv +#define glUniform2f wrap_glUniform2f +#define glUniform2fv wrap_glUniform2fv +#define glUniform2i wrap_glUniform2i +#define glUniform2iv wrap_glUniform2iv +#define glUniform2ui wrap_glUniform2ui +#define glUniform2uiv wrap_glUniform2uiv +#define glUniform3f wrap_glUniform3f +#define glUniform3fv wrap_glUniform3fv +#define glUniform3i wrap_glUniform3i +#define glUniform3iv wrap_glUniform3iv +#define glUniform3ui wrap_glUniform3ui +#define glUniform3uiv wrap_glUniform3uiv +#define glUniform4f wrap_glUniform4f +#define glUniform4fv wrap_glUniform4fv +#define glUniform4i wrap_glUniform4i +#define glUniform4iv wrap_glUniform4iv +#define glUniform4ui wrap_glUniform4ui +#define glUniform4uiv wrap_glUniform4uiv +#define glUniformBlockBinding wrap_glUniformBlockBinding +#define glUniformHandleui64NV wrap_glUniformHandleui64NV +#define glUniformHandleui64vNV wrap_glUniformHandleui64vNV +#define glUniformMatrix2fv wrap_glUniformMatrix2fv +#define glUniformMatrix2x3fv wrap_glUniformMatrix2x3fv +#define glUniformMatrix2x3fvNV wrap_glUniformMatrix2x3fvNV +#define glUniformMatrix2x4fv wrap_glUniformMatrix2x4fv +#define glUniformMatrix2x4fvNV wrap_glUniformMatrix2x4fvNV +#define glUniformMatrix3fv wrap_glUniformMatrix3fv +#define glUniformMatrix3x2fv wrap_glUniformMatrix3x2fv +#define glUniformMatrix3x2fvNV wrap_glUniformMatrix3x2fvNV +#define glUniformMatrix3x4fv wrap_glUniformMatrix3x4fv +#define glUniformMatrix3x4fvNV wrap_glUniformMatrix3x4fvNV +#define glUniformMatrix4fv wrap_glUniformMatrix4fv +#define glUniformMatrix4x2fv wrap_glUniformMatrix4x2fv +#define glUniformMatrix4x2fvNV wrap_glUniformMatrix4x2fvNV +#define glUniformMatrix4x3fv wrap_glUniformMatrix4x3fv +#define glUniformMatrix4x3fvNV wrap_glUniformMatrix4x3fvNV +#define glUnmapBuffer wrap_glUnmapBuffer +#define glUnmapBufferOES wrap_glUnmapBufferOES +#define glUseProgram wrap_glUseProgram +#define glUseProgramStages wrap_glUseProgramStages +#define glUseProgramStagesEXT wrap_glUseProgramStagesEXT +#define glValidateProgram wrap_glValidateProgram +#define glValidateProgramPipeline wrap_glValidateProgramPipeline +#define glValidateProgramPipelineEXT wrap_glValidateProgramPipelineEXT +#define glVertexAttrib1f wrap_glVertexAttrib1f +#define glVertexAttrib1fv wrap_glVertexAttrib1fv +#define glVertexAttrib2f wrap_glVertexAttrib2f +#define glVertexAttrib2fv wrap_glVertexAttrib2fv +#define glVertexAttrib3f wrap_glVertexAttrib3f +#define glVertexAttrib3fv wrap_glVertexAttrib3fv +#define glVertexAttrib4f wrap_glVertexAttrib4f +#define glVertexAttrib4fv wrap_glVertexAttrib4fv +#define glVertexAttribBinding wrap_glVertexAttribBinding +#define glVertexAttribDivisor wrap_glVertexAttribDivisor +#define glVertexAttribDivisorANGLE wrap_glVertexAttribDivisorANGLE +#define glVertexAttribDivisorEXT wrap_glVertexAttribDivisorEXT +#define glVertexAttribDivisorNV wrap_glVertexAttribDivisorNV +#define glVertexAttribFormat wrap_glVertexAttribFormat +#define glVertexAttribI4i wrap_glVertexAttribI4i +#define glVertexAttribI4iv wrap_glVertexAttribI4iv +#define glVertexAttribI4ui wrap_glVertexAttribI4ui +#define glVertexAttribI4uiv wrap_glVertexAttribI4uiv +#define glVertexAttribIFormat wrap_glVertexAttribIFormat +#define glVertexAttribIPointer wrap_glVertexAttribIPointer +#define glVertexAttribPointer wrap_glVertexAttribPointer +#define glVertexBindingDivisor wrap_glVertexBindingDivisor +#define glVertexPointer wrap_glVertexPointer +#define glViewport wrap_glViewport +#define glViewportArrayvNV wrap_glViewportArrayvNV +#define glViewportIndexedfNV wrap_glViewportIndexedfNV +#define glViewportIndexedfvNV wrap_glViewportIndexedfvNV +#define glWaitSync wrap_glWaitSync +#define glWaitSyncAPPLE wrap_glWaitSyncAPPLE +#define glWeightPathsNV wrap_glWeightPathsNV +#define glWeightPointerOES wrap_glWeightPointerOES + +#endif // HWUI_GLES_WRAP_ENABLED diff --git a/libs/hwui/renderstate/RenderState.cpp b/libs/hwui/renderstate/RenderState.cpp index 75dcf16123b5..81363d97876c 100644 --- a/libs/hwui/renderstate/RenderState.cpp +++ b/libs/hwui/renderstate/RenderState.cpp @@ -241,7 +241,7 @@ void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) { const Glop::Mesh::Indices& indices = mesh.indices; const Glop::Fill& fill = glop.fill; - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); // --------------------------------------------- // ---------- Program + uniform setup ---------- @@ -286,7 +286,7 @@ void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) { roundedOutRadius); } - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); // -------------------------------- // ---------- Mesh setup ---------- @@ -339,7 +339,7 @@ void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) { // Shader uniforms SkiaShader::apply(*mCaches, fill.skiaShaderData); - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); Texture* texture = (fill.skiaShaderData.skiaShaderType & kBitmap_SkiaShaderType) ? fill.skiaShaderData.bitmapData.bitmapTexture : nullptr; const AutoTexture autoCleanup(texture); @@ -349,7 +349,7 @@ void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) { // ------------------------------------ blend().setFactors(glop.blend.src, glop.blend.dst); - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); // ------------------------------------ // ---------- Actual drawing ---------- @@ -379,7 +379,7 @@ void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) { glDrawArrays(mesh.primitiveMode, 0, mesh.elementCount); } - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); // ----------------------------------- // ---------- Mesh teardown ---------- @@ -391,7 +391,7 @@ void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) { glDisableVertexAttribArray(colorLocation); } - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); } void RenderState::dump() { diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index 6f8d62757437..9b47ffbdc612 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -214,13 +214,13 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo, // node(s) are non client / filler nodes. info.mode = (node.get() == target ? TreeInfo::MODE_FULL : TreeInfo::MODE_RT_ONLY); node->prepareTree(info); - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); } mAnimationContext->runRemainingAnimations(info); - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); freePrefetechedLayers(); - GL_CHECKPOINT(); + GL_CHECKPOINT(MODERATE); if (CC_UNLIKELY(!mNativeWindow.get())) { mCurrentFrameInfo->addFlag(FrameInfoFlags::SkippedFrame); @@ -468,7 +468,7 @@ void CanvasContext::draw() { bool drew = mCanvas->finish(); #endif - GL_CHECKPOINT(); + GL_CHECKPOINT(LOW); // Even if we decided to cancel the frame, from the perspective of jank // metrics the frame was swapped at this point diff --git a/libs/hwui/utils/GLUtils.cpp b/libs/hwui/utils/GLUtils.cpp index 55104de5a9d8..332097593c86 100644 --- a/libs/hwui/utils/GLUtils.cpp +++ b/libs/hwui/utils/GLUtils.cpp @@ -21,10 +21,19 @@ #include "GLUtils.h" +#if DEBUG_OPENGL >= DEBUG_LEVEL_HIGH && !defined(HWUI_GLES_WRAP_ENABLED) +#error Setting DEBUG_OPENGL to HIGH requires setting HWUI_ENABLE_OPENGL_VALIDATION to true in the Android.mk! +#endif + namespace android { namespace uirenderer { bool GLUtils::dumpGLErrors() { +#if DEBUG_OPENGL >= DEBUG_LEVEL_HIGH + // If DEBUG_LEVEL_HIGH is set then every GLES call is already wrapped + // and asserts that there was no error. So this can just return success. + return false; +#else bool errorObserved = false; GLenum status = GL_NO_ERROR; while ((status = glGetError()) != GL_NO_ERROR) { @@ -47,6 +56,7 @@ bool GLUtils::dumpGLErrors() { } } return errorObserved; +#endif } }; // namespace uirenderer diff --git a/libs/hwui/utils/GLUtils.h b/libs/hwui/utils/GLUtils.h index 85a10f94dc4c..b49c1eb1dc05 100644 --- a/libs/hwui/utils/GLUtils.h +++ b/libs/hwui/utils/GLUtils.h @@ -23,17 +23,22 @@ namespace android { namespace uirenderer { + #if DEBUG_OPENGL -#define GL_CHECKPOINT() LOG_ALWAYS_FATAL_IF(GLUtils::dumpGLErrors(),\ - "GL errors! %s:%d", __FILE__, __LINE__) +#define GL_CHECKPOINT(LEVEL) \ + do { if (DEBUG_OPENGL >= DEBUG_LEVEL_##LEVEL) {\ + LOG_ALWAYS_FATAL_IF(GLUtils::dumpGLErrors(),\ + "GL errors! %s:%d", __FILE__, __LINE__);\ + } } while (0) #else -#define GL_CHECKPOINT() +#define GL_CHECKPOINT(LEVEL) #endif class GLUtils { public: /** * Print out any GL errors with ALOGE, returns true if any errors were found. + * You probably want to use GL_CHECKPOINT(LEVEL) instead of calling this directly */ static bool dumpGLErrors(); |