[Title] Added supports for Qualcomm chipsets
authorHaegeun Park <haegeun.park@samsung.com>
Wed, 24 Jul 2013 07:43:35 +0000 (00:43 -0700)
committerHaegeun Park <haegeun.park@samsung.com>
Wed, 24 Jul 2013 07:43:35 +0000 (00:43 -0700)
[Issue#]
[Problem]
[Cause] Fastpath is failed in Qualcomm
[Solution]
- In Fastpath
  -- Supports eglSwapBuffersRegionSEC()
  -- Supports OES_texture_3d extension
  -- Supports AMD_performance_monitor extension (pass-through)
  -- Supports NV_fence extension (pass-through)
  -- Supports QCOM_driver_control extension (pass-through)
  -- Blocks GLES3.0 standard functions
  -- Blocks QCOM_extended_get extension
  -- Blocks QCOM_extended_get2 extension
  -- Disabled checks for stencil masks
- In Tracepath
  -- Supports OES_texture_3d extension
  -- Dumps EGL surface (in draft)

14 files changed:
include/EGL/sym_egl.h
include/GLES2/sym_gl.h
src/coregl_internal.h
src/coregl_trace.c
src/headers/sym_egl.h
src/headers/sym_gl.h
src/modules/fastpath/coregl_fastpath.c
src/modules/fastpath/coregl_fastpath_egl.c
src/modules/fastpath/coregl_fastpath_gl.c
src/modules/fastpath/coregl_fastpath_state.h
src/modules/tracepath/coregl_tracepath.c
src/modules/tracepath/coregl_tracepath.h
src/modules/tracepath/coregl_tracepath_egl.c
src/modules/tracepath/coregl_tracepath_gl.c

index 2b30462ecd41d3ca987e78b5f47970e65a2f3afd..61062d428973279446f65453f97bf4d7f0a8202d 100644 (file)
@@ -7,6 +7,18 @@
 #define _COREGL_EXT_SYMBOL_NOT_DEFINED
 #define _COREGL_EXT_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)   _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)
 #endif
+#ifndef _COREGL_EXT_SYMBOL_ALIAS
+#define _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_ALIAS(FUNC_NAME, ALIAS_NAME)
+#endif
+#ifndef _COREGL_EXT_SYMBOL_FASTPATH_PASS
+#define _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_FASTPATH_PASS(FUNC_NAME)
+#endif
+#ifndef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK
+#define _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_FASTPATH_BLOCK(FUNC_NAME)
+#endif
 
 // Standard EGL APIs
 
@@ -54,14 +66,27 @@ _COREGL_SYMBOL(GL_FALSE, _eng_fn, eglGetProcAddress, (const char* procname))
 
 // Extensions
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLImageKHR, eglCreateImageKHR, (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list))
+_COREGL_EXT_SYMBOL_ALIAS(eglCreateImageKHR, eglCreateImage)
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglDestroyImageKHR, (EGLDisplay dpy, EGLImageKHR image))
+_COREGL_EXT_SYMBOL_ALIAS(eglDestroyImageKHR, eglDestroyImage)
 
 _COREGL_EXT_SYMBOL(GL_TRUE, void*, eglMapImageSEC, (EGLDisplay dpy, EGLImageKHR image, EGLint device_type, EGLint access_option))
+_COREGL_EXT_SYMBOL_ALIAS(eglMapImageSEC, eglMapImage)
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglUnmapImageSEC, (EGLDisplay dpy, EGLImageKHR image, EGLint device_type))
+_COREGL_EXT_SYMBOL_ALIAS(eglUnmapImageSEC, eglUnmapImage)
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglGetImageAttribSEC, (EGLDisplay dpy, EGLImageKHR image, EGLint attribute, EGLint *value))
+_COREGL_EXT_SYMBOL_ALIAS(eglGetImageAttribSEC, eglGetImageAttrib)
 
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglLockSurfaceKHR, (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list))
+_COREGL_EXT_SYMBOL_ALIAS(eglLockSurfaceKHR, eglLockSurface)
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglUnlockSurfaceKHR, (EGLDisplay display, EGLSurface surface))
+_COREGL_EXT_SYMBOL_ALIAS(eglUnlockSurfaceKHR, eglUnlockSurface)
+
+// Verified extensions
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(eglSwapBuffersRegionSEC)
+
+// Blocked extensions
+//_COREGL_EXT_SYMBOL_FASTPATH_BLOCK()
 
 #ifdef _COREGL_EXT_SYMBOL_NOT_DEFINED
 #undef _COREGL_EXT_SYMBOL_NOT_DEFINED
@@ -72,3 +97,19 @@ _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglUnlockSurfaceKHR, (EGLDisplay display
 #undef _COREGL_SYMBOL_NOT_DEFINED
 #undef _COREGL_SYMBOL
 #endif
+
+#ifdef _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_ALIAS
+#endif
+
+#ifdef _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_PASS
+#endif
+
+#ifdef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK
+#endif
+
index 5d5c8c47b7e4f87689c785188688ac2f57513df6..bef9e212b83df05828de2c54a385bcee92bbbfc5 100755 (executable)
@@ -7,6 +7,18 @@
 #define _COREGL_EXT_SYMBOL_NOT_DEFINED
 #define _COREGL_EXT_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)  _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)
 #endif
+#ifndef _COREGL_EXT_SYMBOL_ALIAS
+#define _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_ALIAS(FUNC_NAME, ALIAS_NAME)
+#endif
+#ifndef _COREGL_EXT_SYMBOL_FASTPATH_PASS
+#define _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_FASTPATH_PASS(FUNC_NAME)
+#endif
+#ifndef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK
+#define _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_FASTPATH_BLOCK(FUNC_NAME)
+#endif
 
 /* version 1: */
 _COREGL_SYMBOL(GL_FALSE, void, glActiveTexture, (GLenum texture))
@@ -156,50 +168,155 @@ _COREGL_SYMBOL(GL_FALSE, void, glViewport, (GLint x, GLint y, GLsizei width, GLs
 
 // OES_EGL_image
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glEGLImageTargetTexture2DOES, (GLenum target, GLeglImageOES image))
+_COREGL_EXT_SYMBOL_ALIAS(glEGLImageTargetTexture2DOES, glEGLImageTargetTexture2D)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glEGLImageTargetRenderbufferStorageOES, (GLenum target, GLeglImageOES image))
+_COREGL_EXT_SYMBOL_ALIAS(glEGLImageTargetRenderbufferStorageOES, glEGLImageTargetRenderbufferStorage)
 
 // OES_get_program_binary
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glGetProgramBinaryOES, (GLuint program, GLsizei bufsize, GLsizei *length, GLenum *binaryFormat, void *binary))
+_COREGL_EXT_SYMBOL_ALIAS(glGetProgramBinaryOES, glGetProgramBinary)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramBinaryOES, (GLuint program, GLenum binaryFormat, const void *binary, GLint length))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramBinaryOES, glProgramBinary)
 
 // EXT_separate_shader_objects
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glUseProgramStagesEXT, (GLuint pipeline, GLbitfield stages, GLuint program))
+_COREGL_EXT_SYMBOL_ALIAS(glUseProgramStagesEXT, glUseProgramStages)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glActiveShaderProgramEXT, (GLuint pipeline, GLuint program))
+_COREGL_EXT_SYMBOL_ALIAS(glActiveShaderProgramEXT, glActiveShaderProgram)
 _COREGL_EXT_SYMBOL(GL_TRUE, GLuint, glCreateShaderProgramvEXT, (GLenum type, GLsizei count, const char **strings))
+_COREGL_EXT_SYMBOL_ALIAS(glCreateShaderProgramvEXT, glCreateShaderProgramv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glBindProgramPipelineEXT, (GLuint pipeline))
+_COREGL_EXT_SYMBOL_ALIAS(glBindProgramPipelineEXT, glBindProgramPipeline)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glDeleteProgramPipelinesEXT, (GLsizei n, const GLuint *pipelines))
+_COREGL_EXT_SYMBOL_ALIAS(glDeleteProgramPipelinesEXT, glDeleteProgramPipelines)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glGenProgramPipelinesEXT, (GLsizei n, GLuint *pipelines))
+_COREGL_EXT_SYMBOL_ALIAS(glGenProgramPipelinesEXT, glGenProgramPipelines)
 _COREGL_EXT_SYMBOL(GL_TRUE, GLboolean, glIsProgramPipelineEXT, (GLuint pipeline))
+_COREGL_EXT_SYMBOL_ALIAS(glIsProgramPipelineEXT, glIsProgramPipeline)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramParameteriEXT, (GLuint program, GLenum pname, GLint value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramParameteriEXT, glProgramParameteri)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glGetProgramPipelineivEXT, (GLuint pipeline, GLenum pname, GLint *params))
+_COREGL_EXT_SYMBOL_ALIAS(glGetProgramPipelineivEXT, glGetProgramPipelineiv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform1iEXT, (GLuint program, GLint location, GLint x))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform1iEXT, glProgramUniform1i)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform2iEXT, (GLuint program, GLint location, GLint x, GLint y))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform2iEXT, glProgramUniform2i)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform3iEXT, (GLuint program, GLint location, GLint x, GLint y, GLint z))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform3iEXT, glProgramUniform3i)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform4iEXT, (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform4iEXT, glProgramUniform4i)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform1fEXT, (GLuint program, GLint location, GLfloat x))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform1fEXT, glProgramUniform1f)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform2fEXT, (GLuint program, GLint location, GLfloat x, GLfloat y))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform2fEXT, glProgramUniform2f)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform3fEXT, (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform3fEXT, glProgramUniform3f)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform4fEXT, (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform4fEXT, glProgramUniform4f)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform1ivEXT, (GLuint program, GLint location, GLsizei count, const GLint *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform1ivEXT, glProgramUniform1iv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform2ivEXT, (GLuint program, GLint location, GLsizei count, const GLint *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform2ivEXT, glProgramUniform2iv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform3ivEXT, (GLuint program, GLint location, GLsizei count, const GLint *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform3ivEXT, glProgramUniform3iv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform4ivEXT, (GLuint program, GLint location, GLsizei count, const GLint *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform4ivEXT, glProgramUniform4iv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform1fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform1fvEXT, glProgramUniform1fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform2fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform2fvEXT, glProgramUniform2fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform3fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform3fvEXT, glProgramUniform3fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform4fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform4fvEXT, glProgramUniform4fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniformMatrix2fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniformMatrix2fvEXT, glProgramUniformMatrix2fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniformMatrix3fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniformMatrix3fvEXT, glProgramUniformMatrix3fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniformMatrix4fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniformMatrix4fvEXT, glProgramUniformMatrix4fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glValidateProgramPipelineEXT, (GLuint pipeline))
+_COREGL_EXT_SYMBOL_ALIAS(glValidateProgramPipelineEXT, glValidateProgramPipeline)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glGetProgramPipelineInfoLogEXT, (GLuint pipeline, GLsizei bufSize, GLsizei *length, char *infoLog))
+_COREGL_EXT_SYMBOL_ALIAS(glGetProgramPipelineInfoLogEXT, glGetProgramPipelineInfoLog)
 
 // EXT_multisampled_render_to_texture
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glRenderbufferStorageMultisampleEXT, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height))
+_COREGL_EXT_SYMBOL_ALIAS(glRenderbufferStorageMultisampleEXT, glRenderbufferStorageMultisample)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glFramebufferTexture2DMultisampleEXT, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples))
+_COREGL_EXT_SYMBOL_ALIAS(glFramebufferTexture2DMultisampleEXT, glFramebufferTexture2DMultisample)
 
 // EXT_discard_framebuffer
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glDiscardFramebufferEXT, (GLenum target, GLsizei numAttachments, const GLenum *attachments))
+_COREGL_EXT_SYMBOL_ALIAS(glDiscardFramebufferEXT, glDiscardFramebuffer)
+
+// OES_texture_3d
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glTexImage3DOES, (GLenum target, GLint level, GLenum GLinternalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels))
+_COREGL_EXT_SYMBOL_ALIAS(glTexImage3DOES, glTexImage3D)
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels))
+_COREGL_EXT_SYMBOL_ALIAS(glTexSubImage3DOES, glTexSubImage3D)
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glCopyTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height))
+_COREGL_EXT_SYMBOL_ALIAS(glCopyTexSubImage3DOES, glCopyTexSubImage3D)
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glCompressedTexImage3DOES, (GLenum target, GLint level, GLenum GLinternalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data))
+_COREGL_EXT_SYMBOL_ALIAS(glCompressedTexImage3DOES, glCompressedTexImage3D)
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glCompressedTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data))
+_COREGL_EXT_SYMBOL_ALIAS(glCompressedTexSubImage3DOES, glCompressedTexSubImage3D)
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glFramebufferTexture3DOES, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset))
+_COREGL_EXT_SYMBOL_ALIAS(glFramebufferTexture3DOES, glFramebufferTexture3D)
+
+
+/* Verified extensions */
+
+// AMD_performance_monitor
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorGroupsAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorCountersAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorGroupStringAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorCounterStringAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorCounterInfoAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGenPerfMonitorsAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glDeletePerfMonitorsAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glSelectPerfMonitorCountersAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glBeginPerfMonitorAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glEndPerfMonitorAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorCounterDataAMD)
+
+// NV_fence
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glSetFenceNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glTestFenceNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glFinishFenceNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGenFencesNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glDeleteFencesNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glIsFenceNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetFenceivNV)
+
+// QCOM_driver_control
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetDriverControlsQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetDriverControlStringQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glEnableDriverControlQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glDisableDriverControlQCOM)
+
+
+
+/* Blocked extensions */
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glMapBufferRange)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glUnmapBuffer)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glGetBufferPointerv)
+
+// QCOM_extended_get
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetTexturesQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetBuffersQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetRenderbuffersQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetFramebuffersQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetTexLevelParameterivQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtTexObjectStateOverrideiQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetTexSubImageQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetBufferPointervQCOM)
+
+// QCOM_extended_get2
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetShadersQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetProgramsQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtIsProgramBinaryQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetProgramBinarySourceQCOM)
 
 #ifdef _COREGL_EXT_SYMBOL_NOT_DEFINED
 #undef _COREGL_EXT_SYMBOL_NOT_DEFINED
@@ -211,3 +328,18 @@ _COREGL_EXT_SYMBOL(GL_TRUE, void, glDiscardFramebufferEXT, (GLenum target, GLsiz
 #undef _COREGL_SYMBOL
 #endif
 
+#ifdef _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_ALIAS
+#endif
+
+#ifdef _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_PASS
+#endif
+
+#ifdef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK
+#endif
+
index 9f9edb64e72347e68cd24c45728ffff493fae931..1942c579a346220e3fde4cabf829d264288cc0bb 100644 (file)
@@ -94,11 +94,13 @@ extern int                 trace_api_flag;
 extern int                 trace_api_all_flag;
 extern int                 trace_mem_flag;
 extern int                 trace_mem_all_flag;
+extern int                 trace_surface_flag;
+extern int                 trace_surface_all_flag;
 extern int                 trace_ctx_flag;
 extern int                 trace_ctx_force_flag;
 extern int                 trace_state_flag;
 
-#define USE_TRACEPATH          (trace_api_flag == 1 || trace_ctx_flag == 1 || trace_state_flag == 1 || trace_mem_flag == 1)
+#define USE_TRACEPATH          (trace_api_flag == 1 || trace_ctx_flag == 1 || trace_state_flag == 1 || trace_mem_flag == 1 || trace_surface_flag == 1)
 
 // Environment functions
 extern const char         *get_env_setting(const char *name);
index 9a3c72cf732e08a09339f40e3661d019c93d516a..c72f3984fd73e407fe3c95eec94755c585000373 100644 (file)
@@ -10,6 +10,8 @@ int                 trace_ctx_flag = 0;
 int                 trace_ctx_force_flag = 0;
 int                 trace_mem_flag = 0;
 int                 trace_mem_all_flag = 0;
+int                 trace_surface_flag = 0;
+int                 trace_surface_all_flag = 0;
 int                 trace_state_flag = 0;
 
 General_Trace_List *thread_trace_list = NULL;
index 2b30462ecd41d3ca987e78b5f47970e65a2f3afd..61062d428973279446f65453f97bf4d7f0a8202d 100644 (file)
@@ -7,6 +7,18 @@
 #define _COREGL_EXT_SYMBOL_NOT_DEFINED
 #define _COREGL_EXT_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)   _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)
 #endif
+#ifndef _COREGL_EXT_SYMBOL_ALIAS
+#define _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_ALIAS(FUNC_NAME, ALIAS_NAME)
+#endif
+#ifndef _COREGL_EXT_SYMBOL_FASTPATH_PASS
+#define _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_FASTPATH_PASS(FUNC_NAME)
+#endif
+#ifndef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK
+#define _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_FASTPATH_BLOCK(FUNC_NAME)
+#endif
 
 // Standard EGL APIs
 
@@ -54,14 +66,27 @@ _COREGL_SYMBOL(GL_FALSE, _eng_fn, eglGetProcAddress, (const char* procname))
 
 // Extensions
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLImageKHR, eglCreateImageKHR, (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list))
+_COREGL_EXT_SYMBOL_ALIAS(eglCreateImageKHR, eglCreateImage)
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglDestroyImageKHR, (EGLDisplay dpy, EGLImageKHR image))
+_COREGL_EXT_SYMBOL_ALIAS(eglDestroyImageKHR, eglDestroyImage)
 
 _COREGL_EXT_SYMBOL(GL_TRUE, void*, eglMapImageSEC, (EGLDisplay dpy, EGLImageKHR image, EGLint device_type, EGLint access_option))
+_COREGL_EXT_SYMBOL_ALIAS(eglMapImageSEC, eglMapImage)
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglUnmapImageSEC, (EGLDisplay dpy, EGLImageKHR image, EGLint device_type))
+_COREGL_EXT_SYMBOL_ALIAS(eglUnmapImageSEC, eglUnmapImage)
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglGetImageAttribSEC, (EGLDisplay dpy, EGLImageKHR image, EGLint attribute, EGLint *value))
+_COREGL_EXT_SYMBOL_ALIAS(eglGetImageAttribSEC, eglGetImageAttrib)
 
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglLockSurfaceKHR, (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list))
+_COREGL_EXT_SYMBOL_ALIAS(eglLockSurfaceKHR, eglLockSurface)
 _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglUnlockSurfaceKHR, (EGLDisplay display, EGLSurface surface))
+_COREGL_EXT_SYMBOL_ALIAS(eglUnlockSurfaceKHR, eglUnlockSurface)
+
+// Verified extensions
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(eglSwapBuffersRegionSEC)
+
+// Blocked extensions
+//_COREGL_EXT_SYMBOL_FASTPATH_BLOCK()
 
 #ifdef _COREGL_EXT_SYMBOL_NOT_DEFINED
 #undef _COREGL_EXT_SYMBOL_NOT_DEFINED
@@ -72,3 +97,19 @@ _COREGL_EXT_SYMBOL(GL_TRUE, EGLBoolean, eglUnlockSurfaceKHR, (EGLDisplay display
 #undef _COREGL_SYMBOL_NOT_DEFINED
 #undef _COREGL_SYMBOL
 #endif
+
+#ifdef _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_ALIAS
+#endif
+
+#ifdef _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_PASS
+#endif
+
+#ifdef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK
+#endif
+
index 5d5c8c47b7e4f87689c785188688ac2f57513df6..bef9e212b83df05828de2c54a385bcee92bbbfc5 100644 (file)
@@ -7,6 +7,18 @@
 #define _COREGL_EXT_SYMBOL_NOT_DEFINED
 #define _COREGL_EXT_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)  _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)
 #endif
+#ifndef _COREGL_EXT_SYMBOL_ALIAS
+#define _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_ALIAS(FUNC_NAME, ALIAS_NAME)
+#endif
+#ifndef _COREGL_EXT_SYMBOL_FASTPATH_PASS
+#define _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_FASTPATH_PASS(FUNC_NAME)
+#endif
+#ifndef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK
+#define _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#define _COREGL_EXT_SYMBOL_FASTPATH_BLOCK(FUNC_NAME)
+#endif
 
 /* version 1: */
 _COREGL_SYMBOL(GL_FALSE, void, glActiveTexture, (GLenum texture))
@@ -156,50 +168,155 @@ _COREGL_SYMBOL(GL_FALSE, void, glViewport, (GLint x, GLint y, GLsizei width, GLs
 
 // OES_EGL_image
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glEGLImageTargetTexture2DOES, (GLenum target, GLeglImageOES image))
+_COREGL_EXT_SYMBOL_ALIAS(glEGLImageTargetTexture2DOES, glEGLImageTargetTexture2D)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glEGLImageTargetRenderbufferStorageOES, (GLenum target, GLeglImageOES image))
+_COREGL_EXT_SYMBOL_ALIAS(glEGLImageTargetRenderbufferStorageOES, glEGLImageTargetRenderbufferStorage)
 
 // OES_get_program_binary
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glGetProgramBinaryOES, (GLuint program, GLsizei bufsize, GLsizei *length, GLenum *binaryFormat, void *binary))
+_COREGL_EXT_SYMBOL_ALIAS(glGetProgramBinaryOES, glGetProgramBinary)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramBinaryOES, (GLuint program, GLenum binaryFormat, const void *binary, GLint length))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramBinaryOES, glProgramBinary)
 
 // EXT_separate_shader_objects
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glUseProgramStagesEXT, (GLuint pipeline, GLbitfield stages, GLuint program))
+_COREGL_EXT_SYMBOL_ALIAS(glUseProgramStagesEXT, glUseProgramStages)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glActiveShaderProgramEXT, (GLuint pipeline, GLuint program))
+_COREGL_EXT_SYMBOL_ALIAS(glActiveShaderProgramEXT, glActiveShaderProgram)
 _COREGL_EXT_SYMBOL(GL_TRUE, GLuint, glCreateShaderProgramvEXT, (GLenum type, GLsizei count, const char **strings))
+_COREGL_EXT_SYMBOL_ALIAS(glCreateShaderProgramvEXT, glCreateShaderProgramv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glBindProgramPipelineEXT, (GLuint pipeline))
+_COREGL_EXT_SYMBOL_ALIAS(glBindProgramPipelineEXT, glBindProgramPipeline)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glDeleteProgramPipelinesEXT, (GLsizei n, const GLuint *pipelines))
+_COREGL_EXT_SYMBOL_ALIAS(glDeleteProgramPipelinesEXT, glDeleteProgramPipelines)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glGenProgramPipelinesEXT, (GLsizei n, GLuint *pipelines))
+_COREGL_EXT_SYMBOL_ALIAS(glGenProgramPipelinesEXT, glGenProgramPipelines)
 _COREGL_EXT_SYMBOL(GL_TRUE, GLboolean, glIsProgramPipelineEXT, (GLuint pipeline))
+_COREGL_EXT_SYMBOL_ALIAS(glIsProgramPipelineEXT, glIsProgramPipeline)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramParameteriEXT, (GLuint program, GLenum pname, GLint value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramParameteriEXT, glProgramParameteri)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glGetProgramPipelineivEXT, (GLuint pipeline, GLenum pname, GLint *params))
+_COREGL_EXT_SYMBOL_ALIAS(glGetProgramPipelineivEXT, glGetProgramPipelineiv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform1iEXT, (GLuint program, GLint location, GLint x))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform1iEXT, glProgramUniform1i)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform2iEXT, (GLuint program, GLint location, GLint x, GLint y))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform2iEXT, glProgramUniform2i)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform3iEXT, (GLuint program, GLint location, GLint x, GLint y, GLint z))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform3iEXT, glProgramUniform3i)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform4iEXT, (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform4iEXT, glProgramUniform4i)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform1fEXT, (GLuint program, GLint location, GLfloat x))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform1fEXT, glProgramUniform1f)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform2fEXT, (GLuint program, GLint location, GLfloat x, GLfloat y))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform2fEXT, glProgramUniform2f)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform3fEXT, (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform3fEXT, glProgramUniform3f)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform4fEXT, (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform4fEXT, glProgramUniform4f)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform1ivEXT, (GLuint program, GLint location, GLsizei count, const GLint *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform1ivEXT, glProgramUniform1iv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform2ivEXT, (GLuint program, GLint location, GLsizei count, const GLint *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform2ivEXT, glProgramUniform2iv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform3ivEXT, (GLuint program, GLint location, GLsizei count, const GLint *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform3ivEXT, glProgramUniform3iv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform4ivEXT, (GLuint program, GLint location, GLsizei count, const GLint *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform4ivEXT, glProgramUniform4iv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform1fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform1fvEXT, glProgramUniform1fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform2fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform2fvEXT, glProgramUniform2fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform3fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform3fvEXT, glProgramUniform3fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniform4fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniform4fvEXT, glProgramUniform4fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniformMatrix2fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniformMatrix2fvEXT, glProgramUniformMatrix2fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniformMatrix3fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniformMatrix3fvEXT, glProgramUniformMatrix3fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glProgramUniformMatrix4fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
+_COREGL_EXT_SYMBOL_ALIAS(glProgramUniformMatrix4fvEXT, glProgramUniformMatrix4fv)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glValidateProgramPipelineEXT, (GLuint pipeline))
+_COREGL_EXT_SYMBOL_ALIAS(glValidateProgramPipelineEXT, glValidateProgramPipeline)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glGetProgramPipelineInfoLogEXT, (GLuint pipeline, GLsizei bufSize, GLsizei *length, char *infoLog))
+_COREGL_EXT_SYMBOL_ALIAS(glGetProgramPipelineInfoLogEXT, glGetProgramPipelineInfoLog)
 
 // EXT_multisampled_render_to_texture
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glRenderbufferStorageMultisampleEXT, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height))
+_COREGL_EXT_SYMBOL_ALIAS(glRenderbufferStorageMultisampleEXT, glRenderbufferStorageMultisample)
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glFramebufferTexture2DMultisampleEXT, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples))
+_COREGL_EXT_SYMBOL_ALIAS(glFramebufferTexture2DMultisampleEXT, glFramebufferTexture2DMultisample)
 
 // EXT_discard_framebuffer
 _COREGL_EXT_SYMBOL(GL_TRUE, void, glDiscardFramebufferEXT, (GLenum target, GLsizei numAttachments, const GLenum *attachments))
+_COREGL_EXT_SYMBOL_ALIAS(glDiscardFramebufferEXT, glDiscardFramebuffer)
+
+// OES_texture_3d
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glTexImage3DOES, (GLenum target, GLint level, GLenum GLinternalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels))
+_COREGL_EXT_SYMBOL_ALIAS(glTexImage3DOES, glTexImage3D)
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels))
+_COREGL_EXT_SYMBOL_ALIAS(glTexSubImage3DOES, glTexSubImage3D)
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glCopyTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height))
+_COREGL_EXT_SYMBOL_ALIAS(glCopyTexSubImage3DOES, glCopyTexSubImage3D)
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glCompressedTexImage3DOES, (GLenum target, GLint level, GLenum GLinternalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data))
+_COREGL_EXT_SYMBOL_ALIAS(glCompressedTexImage3DOES, glCompressedTexImage3D)
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glCompressedTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data))
+_COREGL_EXT_SYMBOL_ALIAS(glCompressedTexSubImage3DOES, glCompressedTexSubImage3D)
+_COREGL_EXT_SYMBOL(GL_TRUE, void, glFramebufferTexture3DOES, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset))
+_COREGL_EXT_SYMBOL_ALIAS(glFramebufferTexture3DOES, glFramebufferTexture3D)
+
+
+/* Verified extensions */
+
+// AMD_performance_monitor
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorGroupsAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorCountersAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorGroupStringAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorCounterStringAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorCounterInfoAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGenPerfMonitorsAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glDeletePerfMonitorsAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glSelectPerfMonitorCountersAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glBeginPerfMonitorAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glEndPerfMonitorAMD)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetPerfMonitorCounterDataAMD)
+
+// NV_fence
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glSetFenceNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glTestFenceNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glFinishFenceNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGenFencesNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glDeleteFencesNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glIsFenceNV)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetFenceivNV)
+
+// QCOM_driver_control
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetDriverControlsQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glGetDriverControlStringQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glEnableDriverControlQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_PASS(glDisableDriverControlQCOM)
+
+
+
+/* Blocked extensions */
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glMapBufferRange)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glUnmapBuffer)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glGetBufferPointerv)
+
+// QCOM_extended_get
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetTexturesQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetBuffersQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetRenderbuffersQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetFramebuffersQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetTexLevelParameterivQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtTexObjectStateOverrideiQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetTexSubImageQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetBufferPointervQCOM)
+
+// QCOM_extended_get2
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetShadersQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetProgramsQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtIsProgramBinaryQCOM)
+_COREGL_EXT_SYMBOL_FASTPATH_BLOCK(glExtGetProgramBinarySourceQCOM)
 
 #ifdef _COREGL_EXT_SYMBOL_NOT_DEFINED
 #undef _COREGL_EXT_SYMBOL_NOT_DEFINED
@@ -211,3 +328,18 @@ _COREGL_EXT_SYMBOL(GL_TRUE, void, glDiscardFramebufferEXT, (GLenum target, GLsiz
 #undef _COREGL_SYMBOL
 #endif
 
+#ifdef _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_ALIAS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_ALIAS
+#endif
+
+#ifdef _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_PASS_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_PASS
+#endif
+
+#ifdef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK_NOT_DEFINED
+#undef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK
+#endif
+
index 56744d278ed2b276bf2d55272ca55cb0a146d95a..963a3a320cf05242ee17924e57b4b4b7632138c3 100644 (file)
@@ -44,15 +44,6 @@ _get_texture_states(GLenum pname, GLint *params)
        _orig_fastpath_glActiveTexture(cur_active_tex);
 }
 
-static GLuint
-_get_stencil_max_mask()
-{
-       GLuint stencil_bit = 0;
-
-       _orig_fastpath_glGetIntegerv(GL_STENCIL_BITS, (GLint *)&stencil_bit);
-       return (1 << stencil_bit) - 1;
-}
-
 void
 init_modules_fastpath()
 {
@@ -302,6 +293,7 @@ fastpath_apply_overrides_gl(int enable)
                COREGL_OVERRIDE(fastpath_, glProgramBinaryOES);
                COREGL_OVERRIDE(fastpath_, glProgramParameteriEXT);
                COREGL_OVERRIDE(fastpath_, glEGLImageTargetTexture2DOES);
+               COREGL_OVERRIDE(fastpath_, glFramebufferTexture3DOES);
 
        }
        else
@@ -1054,7 +1046,7 @@ fastpath_init_context_states(GLGlueContext *ctx)
                { \
                   if (initial_ctx->NAME[i] != value[i]) \
                   { \
-                     COREGL_WRN("GL-state '"#NAME"'[%d] value ["PRINTF_CHAR(TYPE)"] is different from SPEC-DEFAULT ["PRINTF_CHAR(TYPE)"]\n", i, ctx->NAME[i], value[i]); \
+                     COREGL_WRN("GL-state '"#NAME"'[%d] value ["PRINTF_CHAR(TYPE)"] is different from SPEC-DEFAULT ["PRINTF_CHAR(TYPE)"]\n", i, initial_ctx->NAME[i], value[i]); \
                   } \
                } \
             } \
index 49b6b88526e94d240e0a5d790dd0739eef6269df..80d7726b7a6e21ad640c0cfffa56c01f42f50f17 100644 (file)
@@ -1324,14 +1324,42 @@ fastpath_eglGetProcAddress(const char* procname)
                goto finish; \
        }
 
+#define _COREGL_EXT_SYMBOL_ALIAS(FUNC_NAME, ALIAS_NAME) \
+   if (strcmp(procname, #ALIAS_NAME) == 0) \
+   { \
+               _eng_fn ret_orig = NULL; \
+               ret_orig = _orig_fastpath_eglGetProcAddress(#FUNC_NAME); \
+               if (ret_orig != NULL) \
+                       ret = (_eng_fn)ovr_##FUNC_NAME; \
+               goto finish; \
+   }
+
 #include "../../headers/sym_egl.h"
 #include "../../headers/sym_gl.h"
 #undef _COREGL_SYMBOL
+#undef _COREGL_EXT_SYMBOL_ALIAS
 
        ret = _orig_fastpath_eglGetProcAddress(procname);
        if (ret != NULL)
        {
-               COREGL_WRN("\E[40;31;1mCOREGL can't support '%s' (unmanaged situation may occur)\E[0m\n", procname);
+
+#define _COREGL_EXT_SYMBOL_FASTPATH_PASS(FUNC_NAME) \
+   if (strcmp(procname, #FUNC_NAME) == 0) \
+      goto finish;
+
+#define _COREGL_EXT_SYMBOL_FASTPATH_BLOCK(FUNC_NAME) \
+   if (strcmp(procname, #FUNC_NAME) == 0) \
+   { \
+      ret = NULL; \
+      goto finish; \
+   }
+
+#include "../../headers/sym_egl.h"
+#include "../../headers/sym_gl.h"
+#undef _COREGL_EXT_SYMBOL_FASTPATH_PASS
+#undef _COREGL_EXT_SYMBOL_FASTPATH_BLOCK
+
+               COREGL_WRN("\E[40;31;1mFASTPATH can't support '%s' (unmanaged situation will be occur!)\E[0m\n", procname);
        }
 
        goto finish;
index 61e52177d4d80b7bcf4d58278fefd20113e6edbd..b4d88fa9f295649ad30f1586e5e32730c580563c 100644 (file)
@@ -394,6 +394,29 @@ finish:
        _COREGL_FASTPATH_FUNC_END();
 }
 
+void
+fastpath_glFramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
+{
+       GLuint real_obj;
+
+       DEFINE_FASTPAH_GL_FUNC();
+       _COREGL_FASTPATH_FUNC_BEGIN();
+       INIT_FASTPATH_GL_FUNC();
+
+       if (GET_REAL_OBJ(GL_OBJECT_TYPE_TEXTURE, texture, &real_obj) != 1)
+       {
+               _set_gl_error(GL_OUT_OF_MEMORY);
+               goto finish;
+       }
+
+       _orig_fastpath_glFramebufferTexture3DOES(target, attachment, textarget, real_obj, level, zoffset);
+
+       goto finish;
+
+finish:
+       _COREGL_FASTPATH_FUNC_END();
+}
+
 void
 fastpath_glFramebufferTexture2DMultisampleEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples)
 {
index e525b15e485b30d66e6bd19fa981852a7309dc44..4a3d70ff10cf3c8e77b51bf6f66ddcc27a0bbc6c 100644 (file)
@@ -75,19 +75,27 @@ GLUE_STATE(GLenum, gl_blend_equation_alpha, 1, 1, SET_1(GL_FUNC_ADD), _sym_glGet
 
 GLUE_STATE(GLenum, gl_stencil_func, 1, 1, SET_1(GL_ALWAYS), _sym_glGetIntegerv(GL_STENCIL_FUNC, (GLint *)value);)
 GLUE_STATE(GLint, gl_stencil_ref, 1, 1, SET_1(0), _sym_glGetIntegerv(GL_STENCIL_REF, (GLint *)value);)
-GLUE_STATE(GLuintmask, gl_stencil_value_mask, 1, 1, SET_1(_get_stencil_max_mask()), _sym_glGetIntegerv(GL_STENCIL_VALUE_MASK, (GLint *)value);)
+GLUE_STATE(GLuintmask, gl_stencil_value_mask, 1, 1,
+           _sym_glGetIntegerv(GL_STENCIL_VALUE_MASK, (GLint *)value); /* DEFAULT NOT EFFECT */,
+           _sym_glGetIntegerv(GL_STENCIL_VALUE_MASK, (GLint *)value);)
 GLUE_STATE(GLenum, gl_stencil_fail, 1, 1, SET_1(GL_KEEP), _sym_glGetIntegerv(GL_STENCIL_FAIL, (GLint *)value);)
 GLUE_STATE(GLenum, gl_stencil_pass_depth_fail, 1, 1, SET_1(GL_KEEP), _sym_glGetIntegerv(GL_STENCIL_PASS_DEPTH_FAIL, (GLint *)value);)
 GLUE_STATE(GLenum, gl_stencil_pass_depth_pass, 1, 1, SET_1(GL_KEEP), _sym_glGetIntegerv(GL_STENCIL_PASS_DEPTH_PASS, (GLint *)value);)
-GLUE_STATE(GLuintmask, gl_stencil_writemask, 1, 1, SET_1(_get_stencil_max_mask()), _sym_glGetIntegerv(GL_STENCIL_WRITEMASK, (GLint *)value);)
+GLUE_STATE(GLuintmask, gl_stencil_writemask, 1, 1,
+           _sym_glGetIntegerv(GL_STENCIL_WRITEMASK, (GLint *)value); /* DEFAULT NOT EFFECT */,
+           _sym_glGetIntegerv(GL_STENCIL_WRITEMASK, (GLint *)value);)
 
 GLUE_STATE(GLenum, gl_stencil_back_func, 1, 1, SET_1(GL_ALWAYS), _sym_glGetIntegerv(GL_STENCIL_BACK_FUNC, (GLint *)value);)
 GLUE_STATE(GLint, gl_stencil_back_ref, 1, 1, SET_1(0), _sym_glGetIntegerv(GL_STENCIL_BACK_REF, (GLint *)value);)
-GLUE_STATE(GLuintmask, gl_stencil_back_value_mask, 1, 1, SET_1(_get_stencil_max_mask()), _sym_glGetIntegerv(GL_STENCIL_BACK_VALUE_MASK, (GLint *)value);)
+GLUE_STATE(GLuintmask, gl_stencil_back_value_mask, 1, 1,
+           _sym_glGetIntegerv(GL_STENCIL_BACK_VALUE_MASK, (GLint *)value); /* DEFAULT NOT EFFECT */,
+           _sym_glGetIntegerv(GL_STENCIL_BACK_VALUE_MASK, (GLint *)value);)
 GLUE_STATE(GLenum, gl_stencil_back_fail, 1, 1, SET_1(GL_KEEP), _sym_glGetIntegerv(GL_STENCIL_BACK_FAIL, (GLint *)value);)
 GLUE_STATE(GLenum, gl_stencil_back_pass_depth_fail, 1, 1, SET_1(GL_KEEP), _sym_glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_FAIL, (GLint *)value);)
 GLUE_STATE(GLenum, gl_stencil_back_pass_depth_pass, 1, 1, SET_1(GL_KEEP), _sym_glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_PASS, (GLint *)value);)
-GLUE_STATE(GLuintmask, gl_stencil_back_writemask, 1, 1, SET_1(_get_stencil_max_mask()), _sym_glGetIntegerv(GL_STENCIL_BACK_WRITEMASK, (GLint *)value);)
+GLUE_STATE(GLuintmask, gl_stencil_back_writemask, 1, 1,
+           _sym_glGetIntegerv(GL_STENCIL_BACK_WRITEMASK, (GLint *)value); /* DEFAULT NOT EFFECT */,
+           _sym_glGetIntegerv(GL_STENCIL_BACK_WRITEMASK, (GLint *)value);)
 
 GLUE_STATE(GLint, gl_stencil_clear_value, 1, 1, SET_1(0), _sym_glGetIntegerv(GL_STENCIL_CLEAR_VALUE, (GLint *)value);)
 
index e24ad147ed75db154bae72f72372db9dede2907c..f9efa315ade83753edbecfba8084eceeb99afefc 100644 (file)
@@ -7,6 +7,8 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+#include <dlfcn.h>
+
 #define _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)     RET_TYPE (*_orig_tracepath_##FUNC_NAME) PARAM_LIST = NULL;
 #include "../../headers/sym.h"
 #undef _COREGL_SYMBOL
@@ -44,6 +46,16 @@ struct _Memuse_Data
        int                          remove_count;
 };
 
+struct _Surface_Data
+{
+       struct _Trace_Data          trace_data;
+
+       GLDisplay                    display;
+       GLSurface                    surface;
+       GLContext                    context;
+       int                          dump_count;
+};
+
 typedef struct _GLGlueFakeContext
 {
        GLuint gl_num_tex_units[1];
@@ -63,6 +75,9 @@ struct timeval     traced_other_elapsed_time = TIMEVAL_INIT;
 Mutex               mtd_access_mutex = MUTEX_INITIALIZER;
 Memuse_Data       **mtd_table;
 
+Mutex               std_access_mutex = MUTEX_INITIALIZER;
+Surface_Data      **std_table;
+
 static void
 _get_texture_states(GLenum pname, GLint *params)
 {
@@ -100,6 +115,10 @@ init_modules_tracepath()
        trace_mem_flag = atoi(get_env_setting("COREGL_TRACE_MEM"));
        trace_mem_all_flag = atoi(get_env_setting("COREGL_TRACE_MEM_ALL"));
 #endif
+#ifdef COREGL_TRACEPATH_TRACE_SURFACE_INFO
+       trace_surface_flag = atoi(get_env_setting("COREGL_TRACE_SURFACE"));
+       trace_surface_all_flag = atoi(get_env_setting("COREGL_TRACE_SURFACE_ALL"));
+#endif
 #ifdef COREGL_TRACEPATH_TRACE_CONTEXT_INFO
        trace_ctx_flag = atoi(get_env_setting("COREGL_TRACE_CTX"));
        trace_ctx_force_flag = atoi(get_env_setting("COREGL_TRACE_CTX_FORCE"));
@@ -127,6 +146,10 @@ init_modules_tracepath()
                        COREGL_LOG("\E[40;35;1m(MEM)\E[0m ");
                        if (trace_mem_all_flag == 1) COREGL_LOG("\E[40;35;1m(MEM-ALL)\E[0m ");
                }
+               if (trace_surface_flag == 1) {
+                       COREGL_LOG("\E[40;36;1m(SURFACE)\E[0m ");
+                       if (trace_surface_all_flag == 1) COREGL_LOG("\E[40;36;1m(SURFACE-ALL)\E[0m ");
+               }
 
                COREGL_LOG("\E[40;37;1menabled\E[0m\n");
        }
@@ -848,3 +871,286 @@ finish:
        return;
 }
 
+#include "png.h"
+
+void *png_lib_handle = NULL;
+
+png_structp (*dl_png_create_write_struct) (png_const_charp user_png_ver,
+                                              png_voidp error_ptr,
+                                              png_error_ptr error_fn,
+                                              png_error_ptr warn_fn);
+
+
+void (*dl_png_destroy_write_struct) (png_structpp png_ptr_ptr,
+                                        png_infopp info_ptr_ptr);
+
+
+png_infop (*dl_png_create_info_struct) (png_structp png_ptr);
+
+void (*dl_png_init_io) (png_structp png_ptr,
+                          png_FILE_p fp);
+
+
+void (*dl_png_set_IHDR) (png_structp png_ptr,
+                           png_infop info_ptr,
+                           png_uint_32 width,
+                           png_uint_32 height,
+                           int bit_depth,
+                           int color_type,
+                           int interlace_method,
+                           int compression_method,
+                           int filter_method);
+
+void (*dl_png_set_bKGD) (png_structp png_ptr,
+                           png_infop info_ptr,
+                           png_color_16p background);
+
+void (*dl_png_set_bgr) (png_structp png_ptr);
+
+void (*dl_png_write_info) (png_structp png_ptr,
+                             png_infop info_ptr);
+
+void (*dl_png_write_image) (png_structp png_ptr,
+                              png_bytepp image);
+
+void (*dl_png_write_end) (png_structp png_ptr,
+                            png_infop info_ptr);
+
+void
+tracepath_surface_trace_add(const char *desc, GLDisplay dpy, GLSurface surf, GLContext ctx)
+{
+       Surface_Data *std = NULL;
+
+       if (trace_surface_flag == 1)
+       {
+               AST(mutex_lock(&std_access_mutex) == 1);
+
+               if (std_table == NULL)
+               {
+                       std_table = (Surface_Data **)calloc(1, sizeof(Surface_Data *) * MAX_TRACE_TABLE_SIZE);
+               }
+
+               std = (Surface_Data *)_get_trace_data((Trace_Data **)std_table, sizeof(Surface_Data), desc);
+
+               AST(std != NULL);
+
+      std->display = dpy;
+      std->surface = surf;
+      std->context = ctx;
+
+               AST(mutex_unlock(&std_access_mutex) == 1);
+
+       }
+
+}
+
+void
+tracepath_surface_trace_remove(const char *desc)
+{
+       Surface_Data *std = NULL;
+
+       if (trace_surface_flag == 1)
+       {
+               AST(mutex_lock(&std_access_mutex) == 1);
+
+               if (std_table == NULL)
+               {
+                       std_table = (Surface_Data **)calloc(1, sizeof(Surface_Data *) * MAX_TRACE_TABLE_SIZE);
+               }
+
+               std = (Surface_Data *)_get_trace_data((Trace_Data **)std_table, sizeof(Surface_Data), desc);
+
+               AST(std != NULL);
+
+               AST(mutex_unlock(&std_access_mutex) == 1);
+
+       }
+}
+
+static void
+_dump_surface(Surface_Data *sdata)
+{
+   if (!png_lib_handle)
+       {
+      png_lib_handle = dlopen("libpng.so.3", RTLD_NOW);
+
+
+      dl_png_create_write_struct = dlsym(png_lib_handle, "png_create_write_struct");
+      dl_png_destroy_write_struct = dlsym(png_lib_handle, "png_destroy_write_struct");
+      dl_png_create_info_struct = dlsym(png_lib_handle, "png_create_info_struct");
+
+      dl_png_init_io = dlsym(png_lib_handle, "png_init_io");
+
+      dl_png_set_IHDR = dlsym(png_lib_handle, "png_set_IHDR");
+      dl_png_set_bKGD = dlsym(png_lib_handle, "png_set_bKGD");
+      dl_png_set_bgr = dlsym(png_lib_handle, "png_set_bgr");
+
+      dl_png_write_info = dlsym(png_lib_handle, "png_write_info");
+      dl_png_write_image = dlsym(png_lib_handle, "png_write_image");
+      dl_png_write_end = dlsym(png_lib_handle, "png_write_end");
+       }
+
+   {
+      png_struct *png;
+      png_info *info;
+      png_byte **rows;
+      png_color_16 black;
+      char name[200];
+
+      if (!png_lib_handle ||
+         dl_png_create_write_struct == NULL ||
+         dl_png_destroy_write_struct == NULL ||
+         dl_png_create_info_struct == NULL ||
+         dl_png_init_io == NULL ||
+         dl_png_set_IHDR == NULL ||
+         dl_png_set_bKGD == NULL ||
+         dl_png_set_bgr == NULL ||
+         dl_png_write_info == NULL ||
+         dl_png_write_image == NULL ||
+         dl_png_write_end == NULL)
+      {
+         COREGL_ERR("Can't trace surface : Failed to use libpng (recommend : 1.2.50-3.4)");
+         return;
+      }
+
+      EGLint width, height;
+      _orig_tracepath_eglQuerySurface(sdata->display, sdata->surface, EGL_WIDTH, &width);
+      _orig_tracepath_eglQuerySurface(sdata->display, sdata->surface, EGL_HEIGHT, &height);
+
+      unsigned char *data;
+      data = (unsigned char *)malloc(width * height * 4 * sizeof(unsigned char));
+      _orig_tracepath_glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data);
+
+      sprintf(name, "%s_%d.png", sdata->trace_data.name, sdata->dump_count);
+      sdata->dump_count++;
+
+      FILE *file = fopen (name, "wb");
+
+      if (file == NULL)
+      {
+         COREGL_ERR("Can't trace surface : Failed to create png file");
+         return;
+      }
+
+      rows = malloc(height * sizeof(png_byte *));
+      if (rows == NULL)
+      {
+         COREGL_ERR("Can't trace surface : Failed to allocate memory");
+         return;
+      }
+
+      for (int i = 0; i < height; i++)
+      {
+          rows[i] = data + (height - i - 1) * (width * 4);
+      }
+
+      png = dl_png_create_write_struct(PNG_LIBPNG_VER_STRING,
+                                       NULL,
+                                       NULL,
+                                       NULL);
+      if (png == NULL)
+      {
+         COREGL_ERR("Can't trace surface : Failed to create write structure of png file");
+         return;
+      }
+
+      info = dl_png_create_info_struct(png);
+      if (info == NULL)
+      {
+         fclose (file);
+         dl_png_destroy_write_struct (&png, NULL);
+         COREGL_ERR("Can't trace surface : Failed to create info structure of png file");
+         return;
+      }
+
+      dl_png_init_io(png, file);
+
+      dl_png_set_IHDR(png, info,
+          width, height, 8,
+          PNG_COLOR_TYPE_RGBA,
+          PNG_INTERLACE_NONE,
+          PNG_COMPRESSION_TYPE_DEFAULT,
+          PNG_FILTER_TYPE_DEFAULT);
+
+      black.red = 0x00;
+      black.green = 0x00;
+      black.blue = 0x00;
+      dl_png_set_bKGD(png, info, &black);
+
+      //dl_png_set_bgr(png);
+
+      dl_png_write_info(png, info);
+
+      dl_png_write_image(png, rows);
+
+      dl_png_write_end(png, info);
+
+      dl_png_destroy_write_struct(&png, &info);
+
+      free(rows);
+      fclose(file);
+   }
+
+}
+
+
+void
+tracepath_surface_trace(int force_output, const char *position)
+{
+       GLThreadState *tstate = NULL;
+       MY_MODULE_TSTATE *tstate_tm = NULL;
+   int i;
+
+       if (trace_surface_flag != 1)
+       {
+               goto finish;
+       }
+
+       tstate = get_current_thread_state();
+
+       if (tstate == NULL)
+       {
+               init_new_thread_state();
+
+               tstate = get_current_thread_state();
+               AST(tstate != NULL);
+       }
+
+       GET_MY_TSTATE(tstate_tm, tstate);
+       if (tstate_tm == NULL) return;
+
+       if (std_table != NULL)
+       {
+               for (i = 0; i < MAX_TRACE_TABLE_SIZE; i++)
+               {
+                       if (std_table[i] != NULL)
+                       {
+                               Surface_Data *current = std_table[i];
+
+                               while (current != NULL)
+                               {
+               {
+                  if (current->surface != EGL_NO_SURFACE && current->display != EGL_NO_DISPLAY && current->context != EGL_NO_CONTEXT)
+                  {
+                     _orig_tracepath_eglMakeCurrent(current->display, current->surface, current->surface, current->context);
+
+                     _dump_surface(current);
+//                     printf("THE PNG dumped SURF=%p (dpy=%p, surf=%p)\n", current->surface, current->display, current->context);
+                  }
+               }
+
+                                       current = (Surface_Data *)current->trace_data.next;
+                               }
+                       }
+               }
+
+      _orig_tracepath_eglMakeCurrent(tstate_tm->ctx->dpy, tstate_tm->surf_draw, tstate_tm->surf_read, tstate_tm->ctx->handle);
+
+       }
+
+   goto finish;
+
+   finish:
+      return;
+}
+
index 09bc995ccac9ac1d9cf29ef64dd85fe081cf4d91..4003d96ac6d3b86b25773999cc67e069b2b84069 100644 (file)
@@ -32,6 +32,7 @@
 #define COREGL_TRACEPATH_TRACE_STATE_INFO     // Glue-context state info\r
 #define COREGL_TRACEPATH_TRACE_APICALL_INFO   // API call frequency info\r
 #define COREGL_TRACEPATH_TRACE_MEMUSE_INFO   // Memory usage info\r
+#define COREGL_TRACEPATH_TRACE_SURFACE_INFO  // Surface dump info\r
 #endif
 
 #ifdef COREGL_TRACEPATH_TRACE_APICALL_INFO\r
 # define _COREGL_TRACE_MEM_OUTPUT(force_output)\r
 #endif
 \r
+#ifdef COREGL_TRACEPATH_TRACE_SURFACE_INFO\r
+# define _COREGL_TRACE_SURFACE(force_output, position) \\r
+   tracepath_surface_trace(force_output, position);\r
+#else
+# define _COREGL_TRACE_SURFACE(force_output, position)\r
+#endif
+\r
 #define _COREGL_TRACEPATH_FUNC_BEGIN() \\r
        if (unlikely(trace_api_flag == 1)) \
                _COREGL_TRACE_API_BEGIN(__func__, NULL, 1);
@@ -71,6 +79,7 @@
 typedef struct _Trace_Data Trace_Data;
 typedef struct _Apicall_Data Apicall_Data;\r
 typedef struct _Memuse_Data Memuse_Data;\r
+typedef struct _Surface_Data Surface_Data;\r
 \r
 #define MTD_GLBUF_HASH_ARRAY 10000\r
 \r
@@ -128,6 +137,10 @@ extern void                tracepath_mem_trace_add(const char *desc, int alloc_s
 extern void                tracepath_mem_trace_remove(const char *desc, int alloc_size);\r
 extern void                tracepath_mem_trace_output(int force_output);\r
 \r
+extern void                tracepath_surface_trace_add(const char *desc, GLDisplay dpy, GLSurface surf, GLContext ctx);\r
+extern void                tracepath_surface_trace_remove(const char *desc);\r
+extern void                tracepath_surface_trace(int force_output, const char *position);\r
+\r
 extern void                tracepath_glbuf_clear(Glbuf_Data **glbuf);\r
 \r
 #endif // COREGL_TRACEPATH_H\r
index 4eb34e37e6bcfa7c1c114192f9c2d3a2666f738c..3478220bce038dc5b15dc5925f88ed2345042a93 100644 (file)
@@ -451,6 +451,13 @@ tracepath_eglDestroySurface(EGLDisplay dpy, EGLSurface surface)
 
 finish:
        _COREGL_TRACEPATH_FUNC_END();
+#ifdef COREGL_TRACEPATH_TRACE_SURFACE_INFO
+   {
+      char name[256];
+      sprintf(name, "EGLSURFACE_%p", surface);
+      tracepath_surface_trace_remove(name);
+   }
+#endif // COREGL_TRACEPATH_TRACE_SURFACE_INFO
        return ret;
 }
 
@@ -694,7 +701,7 @@ finish:
                if (oldctx != NULL)
                        tracepath_remove_context(oldctx->handle);
 
-               tstate->surf_draw = draw;
+      tstate->surf_draw = draw;
                tstate->surf_read = read;
        }
 #ifdef COREGL_TRACEPATH_TRACE_STATE_INFO
@@ -715,6 +722,13 @@ finish:
                }
        }
 #endif // COREGL_TRACEPATH_TRACE_CONTEXT_INFO
+#ifdef COREGL_TRACEPATH_TRACE_SURFACE_INFO
+   {
+      char name[256];
+      sprintf(name, "EGLSURFACE_%p", draw);
+      tracepath_surface_trace_add(name, dpy, draw, ctx);
+   }
+#endif // COREGL_TRACEPATH_TRACE_SURFACE_INFO
        return ret;
 }
 
@@ -816,6 +830,7 @@ finish:
        _COREGL_TRACEPATH_FUNC_END();
        _COREGL_TRACE_API_OUTPUT(0);
        _COREGL_TRACE_MEM_OUTPUT(0);
+       _COREGL_TRACE_SURFACE(0, "SWAPBUFFERS");
        return ret;
 }
 
@@ -850,14 +865,25 @@ tracepath_eglGetProcAddress(const char* procname)
                goto finish; \
        }
 
+#define _COREGL_EXT_SYMBOL_ALIAS(FUNC_NAME, ALIAS_NAME) \
+   if (strcmp(procname, #ALIAS_NAME) == 0) \
+   { \
+               _eng_fn ret_orig = NULL; \
+               ret_orig = _orig_tracepath_eglGetProcAddress(#FUNC_NAME); \
+               if (ret_orig != NULL) \
+                       ret = (_eng_fn)ovr_##FUNC_NAME; \
+               goto finish; \
+   }
+
 #include "../../headers/sym_egl.h"
 #include "../../headers/sym_gl.h"
 #undef _COREGL_SYMBOL
+#undef _COREGL_EXT_SYMBOL_ALIAS
 
        ret = _orig_tracepath_eglGetProcAddress(procname);
        if (ret != NULL)
        {
-               COREGL_WRN("\E[40;31;1mCOREGL can't support '%s' (tracing for this function will be ignored)\E[0m\n", procname);
+               COREGL_WRN("\E[40;31;1mTRACEPATH can't support '%s' (tracing for this function will be ignored)\E[0m\n", procname);
        }
 
        goto finish;
index 16405c956ff4e6c39c778ccf7549b73dabeaabd7..2ccba309390b3aab55cf86852cc9f9e330bb40d8 100644 (file)
@@ -2575,3 +2575,76 @@ finish:
        _COREGL_TRACEPATH_FUNC_END();
 }
 
+void
+tracepath_glTexImage3DOES(GLenum target, GLint level, GLenum GLinternalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
+{
+       _COREGL_TRACEPATH_FUNC_BEGIN();
+       _orig_tracepath_glTexImage3DOES(target, level, GLinternalFormat, width, height, depth, border, format, type, pixels);
+
+       goto finish;
+
+finish:
+       _COREGL_TRACEPATH_FUNC_END();
+}
+
+void
+tracepath_glTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels)
+{
+       _COREGL_TRACEPATH_FUNC_BEGIN();
+       _orig_tracepath_glTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
+
+       goto finish;
+
+finish:
+       _COREGL_TRACEPATH_FUNC_END();
+}
+
+void
+tracepath_glCopyTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+       _COREGL_TRACEPATH_FUNC_BEGIN();
+       _orig_tracepath_glCopyTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, x, y, width, height);
+
+       goto finish;
+
+finish:
+       _COREGL_TRACEPATH_FUNC_END();
+}
+
+void
+tracepath_glCompressedTexImage3DOES(GLenum target, GLint level, GLenum GLinternalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data)
+{
+       _COREGL_TRACEPATH_FUNC_BEGIN();
+       _orig_tracepath_glCompressedTexImage3DOES(target, level, GLinternalformat, width, height, depth, border, imageSize, data);
+
+       goto finish;
+
+finish:
+       _COREGL_TRACEPATH_FUNC_END();
+}
+
+void
+tracepath_glCompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data)
+{
+       _COREGL_TRACEPATH_FUNC_BEGIN();
+       _orig_tracepath_glCompressedTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+
+       goto finish;
+
+finish:
+       _COREGL_TRACEPATH_FUNC_END();
+}
+
+void
+tracepath_glFramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
+{
+       _COREGL_TRACEPATH_FUNC_BEGIN();
+       _orig_tracepath_glFramebufferTexture3DOES(target, attachment, textarget, texture, level, zoffset);
+
+       goto finish;
+
+finish:
+       _COREGL_TRACEPATH_FUNC_END();
+}
+
+