Merge lp:~marcoil/glproxy/extensions-cleanup into lp:glproxy

Proposed by Marc Ordinas i Llopis
Status: Merged
Merged at revision: 34
Proposed branch: lp:~marcoil/glproxy/extensions-cleanup
Merge into: lp:glproxy
Diff against target: 1103 lines (+141/-690)
10 files modified
include/GL/gl_proxy.h (+6/-1)
include/GL/glext_proxy.h (+3/-129)
include/GL/glx_proxy.h (+3/-1)
include/GL/glxext_proxy.h (+3/-173)
src/egldef.h (+10/-1)
src/gl_proxy.c (+84/-24)
src/glext_proxy.c (+0/-168)
src/glx_proxy.c (+3/-178)
tests/tfp/egl_tfp.c (+15/-6)
tests/tfp/glx_tfp.c (+14/-9)
To merge this branch: bzr merge lp:~marcoil/glproxy/extensions-cleanup
Reviewer Review Type Date Requested Status
Alexandros Frantzis Approve
Review via email: mp+79724@code.launchpad.net

Commit message

Removed automatically resolving all known extensions and added a simple API to get extension functions.

Description of the change

Removed automatically resolving all known extensions and added a simple API to get extension functions.

Added a function to help getting extensions, glProxyGetExtProcAddr. Users need to pass the extension
name and the function name, and glProxy will look for it in both the current backend (EGL or GLX) and
GL, but the later will only work if there's a valid current context.

To post a comment you must log in.
Revision history for this message
Alexandros Frantzis (afrantzis) wrote :

> 472 + static char const *gl_extensions = "";

It's not safe to cache gl_extensions in this manner, as the extensions are context-dependent. For example, glProxyGetExtProcAddr() could be called again after a user has changed GL context or by two different threads having different GL contexts.

I would argue that we don't need to cache the extension strings anyway as 1. getting the extension string is fast enough and 2. extension checking isn't usually in a performance-critical path.

> 501 + if (!strstr(backend_extensions, extension) &&
> 502 + !strstr(gl_extensions, extension))
> 503 + return NULL;

There are extension names that are prefixes of other extension names (eg EGL_KHR_image and EGL_KHR_image_base), so a simple strstr() check is not enough. You can check cairo-gl-info.c in the cairo sources for a more robust implementation of an extension check.

By the way, this complication is the reason glGetString(GL_EXTENSIONS) was deprecated in GL 3.0 (and removed in GL 3.1) in favor of glGetStringi(GL_EXTENSIONS, i).

review: Needs Fixing
36. By Marc Ordinas i Llopis

Removed caching the extensions strings. Ensured that extension names are checked correctly.

Added a new API function to check if an extension is present in both the backend and GL,
glProxyHasExtension.

Revision history for this message
Marc Ordinas i Llopis (marcoil) wrote :

Thanks, Alexandros! I removed the string caching and copied the check from cairo, please take a look.

Revision history for this message
Alexandros Frantzis (afrantzis) wrote :

Looks good!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'include/GL/gl_proxy.h'
--- include/GL/gl_proxy.h 2011-09-10 10:03:08 +0000
+++ include/GL/gl_proxy.h 2011-10-19 11:31:30 +0000
@@ -22,7 +22,9 @@
22 */22 */
2323
24/*24/*
25 * Authored-by: Jammy Zhou <jammy.zhou@linaro.org>25 * Authors:
26 * Jammy Zhou <jammy.zhou@linaro.org>
27 * Marc Ordinas i Llopis, Collabora Ltd <marc.ordinasillopis@linaro.org>
26 */28 */
2729
28#ifndef _GL_PROXY_H30#ifndef _GL_PROXY_H
@@ -930,6 +932,9 @@
930extern int glProxyInit(PROXY_BACKEND_OPTION *pProxyBackend);932extern int glProxyInit(PROXY_BACKEND_OPTION *pProxyBackend);
931extern int glProxyClose(void);933extern int glProxyClose(void);
932934
935extern GLboolean glProxyHasExtension(const char *extension);
936extern void *glProxyGetExtProcAddr(const char *extension, const char *name);
937
933#ifdef __cplusplus938#ifdef __cplusplus
934}939}
935#endif940#endif
936941
=== modified file 'include/GL/glext_proxy.h'
--- include/GL/glext_proxy.h 2011-02-24 04:52:03 +0000
+++ include/GL/glext_proxy.h 2011-10-19 11:31:30 +0000
@@ -22,7 +22,9 @@
22 */22 */
2323
24/*24/*
25 * Authored-by: Jammy Zhou <jammy.zhou@linaro.org>25 * Authors:
26 * Jammy Zhou <jammy.zhou@linaro.org>
27 * Marc Ordinas i Llopis, Collabora Ltd <marc.ordinasillopis@linaro.org>
26 */28 */
2729
28#ifndef __GLEXT_PROXY_H30#ifndef __GLEXT_PROXY_H
@@ -322,134 +324,6 @@
322typedef void GL_APIENTRY (*PFNPROXYSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);324typedef void GL_APIENTRY (*PFNPROXYSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
323typedef void GL_APIENTRY (*PFNPROXYENDTILINGQCOMPROC) (GLbitfield preserveMask);325typedef void GL_APIENTRY (*PFNPROXYENDTILINGQCOMPROC) (GLbitfield preserveMask);
324326
325/* ---------------------------------------------------------------------------
326 * function rename
327 * -------------------------------------------------------------------------*/
328#define glEGLImageTargetTexture2DOES pfnProxyEGLImageTargetTexture2DOES
329#define glEGLImageTargetRenderbufferStorageOES pfnProxyEGLImageTargetRenderbufferStorageOES
330#define glGetProgramBinaryOES pfnProxyGetProgramBinaryOES
331#define glProgramBinaryOES pfnProxyProgramBinaryOES
332#define glMapBufferOES pfnProxyMapBufferOES
333#define glUnmapBufferOES pfnProxyUnmapBufferOES
334#define glGetBufferPointervOES pfnProxyGetBufferPointervOES
335#define glTexImage3DOES pfnProxyTexImage3DOES
336#define glTexSubImage3DOES pfnProxyTexSubImage3DOES
337#define glCopyTexSubImage3DOES pfnProxyCopyTexSubImage3DOES
338#define glCompressedTexImage3DOES pfnProxyCompressedTexImage3DOES
339#define glCompressedTexSubImage3DOES pfnProxyCompressedTexSubImage3DOES
340#define glFramebufferTexture3DOES pfnProxyFramebufferTexture3DOES
341#define glBindVertexArrayOES pfnProxyBindVertexArrayOES
342#define glDeleteVertexArraysOES pfnProxyDeleteVertexArraysOES
343#define glGenVertexArraysOES pfnProxyGenVertexArraysOES
344#define glIsVertexArrayOES pfnProxyIsVertexArrayOES
345#define glGetPerfMonitorGroupsAMD pfnProxyGetPerfMonitorGroupsAMD
346#define glGetPerfMonitorCountersAMD pfnProxyGetPerfMonitorCountersAMD
347#define glGetPerfMonitorGroupStringAMD pfnProxyGetPerfMonitorGroupStringAMD
348#define glGetPerfMonitorCounterStringAMD pfnProxyGetPerfMonitorCounterStringAMD
349#define glGetPerfMonitorCounterInfoAMD pfnProxyGetPerfMonitorCounterInfoAMD
350#define glGenPerfMonitorsAMD pfnProxyGenPerfMonitorsAMD
351#define glDeletePerfMonitorsAMD pfnProxyDeletePerfMonitorsAMD
352#define glSelectPerfMonitorCountersAMD pfnProxySelectPerfMonitorCountersAMD
353#define glBeginPerfMonitorAMD pfnProxyBeginPerfMonitorAMD
354#define glEndPerfMonitorAMD pfnProxyEndPerfMonitorAMD
355#define glGetPerfMonitorCounterDataAMD pfnProxyGetPerfMonitorCounterDataAMD
356#define glDiscardFramebufferEXT pfnProxyDiscardFramebufferEXT
357#define glMultiDrawArraysEXT pfnProxyMultiDrawArraysEXT
358#define glMultiDrawElementsEXT pfnProxyMultiDrawElementsEXT
359#define glRenderbufferStorageMultisampleIMG pfnProxyRenderbufferStorageMultisampleIMG
360#define glFramebufferTexture2DMultisampleIMG pfnProxyFramebufferTexture2DMultisampleIMG
361#define glDeleteFencesNV pfnProxyDeleteFencesNV
362#define glGenFencesNV pfnProxyGenFencesNV
363#define glIsFenceNV pfnProxyIsFenceNV
364#define glTestFenceNV pfnProxyTestFenceNV
365#define glGetFenceNV pfnProxyGetFenceNV
366#define glFinishFenceNV pfnProxyFinishFenceNV
367#define glSetFenceNV pfnProxySetFenceNV
368#define glCoverageMaskNV pfnProxyCoverageMaskNV
369#define glCoverageOperationNV pfnProxyCoverageOperationNV
370#define glGetDriverControlsQCOM pfnProxyGetDriverControlsQCOM
371#define glGetDriverControlStringQCOM pfnProxyGetDriverControlStringQCOM
372#define glEnableDriverControlQCOM pfnProxyEnableDriverControlQCOM
373#define glDisableDriverControlQCOM pfnProxyDisableDriverControlQCOM
374#define glExtGetTexturesQCOM pfnProxyExtGetTexturesQCOM
375#define glExtGetBuffersQCOM pfnProxyExtGetBuffersQCOM
376#define glExtGetRenderbuffersQCOM pfnProxyExtGetRenderbuffersQCOM
377#define glExtGetFramebuffersQCOM pfnProxyExtGetFramebuffersQCOM
378#define glExtGetTexLevelParameterivQCOM pfnProxyExtGetTexLevelParameterivQCOM
379#define glExtTexObjectStateOverrideQCOM pfnProxyExtTexObjectStateOverrideQCOM
380#define glExtGetTexSubImageQCOM pfnProxyExtGetTexSubImageQCOM
381#define glExtGetBufferPointervQCOM pfnProxyExtGetBufferPointervQCOM
382#define glExtGetShadersQCOM pfnProxyExtGetShadersQCOM
383#define glExtGetProgramsQCOM pfnProxyExtGetProgramsQCOM
384#define glExtIsProgramBinaryQCOM pfnProxyExtIsProgramBinaryQCOM
385#define glExtGetProgramBinarySourceQCOM pfnProxyExtGetProgramBinarySourceQCOM
386#define glStartTilingQCOM pfnProxyStartTilingQCOM
387#define glEndTilingQCOM pfnProxyEndTilingQCOM
388
389/* ---------------------------------------------------------------------------
390 * export proxy functions
391 * -------------------------------------------------------------------------*/
392extern PFNPROXYEGLIMAGETARGETTEXTURE2DOESPROC pfnProxyEGLImageTargetTexture2DOES;
393extern PFNPROXYEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC pfnProxyEGLImageTargetRenderbufferStorageOES;
394extern PFNPROXYGETPROGRAMBINARYOESPROC pfnProxyGetProgramBinaryOES;
395extern PFNPROXYPROGRAMBINARYOESPROC pfnProxyProgramBinaryOES;
396extern PFNPROXYMAPBUFFEROESPROC pfnProxyMapBufferOES;
397extern PFNPROXYUNMAPBUFFEROESPROC pfnProxyUnmapBufferOES;
398extern PFNPROXYGETBUFFERPOINTERVOESPROC pfnProxyGetBufferPointervOES;
399extern PFNPROXYTEXIMAGE3DOESPROC pfnProxyTexImage3DOES;
400extern PFNPROXYTEXSUBIMAGE3DOESPROC pfnProxyTexSubImage3DOES;
401extern PFNPROXYCOPYTEXSUBIMAGE3DOESPROC pfnProxyCopyTexSubImage3DOES;
402extern PFNPROXYCOMPRESSEDTEXIMAGE3DOESPROC pfnProxyCompressedTexImage3DOES;
403extern PFNPROXYCOMPRESSEDTEXSUBIMAGE3DOESPROC pfnProxyCompressedTexSubImage3DOES;
404extern PFNPROXYFRAMEBUFFERTEXTURE3DOESPROC pfnProxyFramebufferTexture3DOES;
405extern PFNPROXYBINDVERTEXARRAYOESPROC pfnProxyBindVertexArrayOES;
406extern PFNPROXYDELETEVERTEXARRAYSOESPROC pfnProxyDeleteVertexArraysOES;
407extern PFNPROXYGENVERTEXARRAYSOESPROC pfnProxyGenVertexArraysOES;
408extern PFNPROXYISVERTEXARRAYOESPROC pfnProxyIsVertexArrayOES;
409extern PFNPROXYGETPERFMONITORGROUPSAMDPROC pfnProxyGetPerfMonitorGroupsAMD;
410extern PFNPROXYGETPERFMONITORCOUNTERSAMDPROC pfnProxyGetPerfMonitorCountersAMD;
411extern PFNPROXYGETPERFMONITORGROUPSTRINGAMDPROC pfnProxyGetPerfMonitorGroupStringAMD;
412extern PFNPROXYGETPERFMONITORCOUNTERSTRINGAMDPROC pfnProxyGetPerfMonitorCounterStringAMD;
413extern PFNPROXYGETPERFMONITORCOUNTERINFOAMDPROC pfnProxyGetPerfMonitorCounterInfoAMD;
414extern PFNPROXYGENPERFMONITORSAMDPROC pfnProxyGenPerfMonitorsAMD;
415extern PFNPROXYDELETEPERFMONITORSAMDPROC pfnProxyDeletePerfMonitorsAMD;
416extern PFNPROXYSELECTPERFMONITORCOUNTERSAMDPROC pfnProxySelectPerfMonitorCountersAMD;
417extern PFNPROXYBEGINPERFMONITORAMDPROC pfnProxyBeginPerfMonitorAMD;
418extern PFNPROXYENDPERFMONITORAMDPROC pfnProxyEndPerfMonitorAMD;
419extern PFNPROXYGETPERFMONITORCOUNTERDATAAMDPROC pfnProxyGetPerfMonitorCounterDataAMD;
420extern PFNPROXYDISCARDFRAMEBUFFEREXTPROC pfnProxyDiscardFramebufferEXT;
421extern PFNPROXYMULTIDRAWARRAYSEXTPROC pfnProxyMultiDrawArraysEXT;
422extern PFNPROXYMULTIDRAWELEMENTSEXTPROC pfnProxyMultiDrawElementsEXT;
423extern PFNPROXYRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC pfnProxyRenderbufferStorageMultisampleIMG;
424extern PFNPROXYFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC pfnProxyFramebufferTexture2DMultisampleIMG;
425extern PFNPROXYDELETEFENCESNVPROC pfnProxyDeleteFencesNV;
426extern PFNPROXYGENFENCESNVPROC pfnProxyGenFencesNV;
427extern PFNPROXYISFENCENVPROC pfnProxyIsFenceNV;
428extern PFNPROXYTESTFENCENVPROC pfnProxyTestFenceNV;
429extern PFNPROXYGETFENCEIVNVPROC pfnProxyGetFenceivNV;
430extern PFNPROXYFINISHFENCENVPROC pfnProxyFinishFenceNV;
431extern PFNPROXYSETFENCENVPROC pfnProxySetFenceNV;
432extern PFNPROXYCOVERAGEMASKNVPROC pfnProxyCoverageMaskNV;
433extern PFNPROXYCOVERAGEOPERATIONNVPROC pfnProxyCoverageOperationNV;
434extern PFNPROXYGETDRIVERCONTROLSQCOMPROC pfnProxyGetDriverControlsQCOM;
435extern PFNPROXYGETDRIVERCONTROLSTRINGQCOMPROC pfnProxyGetDriverControlStringQCOM;
436extern PFNPROXYENABLEDRIVERCONTROLQCOMPROC pfnProxyEnableDriverControlQCOM;
437extern PFNPROXYDISABLEDRIVERCONTROLQCOMPROC pfnProxyDisableDriverControlQCOM;
438extern PFNPROXYEXTGETTEXTURESQCOMPROC pfnProxyExtGetTexturesQCOM;
439extern PFNPROXYEXTGETBUFFERSQCOMPROC pfnProxyExtGetBuffersQCOM;
440extern PFNPROXYEXTGETRENDERBUFFERSQCOMPROC pfnProxyExtGetRenderbuffersQCOM;
441extern PFNPROXYEXTGETFRAMEBUFFERSQCOMPROC pfnProxyExtGetFramebuffersQCOM;
442extern PFNPROXYEXTGETTEXLEVELPARAMETERIVQCOMPROC pfnProxyExtGetTexLevelParameterivQCOM;
443extern PFNPROXYEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC pfnProxyExtTexObjectStateOverrideiQCOM;
444extern PFNPROXYEXTGETTEXSUBIMAGEQCOMPROC pfnProxyExtGetTexSubImageQCOM;
445extern PFNPROXYEXTGETBUFFERPOINTERVQCOMPROC pfnProxyExtGetBufferPointervQCOM;
446extern PFNPROXYEXTGETSHADERSQCOMPROC pfnProxyExtGetShadersQCOM;
447extern PFNPROXYEXTGETPROGRAMSQCOMPROC pfnProxyExtGetProgramsQCOM;
448extern PFNPROXYEXTISPROGRAMBINARYQCOMPROC pfnProxyExtIsProgramBinaryQCOM;
449extern PFNPROXYEXTGETPROGRAMBINARYSOURCEQCOMPROC pfnProxyExtGetProgramBinarySourceQCOM;
450extern PFNPROXYSTARTTILINGQCOMPROC pfnProxyStartTilingQCOM;
451extern PFNPROXYENDTILINGQCOMPROC pfnProxyEndTilingQCOM;
452
453#ifdef __cplusplus327#ifdef __cplusplus
454}328}
455#endif329#endif
456330
=== modified file 'include/GL/glx_proxy.h'
--- include/GL/glx_proxy.h 2011-02-24 04:52:03 +0000
+++ include/GL/glx_proxy.h 2011-10-19 11:31:30 +0000
@@ -22,7 +22,9 @@
22 */22 */
2323
24/*24/*
25 * Authored-by: Jammy Zhou <jammy.zhou@linaro.org>25 * Authors:
26 * Jammy Zhou <jammy.zhou@linaro.org>
27 * Marc Ordinas i Llopis, Collabora Ltd <marc.ordinasillopis@linaro.org>
26 */28 */
2729
28#ifndef _GLX_PROXY_H30#ifndef _GLX_PROXY_H
2931
=== modified file 'include/GL/glxext_proxy.h'
--- include/GL/glxext_proxy.h 2011-09-13 16:03:17 +0000
+++ include/GL/glxext_proxy.h 2011-10-19 11:31:30 +0000
@@ -22,7 +22,9 @@
22 */22 */
2323
24/*24/*
25 * Authored-by: Jammy Zhou <jammy.zhou@linaro.org>25 * Authors:
26 * Jammy Zhou <jammy.zhou@linaro.org>
27 * Marc Ordinas i Llopis, Collabora Ltd <marc.ordinasillopis@linaro.org>
26 */28 */
2729
28#ifndef __GLXEXT_PROXY_H30#ifndef __GLXEXT_PROXY_H
@@ -467,178 +469,6 @@
467typedef int ( * PFNPROXYSWAPINTERVALMESAPROC) (unsigned int interval);469typedef int ( * PFNPROXYSWAPINTERVALMESAPROC) (unsigned int interval);
468typedef int ( * PFNPROXYGETSWAPINTERVALMESAPROC) (void);470typedef int ( * PFNPROXYGETSWAPINTERVALMESAPROC) (void);
469471
470/* ---------------------------------------------------------------------------------------------
471 * function rename
472 * -------------------------------------------------------------------------------------------*/
473#define glXCreateContextAttribsARB pfnProxyCreateContextAttribsARB
474#define glXSwapIntervalSGI pfnProxySwapIntervalSGI
475#define glXGetVideoSyncSGI pfnProxyGetVideoSyncSGI
476#define glXWaitVideoSyncSGI pfnProxyWaitVideoSyncSGI
477#define glXMakeCurrentReadSGI pfnProxyMakeCurrentReadSGI
478#define glXGetCurrentReadDrawableSGI pfnProxyGetCurrentReadDrawableSGI
479#ifdef _VL_H
480#define glXCreateGLXVideoSourceSGIX pfnProxyCreateGLXVideoSourceSGIX
481#define glXDestroyGLXVideoSourceSGIX pfnProxyDestroyGLXVideoSourceSGIX
482#endif
483#define glXGetCurrentDisplayEXT pfnProxyGetCurrentDisplayEXT
484#define glXQueryContextInfoEXT pfnProxyQueryContextInfoEXT
485#define glXGetContextIDEXT pfnProxyGetContextIDEXT
486#define glXImportContextEXT pfnProxyImportContextEXT
487#define glXFreeContextEXT pfnProxyFreeContextEXT
488#define glXGetFBConfigAttribSGIX pfnProxyGetFBConfigAttribSGIX
489#define glXChooseFBConfigSGIX pfnProxyChooseFBConfigSGIX
490#define glXCreateGLXPixmapWithConfigSGIX pfnProxyCreateGLXPixmapWithConfigSGIX
491#define glXCreateContextWithConfigSGIX pfnProxyCreateContextWithConfigSGIX
492#define glXGetVisualFromFBConfigSGIX pfnProxyGetVisualFromFBConfigSGIX
493#define glXGetFBConfigFromVisualSGIX pfnProxyGetFBConfigFromVisualSGIX
494#define glXCreateGLXPbufferSGIX pfnProxyCreateGLXPbufferSGIX
495#define glXDestroyGLXPbufferSGIX pfnProxyDestroyGLXPbufferSGIX
496#define glXQueryGLXPbufferSGIX pfnProxyQueryGLXPbufferSGIX
497#define glXSelectEventSGIX pfnProxySelectEventSGIX
498#define glXGetSelectedEventSGIX pfnProxyGetSelectedEventSGIX
499#define glXCushionSGI pfnProxyCushionSGI
500#define glXBindChannelToWindowSGIX pfnProxyBindChannelToWindowSGIX
501#define glXChannelRectSGIX pfnProxyChannelRectSGIX
502#define glXQueryChannelRectSGIX pfnProxyQueryChannelRectSGIX
503#define glXQueryChannelDeltasSGIX pfnProxyQueryChannelDeltasSGIX
504#define glXChannelRectSyncSGIX pfnProxyChannelRectSyncSGIX
505#ifdef _DM_BUFFER_H
506#define glXAssociateDMPbufferSGIX pfnProxyAssociateDMPbufferSGIX
507#endif
508#define glXJoinSwapGroupSGIX pfnProxyJoinSwapGroupSGIX
509#define glXBindSwapBarrierSGIX pfnProxyBindSwapBarrierSGIX
510#define glXQueryMaxSwapBarriersSGIX pfnProxyQueryMaxSwapBarriersSGIX
511#define glXGetTransparentIndexSUN pfnProxyGetTransparentIndexSUN
512#define glXCopySubBufferMESA pfnProxyCopySubBufferMESA
513#define glXCreateGLXPixmapMESA pfnProxyCreateGLXPixmapMESA
514#define glXReleaseBuffersMESA pfnProxyReleaseBuffersMESA
515#define glXSet3DfxModeMESA pfnProxySet3DfxModeMESA
516#define glXGetSyncValuesOML pfnProxyGetSyncValuesOML
517#define glXGetMscRateOML pfnProxyGetMscRateOML
518#define glXSwapBuffersMscOML pfnProxySwapBuffersMscOML
519#define glXWaitForMscOML pfnProxyWaitForMscOML
520#define glXWaitForSbcOML pfnProxyWaitForSbcOML
521#define glXQueryHyperpipeNetworkSGIX pfnProxyQueryHyperpipeNetworkSGIX
522#define glXHyperpipeConfigSGIX pfnProxyHyperpipeConfigSGIX
523#define glXQueryHyperpipeConfigSGIX pfnProxyQueryHyperpipeConfigSGIX
524#define glXDestroyHyperpipeConfigSGIX pfnProxyDestroyHyperpipeConfigSGIX
525#define glXBindHyperpipeSGIX pfnProxyBindHyperpipeSGIX
526#define glXQueryHyperpipeBestAttribSGIX pfnProxyQueryHyperpipeBestAttribSGIX
527#define glXHyperpipeAttribSGIX pfnProxyHyperpipeAttribSGIX
528#define glXQueryHyperpipeAttribSGIX pfnProxyQueryHyperpipeAttribSGIX
529#define glXGetAGPOffsetMESA pfnProxyGetAGPOffsetMESA
530#define glXBindTexImageEXT pfnProxyBindTexImageEXT
531#define glXReleaseTexImageEXT pfnProxyReleaseTexImageEXT
532#define glXEnumerateVideoDevicesNV pfnProxyEnumerateVideoDevicesNV
533#define glXBindVideoDeviceNV pfnProxyBindVideoDeviceNV
534#define glXGetVideoDeviceNV pfnProxyBindVideoDeviceNV
535#define glXReleaseVideoDeviceNV pfnProxyReleaseVideoDeviceNV
536#define glXBindVideoImageNV pfnProxyBindVideoImageNV
537#define glXReleaseVideoImageNV pfnProxyReleaseVideoImageNV
538#define glXSendPbufferToVideoNV pfnProxySendPbufferToVideoNV
539#define glXGetVideoInfoNV pfnProxyGetVideoInfoNV
540#define glXJoinSwapGroupNV pfnProxyJoinSwapGroupNV
541#define glXBindSwapBarrierNV pfnProxyBindSwapBarrierNV
542#define glXQuerySwapGroupNV pfnProxyQuerySwapGroupNV
543#define glXQueryMaxSwapGroupsNV pfnProxyQueryMaxSwapGroupsNV
544#define glXQueryFrameCountNV pfnProxyQueryFrameCountNV
545#define glXResetFrameCountNV pfnProxyResetFrameCountNV
546#define glXBindVideoCaptureDeviceNV pfnProxyBindVideoCaptureDeviceNV
547#define glXEnumerateVideoCaptureDevicesNV pfnProxyEnumerateVideoCaptureDevicesNV
548#define glXLockVideoCaptureDeviceNV pfnProxyLockVideoCaptureDeviceNV
549#define glXQueryVideoCaptureDeviceNV pfnProxyQueryVideoCaptureDeviceNV
550#define glXReleaseVideoCaptureDeviceNV pfnProxyReleaseVideoCaptureDeviceNV
551#define glXSwapIntervalEXT pfnProxySwapIntervalEXT
552#define glXCopyImageSubDataNV pfnProxyCopyImageSubDataNV
553#define glXSwapIntervalMESA pfnProxySwapIntervalMESA
554#define glXGetSwapIntervalMESA pfnProxyGetSwapIntervalMESA
555
556/* ---------------------------------------------------------------------------------------------
557 * export proxy functions
558 * -------------------------------------------------------------------------------------------*/
559extern PFNPROXYCREATECONTEXTATTRIBSARBPROC pfnProxyCreateContextAttribsARB;
560extern PFNPROXYSWAPINTERVALSGIPROC pfnProxySwapIntervalSGI;
561extern PFNPROXYGETVIDEOSYNCSGIPROC pfnProxyGetVideoSyncSGI;
562extern PFNPROXYWAITVIDEOSYNCSGIPROC pfnProxyWaitVideoSyncSGI;
563extern PFNPROXYMAKECURRENTREADSGIPROC pfnProxyMakeCurrentReadSGI;
564extern PFNPROXYGETCURRENTREADDRAWABLESGIPROC pfnProxyGetCurrentReadDrawableSGI;
565#ifdef _VL_H
566extern PFNPROXYCREATEGLXVIDEOSOURCESGIXPROC pfnProxyCreateGLXVideoSourceSGIX;
567extern PFNPROXYDESTROYGLXVIDEOSOURCESGIXPROC pfnProxyDestroyGLXVideoSourceSGIX;
568#endif
569extern PFNPROXYGETCURRENTDISPLAYEXTPROC pfnProxyGetCurrentDisplayEXT;
570extern PFNPROXYQUERYCONTEXTINFOEXTPROC pfnProxyQueryContextInfoEXT;
571extern PFNPROXYGETCONTEXTIDEXTPROC pfnProxyGetContextIDEXT;
572extern PFNPROXYIMPORTCONTEXTEXTPROC pfnProxyImportContextEXT;
573extern PFNPROXYFREECONTEXTEXTPROC pfnProxyFreeContextEXT;
574extern PFNPROXYGETFBCONFIGATTRIBSGIXPROC pfnProxyGetFBConfigAttribSGIX;
575extern PFNPROXYCHOOSEFBCONFIGSGIXPROC pfnProxyChooseFBConfigSGIX;
576extern PFNPROXYCREATEGLXPIXMAPWITHCONFIGSGIXPROC pfnProxyCreateGLXPixmapWithConfigSGIX;
577extern PFNPROXYCREATECONTEXTWITHCONFIGSGIXPROC pfnProxyCreateContextWithConfigSGIX;
578extern PFNPROXYGETVISUALFROMFBCONFIGSGIXPROC pfnProxyGetVisualFromFBConfigSGIX;
579extern PFNPROXYGETFBCONFIGFROMVISUALSGIXPROC pfnProxyGetFBConfigFromVisualSGIX;
580extern PFNPROXYCREATEGLXPBUFFERSGIXPROC pfnProxyCreateGLXPbufferSGIX;
581extern PFNPROXYDESTROYGLXPBUFFERSGIXPROC pfnProxyDestroyGLXPbufferSGIX;
582extern PFNPROXYQUERYGLXPBUFFERSGIXPROC pfnProxyQueryGLXPbufferSGIX;
583extern PFNPROXYSELECTEVENTSGIXPROC pfnProxySelectEventSGIX;
584extern PFNPROXYGETSELECTEDEVENTSGIXPROC pfnProxyGetSelectedEventSGIX;
585extern PFNPROXYCUSHIONSGIPROC pfnProxyCushionSGI;
586extern PFNPROXYBINDCHANNELTOWINDOWSGIXPROC pfnProxyBindChannelToWindowSGIX;
587extern PFNPROXYCHANNELRECTSGIXPROC pfnProxyChannelRectSGIX;
588extern PFNPROXYQUERYCHANNELRECTSGIXPROC pfnProxyQueryChannelRectSGIX;
589extern PFNPROXYQUERYCHANNELDELTASSGIXPROC pfnProxyQueryChannelDeltasSGIX;
590extern PFNPROXYCHANNELRECTSYNCSGIXPROC pfnProxyChannelRectSyncSGIX;
591#ifdef _DM_BUFFER_H
592extern PFNPROXYASSOCIATEDMPBUFFERSGIXPROC pfnProxyAssociateDMPbufferSGIX;
593#endif
594extern PFNPROXYJOINSWAPGROUPSGIXPROC pfnProxyJoinSwapGroupSGIX;
595extern PFNPROXYBINDSWAPBARRIERSGIXPROC pfnProxyBindSwapBarrierSGIX;
596extern PFNPROXYQUERYMAXSWAPBARRIERSSGIXPROC pfnProxyQueryMaxSwapBarriersSGIX;
597extern PFNPROXYGETTRANSPARENTINDEXSUNPROC pfnProxyGetTransparentIndexSUN;
598extern PFNPROXYCOPYSUBBUFFERMESAPROC pfnProxyCopySubBufferMESA;
599extern PFNPROXYCREATEGLXPIXMAPMESAPROC pfnProxyCreateGLXPixmapMESA;
600extern PFNPROXYRELEASEBUFFERSMESAPROC pfnProxyReleaseBuffersMESA;
601extern PFNPROXYSET3DFXMODEMESAPROC pfnProxySet3DfxModeMESA;
602extern PFNPROXYGETSYNCVALUESOMLPROC pfnProxyGetSyncValuesOML;
603extern PFNPROXYGETMSCRATEOMLPROC pfnProxyGetMscRateOML;
604extern PFNPROXYSWAPBUFFERSMSCOMLPROC pfnProxySwapBuffersMscOML;
605extern PFNPROXYWAITFORMSCOMLPROC pfnProxyWaitForMscOML;
606extern PFNPROXYWAITFORSBCOMLPROC pfnProxyWaitForSbcOML;
607extern PFNPROXYQUERYHYPERPIPENETWORKSGIXPROC pfnProxyQueryHyperpipeNetworkSGIX;
608extern PFNPROXYHYPERPIPECONFIGSGIXPROC pfnProxyHyperpipeConfigSGIX;
609extern PFNPROXYQUERYHYPERPIPECONFIGSGIXPROC pfnProxyQueryHyperpipeConfigSGIX;
610extern PFNPROXYDESTROYHYPERPIPECONFIGSGIXPROC pfnProxyDestroyHyperpipeConfigSGIX;
611extern PFNPROXYBINDHYPERPIPESGIXPROC pfnProxyBindHyperpipeSGIX;
612extern PFNPROXYQUERYHYPERPIPEBESTATTRIBSGIXPROC pfnProxyQueryHyperpipeBestAttribSGIX;
613extern PFNPROXYHYPERPIPEATTRIBSGIXPROC pfnProxyHyperpipeAttribSGIX;
614extern PFNPROXYQUERYHYPERPIPEATTRIBSGIXPROC pfnProxyQueryHyperpipeAttribSGIX;
615extern PFNPROXYGETAGPOFFSETMESAPROC pfnProxyGetAGPOffsetMESA;
616extern PFNPROXYBINDTEXIMAGEEXTPROC pfnProxyBindTexImageEXT;
617extern PFNPROXYRELEASETEXIMAGEEXTPROC pfnProxyReleaseTexImageEXT;
618extern PFNPROXYENUMERATEVIDEODEVICESNVPROC pfnProxyEnumerateVideoDevicesNV;
619extern PFNPROXYBINDVIDEODEVICENVPROC pfnProxyBindVideoDeviceNV;
620extern PFNPROXYGETVIDEODEVICENVPROC pfnProxyGetVideoDeviceNV;
621extern PFNPROXYRELEASEVIDEODEVICENVPROC pfnProxyReleaseVideoDeviceNV;
622extern PFNPROXYBINDVIDEOIMAGENVPROC pfnProxyBindVideoImageNV;
623extern PFNPROXYRELEASEVIDEOIMAGENVPROC pfnProxyReleaseVideoImageNV;
624extern PFNPROXYSENDPBUFFERTOVIDEONVPROC pfnProxySendPbufferToVideoNV;
625extern PFNPROXYGETVIDEOINFONVPROC pfnProxyGetVideoInfoNV;
626extern PFNPROXYJOINSWAPGROUPNVPROC pfnProxyJoinSwapGroupNV;
627extern PFNPROXYBINDSWAPBARRIERNVPROC pfnProxyBindSwapBarrierNV;
628extern PFNPROXYQUERYSWAPGROUPNVPROC pfnProxyQuerySwapGroupNV;
629extern PFNPROXYQUERYMAXSWAPGROUPSNVPROC pfnProxyQueryMaxSwapGroupsNV;
630extern PFNPROXYQUERYFRAMECOUNTNVPROC pfnProxyQueryFrameCountNV;
631extern PFNPROXYRESETFRAMECOUNTNVPROC pfnProxyResetFrameCountNV;
632extern PFNPROXYBINDVIDEOCAPTUREDEVICENVPROC pfnProxyBindVideoCaptureDeviceNV;
633extern PFNPROXYENUMERATEVIDEOCAPTUREDEVICESNVPROC pfnProxyEnumerateVideoCaptureDevicesNV;
634extern PFNPROXYLOCKVIDEOCAPTUREDEVICENVPROC pfnProxyLockVideoCaptureDeviceNV;
635extern PFNPROXYQUERYVIDEOCAPTUREDEVICENVPROC pfnProxyQueryVideoCaptureDeviceNV;
636extern PFNPROXYRELEASEVIDEOCAPTUREDEVICENVPROC pfnProxyReleaseVideoCaptureDeviceNV;
637extern PFNPROXYSWAPINTERVALEXTPROC pfnProxySwapIntervalEXT;
638extern PFNPROXYCOPYIMAGESUBDATANVPROC pfnProxyCopyImageSubDataNV;
639extern PFNPROXYSWAPINTERVALMESAPROC pfnProxySwapIntervalMESA;
640extern PFNPROXYGETSWAPINTERVALMESAPROC pfnProxyGetSwapIntervalMESA;
641
642#ifdef __cplusplus472#ifdef __cplusplus
643}473}
644#endif474#endif
645475
=== modified file 'src/egldef.h'
--- src/egldef.h 2011-04-29 22:01:08 +0000
+++ src/egldef.h 2011-10-19 11:31:30 +0000
@@ -20,7 +20,9 @@
20 */20 */
2121
22/*22/*
23 * Authored-by: Jammy Zhou <jammy.zhou@linaro.org>23 * Authors:
24 * Jammy Zhou <jammy.zhou@linaro.org>
25 * Marc Ordinas i Llopis, Collabora Ltd <marc.ordinasillopis@linaro.org>
24 */26 */
2527
26#define LIBEGL_PATH "/usr/lib/libEGL.so"28#define LIBEGL_PATH "/usr/lib/libEGL.so"
@@ -39,6 +41,12 @@
39#define EGL_NO_CONTEXT ((EGLContext)0)41#define EGL_NO_CONTEXT ((EGLContext)0)
40#define EGL_NO_SURFACE ((EGLSurface)0)42#define EGL_NO_SURFACE ((EGLSurface)0)
4143
44/* QueryString targets */
45#define EGL_VENDOR 0x3053
46#define EGL_VERSION 0x3054
47#define EGL_EXTENSIONS 0x3055
48#define EGL_CLIENT_APIS 0x308D
49
42#define EGL_OPENGL_ES_API 0x30A050#define EGL_OPENGL_ES_API 0x30A0
43#define EGL_OPENGL_API 0x30A251#define EGL_OPENGL_API 0x30A2
4452
@@ -52,6 +60,7 @@
52#define EGL_WIDTH 0x305760#define EGL_WIDTH 0x3057
5361
54typedef void * (*PFNPROXYEGLGETPROCADDRESSPROC)( char const *procName);62typedef void * (*PFNPROXYEGLGETPROCADDRESSPROC)( char const *procName);
63typedef char const * (*PFNPROXYEGLQUERYSTRINGPROC)(EGLDisplay display, EGLint name);
55typedef EGLDisplay (*PFNPROXYEGLGETDISPLAYPROC)(EGLNativeDisplayType display_id);64typedef EGLDisplay (*PFNPROXYEGLGETDISPLAYPROC)(EGLNativeDisplayType display_id);
56typedef EGLBoolean (*PFNPROXYEGLINITIALIZEPROC)(EGLDisplay dpy, EGLint *major, EGLint *minor);65typedef EGLBoolean (*PFNPROXYEGLINITIALIZEPROC)(EGLDisplay dpy, EGLint *major, EGLint *minor);
57typedef EGLBoolean (*PFNPROXYEGLTERMINATEPROC)(EGLDisplay dpy);66typedef EGLBoolean (*PFNPROXYEGLTERMINATEPROC)(EGLDisplay dpy);
5867
=== modified file 'src/gl_proxy.c'
--- src/gl_proxy.c 2011-04-29 22:01:08 +0000
+++ src/gl_proxy.c 2011-10-19 11:31:30 +0000
@@ -20,7 +20,9 @@
20 */20 */
2121
22/*22/*
23 * Authored-by: Jammy Zhou <jammy.zhou@linaro.org>23 * Authors:
24 * Jammy Zhou <jammy.zhou@linaro.org>
25 * Marc Ordinas i Llopis, Collabora Ltd <marc.ordinasillopis@linaro.org>
24 */26 */
2527
26#include <stdio.h>28#include <stdio.h>
@@ -195,6 +197,8 @@
195PFNPROXYGLXGETPROCADDRESSPROC pfnProxyGLXGetProcAddress = NULL;197PFNPROXYGLXGETPROCADDRESSPROC pfnProxyGLXGetProcAddress = NULL;
196PFNPROXYEGLGETPROCADDRESSPROC pfnProxyEGLGetProcAddress = NULL;198PFNPROXYEGLGETPROCADDRESSPROC pfnProxyEGLGetProcAddress = NULL;
197199
200PFNPROXYEGLQUERYSTRINGPROC pfnProxyEGLQueryString = NULL;
201
198/* EGL APIs needed for backend selection */202/* EGL APIs needed for backend selection */
199PFNPROXYEGLGETDISPLAYPROC pfnProxyEGLGetDisplay = NULL;203PFNPROXYEGLGETDISPLAYPROC pfnProxyEGLGetDisplay = NULL;
200PFNPROXYEGLINITIALIZEPROC pfnProxyEGLInitialize = NULL;204PFNPROXYEGLINITIALIZEPROC pfnProxyEGLInitialize = NULL;
@@ -324,6 +328,7 @@
324 return -1;328 return -1;
325329
326 pfnProxyEGLGetProcAddress = dlsym(proxy_context->egl_handle, "eglGetProcAddress");330 pfnProxyEGLGetProcAddress = dlsym(proxy_context->egl_handle, "eglGetProcAddress");
331 pfnProxyEGLQueryString = dlsym(proxy_context->egl_handle, "eglQueryString");
327 }332 }
328333
329 return 0;334 return 0;
@@ -332,30 +337,88 @@
332void *glProxyGetProcAddr(void *handle, const char *name)337void *glProxyGetProcAddr(void *handle, const char *name)
333{338{
334 if (pfnProxyGLXGetProcAddress) {339 if (pfnProxyGLXGetProcAddress) {
335 return (*pfnProxyGLXGetProcAddress)(name);340 return (*pfnProxyGLXGetProcAddress)((const GLubyte *)name);
336 }341 }
337 else if (pfnProxyGLXGetProcAddressARB) {342 else if (pfnProxyGLXGetProcAddressARB) {
338 return (*pfnProxyGLXGetProcAddressARB)(name);343 return (*pfnProxyGLXGetProcAddressARB)((const GLubyte *)name);
339 }344 }
340 else {345 else {
341 return dlsym(handle, name);346 return dlsym(handle, name);
342 }347 }
343}348}
344349
345void *glProxyGetExtProcAddr(void *handle, const char *name)350static GLboolean glProxyCheckExtension(const char *list, const char *name)
346{351{
347 if (pfnProxyEGLGetProcAddress) {352 size_t len = strlen(name);
353 const char *ext_ptr = list;
354
355 if(ext_ptr == NULL)
356 return GL_FALSE;
357
358 while ((ext_ptr = strstr(ext_ptr, name)) != NULL) {
359 if (ext_ptr[len] == ' ' || ext_ptr[len] == '\0')
360 break;
361 ext_ptr += len;
362 }
363
364 return (ext_ptr != NULL)? GL_TRUE : GL_FALSE;
365}
366
367GLboolean glProxyHasExtension(const char *extension)
368{
369 char const *backend_extensions = NULL;
370 char const *gl_extensions = NULL;
371
372 if (global_proxy_context.current_backend == UNKNOWN_BACKEND)
373 return GL_FALSE;
374
375 /* Get the backend extensions string */
376 if (global_proxy_context.current_backend == OPENGL_BACKEND &&
377 pfnProxyQueryExtensionsString) {
378
379 if (!global_proxy_context.x_dpy) {
380 global_proxy_context.x_dpy = XOpenDisplay(NULL);
381 }
382
383 backend_extensions = pfnProxyQueryExtensionsString(
384 global_proxy_context.x_dpy,
385 DefaultScreen(global_proxy_context.x_dpy));
386 } else if (global_proxy_context.current_backend == OPENGL_ES20_BACKEND &&
387 pfnProxyEGLQueryString) {
388
389 backend_extensions = pfnProxyEGLQueryString(
390 (EGLDisplay)global_proxy_context.egl_dpy,
391 EGL_EXTENSIONS);
392 }
393
394 /* Get the GL extensions string */
395 if (pfnProxyGetString)
396 gl_extensions = (const char *)pfnProxyGetString(GL_EXTENSIONS);
397
398 /* Check if present */
399 if (glProxyCheckExtension(backend_extensions, extension) ||
400 glProxyCheckExtension(gl_extensions, extension))
401 return GL_TRUE;
402
403 return GL_FALSE;
404}
405
406void *glProxyGetExtProcAddr(const char *extension, const char *name)
407{
408 if (!glProxyHasExtension(extension))
409 return NULL;
410
411 if (pfnProxyEGLGetProcAddress) {
348 return (*pfnProxyEGLGetProcAddress)(name);412 return (*pfnProxyEGLGetProcAddress)(name);
349 }413 }
350 else if (pfnProxyGLXGetProcAddress) {414 else if (pfnProxyGLXGetProcAddress) {
351 return (*pfnProxyGLXGetProcAddress)(name);415 return (*pfnProxyGLXGetProcAddress)((const GLubyte *)name);
352 }416 }
353 else if (pfnProxyGLXGetProcAddressARB) {417 else if (pfnProxyGLXGetProcAddressARB) {
354 return (*pfnProxyGLXGetProcAddressARB)(name);418 return (*pfnProxyGLXGetProcAddressARB)((const GLubyte *)name);
355 }419 }
356 else {420
357 return dlsym(handle, name);421 return NULL;
358 }
359}422}
360423
361static const char *glProxyGetGLRenderer(Display *dpy)424static const char *glProxyGetGLRenderer(Display *dpy)
@@ -388,7 +451,7 @@
388451
389 (*pfnProxyMakeCurrent)(dpy, root, glx_ctx);452 (*pfnProxyMakeCurrent)(dpy, root, glx_ctx);
390453
391 renderer = (*pfnProxyGetString)(GL_RENDERER);454 renderer = (const char *)(*pfnProxyGetString)(GL_RENDERER);
392455
393 (*pfnProxyMakeCurrent)(dpy, None, NULL);456 (*pfnProxyMakeCurrent)(dpy, None, NULL);
394457
@@ -406,20 +469,20 @@
406 const char *gles2_renderer = NULL;469 const char *gles2_renderer = NULL;
407470
408 if (OPENGL_BACKEND == option) {471 if (OPENGL_BACKEND == option) {
409 if (proxy_context->gl_handle = glProxyOpenLibrary(opengl_libraries[OPENGL_BACKEND])) {472 if ((proxy_context->gl_handle = glProxyOpenLibrary(opengl_libraries[OPENGL_BACKEND]))) {
410 *pProxyBackend = OPENGL_BACKEND;473 *pProxyBackend = OPENGL_BACKEND;
411 }474 }
412 else if (proxy_context->gles2_handle = glProxyOpenLibrary(opengl_libraries[OPENGL_ES20_BACKEND])) {475 else if ((proxy_context->gles2_handle = glProxyOpenLibrary(opengl_libraries[OPENGL_ES20_BACKEND]))) {
413 *pProxyBackend = OPENGL_ES20_BACKEND;476 *pProxyBackend = OPENGL_ES20_BACKEND;
414 }477 }
415 else {478 else {
416 *pProxyBackend = UNKNOWN_BACKEND;479 *pProxyBackend = UNKNOWN_BACKEND;
417 }480 }
418 } else if (OPENGL_ES20_BACKEND == option) {481 } else if (OPENGL_ES20_BACKEND == option) {
419 if (proxy_context->gles2_handle = glProxyOpenLibrary(opengl_libraries[OPENGL_ES20_BACKEND])) {482 if ((proxy_context->gles2_handle = glProxyOpenLibrary(opengl_libraries[OPENGL_ES20_BACKEND]))) {
420 *pProxyBackend = OPENGL_ES20_BACKEND;483 *pProxyBackend = OPENGL_ES20_BACKEND;
421 }484 }
422 else if (proxy_context->gl_handle = glProxyOpenLibrary(opengl_libraries[OPENGL_BACKEND])) {485 else if ((proxy_context->gl_handle = glProxyOpenLibrary(opengl_libraries[OPENGL_BACKEND]))) {
423 *pProxyBackend = OPENGL_BACKEND;486 *pProxyBackend = OPENGL_BACKEND;
424 }487 }
425 else {488 else {
@@ -464,7 +527,7 @@
464527
465 CreateEGLRenderingContext(dpy, proxy_context);528 CreateEGLRenderingContext(dpy, proxy_context);
466529
467 gles2_renderer = pfnProxyGetString(GL_RENDERER);530 gles2_renderer = (const char *)pfnProxyGetString(GL_RENDERER);
468531
469 /* Reset the function pointers */532 /* Reset the function pointers */
470 pfnProxyGetString = NULL;533 pfnProxyGetString = NULL;
@@ -719,13 +782,13 @@
719 return 0;782 return 0;
720}783}
721784
722extern int glProxyExtInitGLES2(void *handle);
723extern int glProxyExtInitGL(void *handle);
724extern int glxProxyInit(void *handle);785extern int glxProxyInit(void *handle);
725extern int glxProxyExtInit(void *handle);
726786
727int glProxyInit(PROXY_BACKEND_OPTION *pProxyBackend)787int glProxyInit(PROXY_BACKEND_OPTION *pProxyBackend)
728{788{
789 global_proxy_context.current_backend = UNKNOWN_BACKEND;
790 global_proxy_context.x_dpy = NULL;
791
729 /* Select backend first */792 /* Select backend first */
730 glProxyBackendSelection(pProxyBackend, &global_proxy_context);793 glProxyBackendSelection(pProxyBackend, &global_proxy_context);
731794
@@ -743,13 +806,10 @@
743 /* Resolve symbols */806 /* Resolve symbols */
744 if (OPENGL_BACKEND == global_proxy_context.current_backend) {807 if (OPENGL_BACKEND == global_proxy_context.current_backend) {
745 glProxyCoreInit(global_proxy_context.gl_handle);808 glProxyCoreInit(global_proxy_context.gl_handle);
746 glProxyExtInitGL(global_proxy_context.gl_handle);
747 glxProxyInit(global_proxy_context.gl_handle);809 glxProxyInit(global_proxy_context.gl_handle);
748 glxProxyExtInit(global_proxy_context.gl_handle);
749 }810 }
750 else if (OPENGL_ES20_BACKEND == global_proxy_context.current_backend) {811 else if (OPENGL_ES20_BACKEND == global_proxy_context.current_backend) {
751 glProxyCoreInit(global_proxy_context.gles2_handle);812 glProxyCoreInit(global_proxy_context.gles2_handle);
752 glProxyExtInitGLES2(global_proxy_context.gles2_handle);
753 }813 }
754 else {814 else {
755 /* should not get here */815 /* should not get here */
756816
=== removed file 'src/glext_proxy.c'
--- src/glext_proxy.c 2011-02-24 04:52:03 +0000
+++ src/glext_proxy.c 1970-01-01 00:00:00 +0000
@@ -1,168 +0,0 @@
1/* Copyright (C) 2010-2011 Linaro Ltd.
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to deal
5 * in the Software without restriction, including without limitation the rights
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 * copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions:
9 *
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 * THE SOFTWARE.
20 */
21
22/*
23 * Authored-by: Jammy Zhou <jammy.zhou@linaro.org>
24 */
25
26#include <stdlib.h>
27
28#include <GL/gl_proxy.h>
29#include <GL/glext_proxy.h>
30
31/* proxy functions for GLES2 extensions */
32PFNPROXYEGLIMAGETARGETTEXTURE2DOESPROC pfnProxyEGLImageTargetTexture2DOES = NULL;
33PFNPROXYEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC pfnProxyEGLImageTargetRenderbufferStorageOES = NULL;
34PFNPROXYGETPROGRAMBINARYOESPROC pfnProxyGetProgramBinaryOES = NULL;
35PFNPROXYPROGRAMBINARYOESPROC pfnProxyProgramBinaryOES = NULL;
36PFNPROXYMAPBUFFEROESPROC pfnProxyMapBufferOES = NULL;
37PFNPROXYUNMAPBUFFEROESPROC pfnProxyUnmapBufferOES = NULL;
38PFNPROXYGETBUFFERPOINTERVOESPROC pfnProxyGetBufferPointervOES = NULL;
39PFNPROXYTEXIMAGE3DOESPROC pfnProxyTexImage3DOES = NULL;
40PFNPROXYTEXSUBIMAGE3DOESPROC pfnProxyTexSubImage3DOES = NULL;
41PFNPROXYCOPYTEXSUBIMAGE3DOESPROC pfnProxyCopyTexSubImage3DOES = NULL;
42PFNPROXYCOMPRESSEDTEXIMAGE3DOESPROC pfnProxyCompressedTexImage3DOES = NULL;
43PFNPROXYCOMPRESSEDTEXSUBIMAGE3DOESPROC pfnProxyCompressedTexSubImage3DOES = NULL;
44PFNPROXYFRAMEBUFFERTEXTURE3DOESPROC pfnProxyFramebufferTexture3DOES = NULL;
45PFNPROXYBINDVERTEXARRAYOESPROC pfnProxyBindVertexArrayOES = NULL;
46PFNPROXYDELETEVERTEXARRAYSOESPROC pfnProxyDeleteVertexArraysOES = NULL;
47PFNPROXYGENVERTEXARRAYSOESPROC pfnProxyGenVertexArraysOES = NULL;
48PFNPROXYISVERTEXARRAYOESPROC pfnProxyIsVertexArrayOES = NULL;
49PFNPROXYGETPERFMONITORGROUPSAMDPROC pfnProxyGetPerfMonitorGroupsAMD = NULL;
50PFNPROXYGETPERFMONITORCOUNTERSAMDPROC pfnProxyGetPerfMonitorCountersAMD = NULL;
51PFNPROXYGETPERFMONITORGROUPSTRINGAMDPROC pfnProxyGetPerfMonitorGroupStringAMD = NULL;
52PFNPROXYGETPERFMONITORCOUNTERSTRINGAMDPROC pfnProxyGetPerfMonitorCounterStringAMD = NULL;
53PFNPROXYGETPERFMONITORCOUNTERINFOAMDPROC pfnProxyGetPerfMonitorCounterInfoAMD = NULL;
54PFNPROXYGENPERFMONITORSAMDPROC pfnProxyGenPerfMonitorsAMD = NULL;
55PFNPROXYDELETEPERFMONITORSAMDPROC pfnProxyDeletePerfMonitorsAMD = NULL;
56PFNPROXYSELECTPERFMONITORCOUNTERSAMDPROC pfnProxySelectPerfMonitorCountersAMD = NULL;
57PFNPROXYBEGINPERFMONITORAMDPROC pfnProxyBeginPerfMonitorAMD = NULL;
58PFNPROXYENDPERFMONITORAMDPROC pfnProxyEndPerfMonitorAMD = NULL;
59PFNPROXYGETPERFMONITORCOUNTERDATAAMDPROC pfnProxyGetPerfMonitorCounterDataAMD = NULL;
60PFNPROXYDISCARDFRAMEBUFFEREXTPROC pfnProxyDiscardFramebufferEXT = NULL;
61PFNPROXYMULTIDRAWARRAYSEXTPROC pfnProxyMultiDrawArraysEXT = NULL;
62PFNPROXYMULTIDRAWELEMENTSEXTPROC pfnProxyMultiDrawElementsEXT = NULL;
63PFNPROXYRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC pfnProxyRenderbufferStorageMultisampleIMG = NULL;
64PFNPROXYFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC pfnProxyFramebufferTexture2DMultisampleIMG = NULL;
65PFNPROXYDELETEFENCESNVPROC pfnProxyDeleteFencesNV = NULL;
66PFNPROXYGENFENCESNVPROC pfnProxyGenFencesNV = NULL;
67PFNPROXYISFENCENVPROC pfnProxyIsFenceNV = NULL;
68PFNPROXYTESTFENCENVPROC pfnProxyTestFenceNV = NULL;
69PFNPROXYGETFENCEIVNVPROC pfnProxyGetFenceivNV = NULL;
70PFNPROXYFINISHFENCENVPROC pfnProxyFinishFenceNV = NULL;
71PFNPROXYSETFENCENVPROC pfnProxySetFenceNV = NULL;
72PFNPROXYCOVERAGEMASKNVPROC pfnProxyCoverageMaskNV = NULL;
73PFNPROXYCOVERAGEOPERATIONNVPROC pfnProxyCoverageOperationNV = NULL;
74PFNPROXYGETDRIVERCONTROLSQCOMPROC pfnProxyGetDriverControlsQCOM = NULL;
75PFNPROXYGETDRIVERCONTROLSTRINGQCOMPROC pfnProxyGetDriverControlStringQCOM = NULL;
76PFNPROXYENABLEDRIVERCONTROLQCOMPROC pfnProxyEnableDriverControlQCOM = NULL;
77PFNPROXYDISABLEDRIVERCONTROLQCOMPROC pfnProxyDisableDriverControlQCOM = NULL;
78PFNPROXYEXTGETTEXTURESQCOMPROC pfnProxyExtGetTexturesQCOM = NULL;
79PFNPROXYEXTGETBUFFERSQCOMPROC pfnProxyExtGetBuffersQCOM = NULL;
80PFNPROXYEXTGETRENDERBUFFERSQCOMPROC pfnProxyExtGetRenderbuffersQCOM = NULL;
81PFNPROXYEXTGETFRAMEBUFFERSQCOMPROC pfnProxyExtGetFramebuffersQCOM = NULL;
82PFNPROXYEXTGETTEXLEVELPARAMETERIVQCOMPROC pfnProxyExtGetTexLevelParameterivQCOM = NULL;
83PFNPROXYEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC pfnProxyExtTexObjectStateOverrideiQCOM = NULL;
84PFNPROXYEXTGETTEXSUBIMAGEQCOMPROC pfnProxyExtGetTexSubImageQCOM = NULL;
85PFNPROXYEXTGETBUFFERPOINTERVQCOMPROC pfnProxyExtGetBufferPointervQCOM = NULL;
86PFNPROXYEXTGETSHADERSQCOMPROC pfnProxyExtGetShadersQCOM = NULL;
87PFNPROXYEXTGETPROGRAMSQCOMPROC pfnProxyExtGetProgramsQCOM = NULL;
88PFNPROXYEXTISPROGRAMBINARYQCOMPROC pfnProxyExtIsProgramBinaryQCOM = NULL;
89PFNPROXYEXTGETPROGRAMBINARYSOURCEQCOMPROC pfnProxyExtGetProgramBinarySourceQCOM = NULL;
90PFNPROXYSTARTTILINGQCOMPROC pfnProxyStartTilingQCOM = NULL;
91PFNPROXYENDTILINGQCOMPROC pfnProxyEndTilingQCOM = NULL;
92
93/* Symbol resolve */
94extern void *glProxyGetExtProcAddr(void *handle, const char *name);
95
96int glProxyExtInitGLES2(void *handle)
97{
98 if (NULL == handle) {
99 return -1;
100 }
101
102 pfnProxyEGLImageTargetTexture2DOES = glProxyGetExtProcAddr(handle, "glEGLImageTargetTexture2DOES");
103 pfnProxyEGLImageTargetRenderbufferStorageOES = glProxyGetExtProcAddr(handle, "glEGLImageTargetRenderbufferStorageOES");
104 pfnProxyGetProgramBinaryOES = glProxyGetExtProcAddr(handle, "glGetProgramBinaryOES");
105 pfnProxyProgramBinaryOES = glProxyGetExtProcAddr(handle, "glProgramBinaryOES");
106 pfnProxyMapBufferOES = glProxyGetExtProcAddr(handle, "glMapBufferOES");
107 pfnProxyUnmapBufferOES = glProxyGetExtProcAddr(handle, "glUnmapBufferOES");
108 pfnProxyGetBufferPointervOES = glProxyGetExtProcAddr(handle, "glGetBufferPointervOES");
109 pfnProxyTexImage3DOES = glProxyGetExtProcAddr(handle, "glTexImage3DOES");
110 pfnProxyTexSubImage3DOES = glProxyGetExtProcAddr(handle, "glTexSubImage3DOES");
111 pfnProxyCopyTexSubImage3DOES = glProxyGetExtProcAddr(handle, "glCopyTexSubImage3DOES");
112 pfnProxyCompressedTexImage3DOES = glProxyGetExtProcAddr(handle, "glCompressedTexImage3DOES");
113 pfnProxyCompressedTexSubImage3DOES = glProxyGetExtProcAddr(handle, "glCompressedTexSubImage3DOES");
114 pfnProxyFramebufferTexture3DOES = glProxyGetExtProcAddr(handle, "glFramebufferTexture3DOES");
115 pfnProxyBindVertexArrayOES = glProxyGetExtProcAddr(handle, "glBindVertexArrayOES");
116 pfnProxyDeleteVertexArraysOES = glProxyGetExtProcAddr(handle, "glDeleteVertexArraysOES");
117 pfnProxyGenVertexArraysOES = glProxyGetExtProcAddr(handle, "glGenVertexArraysOES");
118 pfnProxyIsVertexArrayOES = glProxyGetExtProcAddr(handle, "glIsVertexArrayOES");
119 pfnProxyGetPerfMonitorGroupsAMD = glProxyGetExtProcAddr(handle, "glGetPerfMonitorGroupsAMD");
120 pfnProxyGetPerfMonitorCountersAMD = glProxyGetExtProcAddr(handle, "glGetPerfMonitorCountersAMD");
121 pfnProxyGetPerfMonitorGroupStringAMD = glProxyGetExtProcAddr(handle, "glGetPerfMonitorGroupStringAMD");
122 pfnProxyGetPerfMonitorCounterStringAMD = glProxyGetExtProcAddr(handle, "glGetPerfMonitorCounterStringAMD");
123 pfnProxyGetPerfMonitorCounterInfoAMD = glProxyGetExtProcAddr(handle, "glGetPerfMonitorCounterInfoAMD");
124 pfnProxyGenPerfMonitorsAMD = glProxyGetExtProcAddr(handle, "glGenPerfMonitorsAMD");
125 pfnProxyDeletePerfMonitorsAMD = glProxyGetExtProcAddr(handle, "glDeletePerfMonitorsAMD");
126 pfnProxySelectPerfMonitorCountersAMD = glProxyGetExtProcAddr(handle, "glSelectPerfMonitorCountersAMD");
127 pfnProxyBeginPerfMonitorAMD = glProxyGetExtProcAddr(handle, "glBeginPerfMonitorAMD");
128 pfnProxyEndPerfMonitorAMD = glProxyGetExtProcAddr(handle, "glEndPerfMonitorAMD");
129 pfnProxyGetPerfMonitorCounterDataAMD = glProxyGetExtProcAddr(handle, "glGetPerfMonitorCounterDataAMD");
130 pfnProxyDiscardFramebufferEXT = glProxyGetExtProcAddr(handle, "glDiscardFramebufferEXT");
131 pfnProxyMultiDrawArraysEXT = glProxyGetExtProcAddr(handle, "glMultiDrawArraysEXT");
132 pfnProxyMultiDrawElementsEXT = glProxyGetExtProcAddr(handle, "glMultiDrawElementsEXT");
133 pfnProxyRenderbufferStorageMultisampleIMG = glProxyGetExtProcAddr(handle, "glRenderbufferStorageMultisampleIMG");
134 pfnProxyFramebufferTexture2DMultisampleIMG = glProxyGetExtProcAddr(handle, "glFramebufferTexture2DMultisampleIMG");
135 pfnProxyDeleteFencesNV = glProxyGetExtProcAddr(handle, "glDeleteFencesNV");
136 pfnProxyGenFencesNV = glProxyGetExtProcAddr(handle, "glGenFencesNV");
137 pfnProxyIsFenceNV = glProxyGetExtProcAddr(handle, "glIsFenceNV");
138 pfnProxyTestFenceNV = glProxyGetExtProcAddr(handle, "glTestFenceNV");
139 pfnProxyGetFenceivNV = glProxyGetExtProcAddr(handle, "glGetFenceivNV");
140 pfnProxyFinishFenceNV = glProxyGetExtProcAddr(handle, "glFinishFenceNV");
141 pfnProxySetFenceNV = glProxyGetExtProcAddr(handle, "glSetFenceNV");
142 pfnProxyCoverageMaskNV = glProxyGetExtProcAddr(handle, "glCoverageMaskNV");
143 pfnProxyCoverageOperationNV = glProxyGetExtProcAddr(handle, "glCoverageOperationNV");
144 pfnProxyGetDriverControlsQCOM = glProxyGetExtProcAddr(handle, "glGetDriverControlsQCOM");
145 pfnProxyGetDriverControlStringQCOM = glProxyGetExtProcAddr(handle, "glGetDriverControlStringQCOM");
146 pfnProxyEnableDriverControlQCOM = glProxyGetExtProcAddr(handle, "glEnableDriverControlQCOM");
147 pfnProxyDisableDriverControlQCOM = glProxyGetExtProcAddr(handle, "glDisableDriverControlQCOM");
148 pfnProxyExtGetTexturesQCOM = glProxyGetExtProcAddr(handle, "glExtGetTexturesQCOM");
149 pfnProxyExtGetBuffersQCOM = glProxyGetExtProcAddr(handle, "glExtGetBuffersQCOM");
150 pfnProxyExtGetRenderbuffersQCOM = glProxyGetExtProcAddr(handle, "glExtGetRenderbuffersQCOM");
151 pfnProxyExtGetFramebuffersQCOM = glProxyGetExtProcAddr(handle, "glExtGetFramebuffersQCOM");
152 pfnProxyExtGetTexLevelParameterivQCOM = glProxyGetExtProcAddr(handle, "glExtGetTexLevelParameterivQCOM");
153 pfnProxyExtTexObjectStateOverrideiQCOM = glProxyGetExtProcAddr(handle, "glExtTexObjectStateOverrideiQCOM");
154 pfnProxyExtGetTexSubImageQCOM = glProxyGetExtProcAddr(handle, "glExtGetTexSubImageQCOM");
155 pfnProxyExtGetBufferPointervQCOM = glProxyGetExtProcAddr(handle, "glExtGetBufferPointervQCOM");
156 pfnProxyExtGetShadersQCOM = glProxyGetExtProcAddr(handle, "glExtGetShadersQCOM");
157 pfnProxyExtGetProgramsQCOM = glProxyGetExtProcAddr(handle, "glExtGetProgramsQCOM");
158 pfnProxyExtIsProgramBinaryQCOM = glProxyGetExtProcAddr(handle, "glExtIsProgramBinaryQCOM");
159 pfnProxyExtGetProgramBinarySourceQCOM = glProxyGetExtProcAddr(handle, "glExtGetProgramBinarySourceQCOM");
160 pfnProxyStartTilingQCOM = glProxyGetExtProcAddr(handle, "glStartTilingQCOM");
161 pfnProxyEndTilingQCOM = glProxyGetExtProcAddr(handle, "glEndTilingQCOM");
162}
163
164int glProxyExtInitGL(void *handle)
165{
166 /* TODO */
167 return 0;
168}
1690
=== modified file 'src/glx_proxy.c'
--- src/glx_proxy.c 2011-09-13 16:03:17 +0000
+++ src/glx_proxy.c 2011-10-19 11:31:30 +0000
@@ -20,7 +20,9 @@
20 */20 */
2121
22/*22/*
23 * Authored-by: Jammy Zhou <jammy.zhou@linaro.org>23 * Authors:
24 * Jammy Zhou <jammy.zhou@linaro.org>
25 * Marc Ordinas i Llopis, Collabora Ltd <marc.ordinasillopis@linaro.org>
24 */26 */
2527
26#include <GL/gl_proxy.h>28#include <GL/gl_proxy.h>
@@ -66,92 +68,7 @@
66PFNPROXYSELECTEVENTPROC pfnProxySelectEvent = NULL;68PFNPROXYSELECTEVENTPROC pfnProxySelectEvent = NULL;
67PFNPROXYGETSELECTEDEVENTPROC pfnProxyGetSelectedEvent = NULL;69PFNPROXYGETSELECTEDEVENTPROC pfnProxyGetSelectedEvent = NULL;
6870
69/* GLX extension functions */
70PFNPROXYCREATECONTEXTATTRIBSARBPROC pfnProxyCreateContextAttribsARB = NULL;
71PFNPROXYSWAPINTERVALSGIPROC pfnProxySwapIntervalSGI = NULL;
72PFNPROXYGETVIDEOSYNCSGIPROC pfnProxyGetVideoSyncSGI = NULL;
73PFNPROXYWAITVIDEOSYNCSGIPROC pfnProxyWaitVideoSyncSGI = NULL;
74PFNPROXYMAKECURRENTREADSGIPROC pfnProxyMakeCurrentReadSGI = NULL;
75PFNPROXYGETCURRENTREADDRAWABLESGIPROC pfnProxyGetCurrentReadDrawableSGI = NULL;
76#ifdef _VL_H
77PFNPROXYCREATEGLXVIDEOSOURCESGIXPROC pfnProxyCreateGLXVideoSourceSGIX = NULL;
78PFNPROXYDESTROYGLXVIDEOSOURCESGIXPROC pfnProxyDestroyGLXVideoSourceSGIX = NULL;
79#endif
80PFNPROXYGETCURRENTDISPLAYEXTPROC pfnProxyGetCurrentDisplayEXT = NULL;
81PFNPROXYQUERYCONTEXTINFOEXTPROC pfnProxyQueryContextInfoEXT = NULL;
82PFNPROXYGETCONTEXTIDEXTPROC pfnProxyGetContextIDEXT = NULL;
83PFNPROXYIMPORTCONTEXTEXTPROC pfnProxyImportContextEXT = NULL;
84PFNPROXYFREECONTEXTEXTPROC pfnProxyFreeContextEXT = NULL;
85PFNPROXYGETFBCONFIGATTRIBSGIXPROC pfnProxyGetFBConfigAttribSGIX = NULL;
86PFNPROXYCHOOSEFBCONFIGSGIXPROC pfnProxyChooseFBConfigSGIX = NULL;
87PFNPROXYCREATEGLXPIXMAPWITHCONFIGSGIXPROC pfnProxyCreateGLXPixmapWithConfigSGIX = NULL;
88PFNPROXYCREATECONTEXTWITHCONFIGSGIXPROC pfnProxyCreateContextWithConfigSGIX = NULL;
89PFNPROXYGETVISUALFROMFBCONFIGSGIXPROC pfnProxyGetVisualFromFBConfigSGIX = NULL;
90PFNPROXYGETFBCONFIGFROMVISUALSGIXPROC pfnProxyGetFBConfigFromVisualSGIX = NULL;
91PFNPROXYCREATEGLXPBUFFERSGIXPROC pfnProxyCreateGLXPbufferSGIX = NULL;
92PFNPROXYDESTROYGLXPBUFFERSGIXPROC pfnProxyDestroyGLXPbufferSGIX = NULL;
93PFNPROXYQUERYGLXPBUFFERSGIXPROC pfnProxyQueryGLXPbufferSGIX = NULL;
94PFNPROXYSELECTEVENTSGIXPROC pfnProxySelectEventSGIX = NULL;
95PFNPROXYGETSELECTEDEVENTSGIXPROC pfnProxyGetSelectedEventSGIX = NULL;
96PFNPROXYCUSHIONSGIPROC pfnProxyCushionSGI = NULL;
97PFNPROXYBINDCHANNELTOWINDOWSGIXPROC pfnProxyBindChannelToWindowSGIX = NULL;
98PFNPROXYCHANNELRECTSGIXPROC pfnProxyChannelRectSGIX = NULL;
99PFNPROXYQUERYCHANNELRECTSGIXPROC pfnProxyQueryChannelRectSGIX = NULL;
100PFNPROXYQUERYCHANNELDELTASSGIXPROC pfnProxyQueryChannelDeltasSGIX = NULL;
101PFNPROXYCHANNELRECTSYNCSGIXPROC pfnProxyChannelRectSyncSGIX = NULL;
102#ifdef _DM_BUFFER_H
103PFNPROXYASSOCIATEDMPBUFFERSGIXPROC pfnProxyAssociateDMPbufferSGIX = NULL;
104#endif
105PFNPROXYJOINSWAPGROUPSGIXPROC pfnProxyJoinSwapGroupSGIX = NULL;
106PFNPROXYBINDSWAPBARRIERSGIXPROC pfnProxyBindSwapBarrierSGIX = NULL;
107PFNPROXYQUERYMAXSWAPBARRIERSSGIXPROC pfnProxyQueryMaxSwapBarriersSGIX = NULL;
108PFNPROXYGETTRANSPARENTINDEXSUNPROC pfnProxyGetTransparentIndexSUN = NULL;
109PFNPROXYCOPYSUBBUFFERMESAPROC pfnProxyCopySubBufferMESA = NULL;
110PFNPROXYCREATEGLXPIXMAPMESAPROC pfnProxyCreateGLXPixmapMESA = NULL;
111PFNPROXYRELEASEBUFFERSMESAPROC pfnProxyReleaseBuffersMESA = NULL;
112PFNPROXYSET3DFXMODEMESAPROC pfnProxySet3DfxModeMESA = NULL;
113PFNPROXYGETSYNCVALUESOMLPROC pfnProxyGetSyncValuesOML = NULL;
114PFNPROXYGETMSCRATEOMLPROC pfnProxyGetMscRateOML = NULL;
115PFNPROXYSWAPBUFFERSMSCOMLPROC pfnProxySwapBuffersMscOML = NULL;
116PFNPROXYWAITFORMSCOMLPROC pfnProxyWaitForMscOML = NULL;
117PFNPROXYWAITFORSBCOMLPROC pfnProxyWaitForSbcOML = NULL;
118PFNPROXYQUERYHYPERPIPENETWORKSGIXPROC pfnProxyQueryHyperpipeNetworkSGIX = NULL;
119PFNPROXYHYPERPIPECONFIGSGIXPROC pfnProxyHyperpipeConfigSGIX = NULL;
120PFNPROXYQUERYHYPERPIPECONFIGSGIXPROC pfnProxyQueryHyperpipeConfigSGIX = NULL;
121PFNPROXYDESTROYHYPERPIPECONFIGSGIXPROC pfnProxyDestroyHyperpipeConfigSGIX = NULL;
122PFNPROXYBINDHYPERPIPESGIXPROC pfnProxyBindHyperpipeSGIX = NULL;
123PFNPROXYQUERYHYPERPIPEBESTATTRIBSGIXPROC pfnProxyQueryHyperpipeBestAttribSGIX = NULL;
124PFNPROXYHYPERPIPEATTRIBSGIXPROC pfnProxyHyperpipeAttribSGIX = NULL;
125PFNPROXYQUERYHYPERPIPEATTRIBSGIXPROC pfnProxyQueryHyperpipeAttribSGIX = NULL;
126PFNPROXYGETAGPOFFSETMESAPROC pfnProxyGetAGPOffsetMESA = NULL;
127PFNPROXYBINDTEXIMAGEEXTPROC pfnProxyBindTexImageEXT = NULL;
128PFNPROXYRELEASETEXIMAGEEXTPROC pfnProxyReleaseTexImageEXT = NULL;
129PFNPROXYENUMERATEVIDEODEVICESNVPROC pfnProxyEnumerateVideoDevicesNV = NULL;
130PFNPROXYBINDVIDEODEVICENVPROC pfnProxyBindVideoDeviceNV = NULL;
131PFNPROXYGETVIDEODEVICENVPROC pfnProxyGetVideoDeviceNV = NULL;
132PFNPROXYRELEASEVIDEODEVICENVPROC pfnProxyReleaseVideoDeviceNV = NULL;
133PFNPROXYBINDVIDEOIMAGENVPROC pfnProxyBindVideoImageNV = NULL;
134PFNPROXYRELEASEVIDEOIMAGENVPROC pfnProxyReleaseVideoImageNV = NULL;
135PFNPROXYSENDPBUFFERTOVIDEONVPROC pfnProxySendPbufferToVideoNV = NULL;
136PFNPROXYGETVIDEOINFONVPROC pfnProxyGetVideoInfoNV = NULL;
137PFNPROXYJOINSWAPGROUPNVPROC pfnProxyJoinSwapGroupNV = NULL;
138PFNPROXYBINDSWAPBARRIERNVPROC pfnProxyBindSwapBarrierNV = NULL;
139PFNPROXYQUERYSWAPGROUPNVPROC pfnProxyQuerySwapGroupNV = NULL;
140PFNPROXYQUERYMAXSWAPGROUPSNVPROC pfnProxyQueryMaxSwapGroupsNV = NULL;
141PFNPROXYQUERYFRAMECOUNTNVPROC pfnProxyQueryFrameCountNV = NULL;
142PFNPROXYRESETFRAMECOUNTNVPROC pfnProxyResetFrameCountNV = NULL;
143PFNPROXYBINDVIDEOCAPTUREDEVICENVPROC pfnProxyBindVideoCaptureDeviceNV = NULL;
144PFNPROXYENUMERATEVIDEOCAPTUREDEVICESNVPROC pfnProxyEnumerateVideoCaptureDevicesNV = NULL;
145PFNPROXYLOCKVIDEOCAPTUREDEVICENVPROC pfnProxyLockVideoCaptureDeviceNV = NULL;
146PFNPROXYQUERYVIDEOCAPTUREDEVICENVPROC pfnProxyQueryVideoCaptureDeviceNV = NULL;
147PFNPROXYRELEASEVIDEOCAPTUREDEVICENVPROC pfnProxyReleaseVideoCaptureDeviceNV = NULL;
148PFNPROXYSWAPINTERVALEXTPROC pfnProxySwapIntervalEXT = NULL;
149PFNPROXYCOPYIMAGESUBDATANVPROC pfnProxyCopyImageSubDataNV = NULL;
150PFNPROXYSWAPINTERVALMESAPROC pfnProxySwapIntervalMESA = NULL;
151PFNPROXYGETSWAPINTERVALMESAPROC pfnProxyGetSwapIntervalMESA = NULL;
152
153extern void *glProxyGetProcAddr(void *handle, const char *name);71extern void *glProxyGetProcAddr(void *handle, const char *name);
154extern void *glProxyGetExtProcAddr(void *handle, const char *name);
15572
156int glxProxyInit(void *handle)73int glxProxyInit(void *handle)
157{74{
@@ -200,95 +117,3 @@
200117
201 return 0;118 return 0;
202}119}
203
204int glxProxyExtInit(void *handle)
205{
206 if (NULL == handle) {
207 return -1;
208 }
209
210 pfnProxyCreateContextAttribsARB = glProxyGetExtProcAddr(handle, "glXCreateContextAttribsARB");
211 pfnProxySwapIntervalSGI = glProxyGetExtProcAddr(handle, "glXSwapIntervalSGI");
212 pfnProxyGetVideoSyncSGI = glProxyGetExtProcAddr(handle, "glXGetVideoSyncSGI");
213 pfnProxyWaitVideoSyncSGI = glProxyGetExtProcAddr(handle, "glXWaitVideoSyncSGI");
214 pfnProxyMakeCurrentReadSGI = glProxyGetExtProcAddr(handle, "glXMakeCurrentReadSGI");
215 pfnProxyGetCurrentReadDrawableSGI = glProxyGetExtProcAddr(handle, "glXGetCurrentReadDrawableSGI");
216#ifdef _VL_H
217 pfnProxyCreateGLXVideoSourceSGIX = glProxyGetExtProcAddr(handle, "glXCreateGLXVideoSourceSGIX");
218 pfnProxyDestroyGLXVideoSourceSGIX = glProxyGetExtProcAddr(handle, "glXDestroyGLXVideoSourceSGIX");
219#endif
220 pfnProxyGetCurrentDisplayEXT = glProxyGetExtProcAddr(handle, "glXGetCurrentDisplayEXT");
221 pfnProxyQueryContextInfoEXT = glProxyGetExtProcAddr(handle, "glXQueryContextInfoEXT");
222 pfnProxyGetContextIDEXT = glProxyGetExtProcAddr(handle, "glXGetContextIDEXT");
223 pfnProxyImportContextEXT = glProxyGetExtProcAddr(handle, "glXImportContextEXT");
224 pfnProxyFreeContextEXT = glProxyGetExtProcAddr(handle, "glXFreeContextEXT");
225 pfnProxyGetFBConfigAttribSGIX = glProxyGetExtProcAddr(handle, "glXGetFBConfigAttribSGIX");
226 pfnProxyChooseFBConfigSGIX = glProxyGetExtProcAddr(handle, "glXChooseFBConfigSGIX");
227 pfnProxyCreateGLXPixmapWithConfigSGIX = glProxyGetExtProcAddr(handle, "glXCreateGLXPixmapWithConfigSGIX");
228 pfnProxyCreateContextWithConfigSGIX = glProxyGetExtProcAddr(handle, "glXCreateContextWithConfigSGIX");
229 pfnProxyGetVisualFromFBConfigSGIX = glProxyGetExtProcAddr(handle, "glXGetVisualFromFBConfigSGIX");
230 pfnProxyGetFBConfigFromVisualSGIX = glProxyGetExtProcAddr(handle, "glXGetFBConfigFromVisualSGIX");
231 pfnProxyCreateGLXPbufferSGIX = glProxyGetExtProcAddr(handle, "glXCreateGLXPbufferSGIX");
232 pfnProxyDestroyGLXPbufferSGIX = glProxyGetExtProcAddr(handle, "glXDestroyGLXPbufferSGIX");
233 pfnProxyQueryGLXPbufferSGIX = glProxyGetExtProcAddr(handle, "glXQueryGLXPbufferSGIX");
234 pfnProxySelectEventSGIX = glProxyGetExtProcAddr(handle, "glXSelectEventSGIX");
235 pfnProxyGetSelectedEventSGIX = glProxyGetExtProcAddr(handle, "glXGetSelectedEventSGIX");
236 pfnProxyCushionSGI = glProxyGetExtProcAddr(handle, "glXCushionSGI");
237 pfnProxyBindChannelToWindowSGIX = glProxyGetExtProcAddr(handle, "glXBindChannelToWindowSGIX");
238 pfnProxyChannelRectSGIX = glProxyGetExtProcAddr(handle, "glXChannelRectSGIX");
239 pfnProxyQueryChannelRectSGIX = glProxyGetExtProcAddr(handle, "glXQueryChannelRectSGIX");
240 pfnProxyQueryChannelDeltasSGIX = glProxyGetExtProcAddr(handle, "glXQueryChannelDeltasSGIX");
241 pfnProxyChannelRectSyncSGIX = glProxyGetExtProcAddr(handle, "glXChannelRectSyncSGIX");
242#ifdef _DM_BUFFER_H
243 pfnProxyAssociateDMPbufferSGIX = glProxyGetExtProcAddr(handle, "glXAssociateDMPbufferSGIX");
244#endif
245 pfnProxyJoinSwapGroupSGIX = glProxyGetExtProcAddr(handle, "glXJoinSwapGroupSGIX");
246 pfnProxyBindSwapBarrierSGIX = glProxyGetExtProcAddr(handle, "glXBindSwapBarrierSGIX");
247 pfnProxyQueryMaxSwapBarriersSGIX = glProxyGetExtProcAddr(handle, "glXQueryMaxSwapBarriersSGIX");
248 pfnProxyGetTransparentIndexSUN = glProxyGetExtProcAddr(handle, "glXGetTransparentIndexSUN");
249 pfnProxyCopySubBufferMESA = glProxyGetExtProcAddr(handle, "glXCopySubBufferMESA");
250 pfnProxyCreateGLXPixmapMESA = glProxyGetExtProcAddr(handle, "glXCreateGLXPixmapMESA");
251 pfnProxyReleaseBuffersMESA = glProxyGetExtProcAddr(handle, "glXReleaseBuffersMESA");
252 pfnProxySet3DfxModeMESA = glProxyGetExtProcAddr(handle, "glXSet3DfxModeMESA");
253 pfnProxyGetSyncValuesOML = glProxyGetExtProcAddr(handle, "glXGetSyncValuesOML");
254 pfnProxyGetMscRateOML = glProxyGetExtProcAddr(handle, "glXGetMscRateOML");
255 pfnProxySwapBuffersMscOML = glProxyGetExtProcAddr(handle, "glXSwapBuffersMscOML");
256 pfnProxyWaitForMscOML = glProxyGetExtProcAddr(handle, "glXWaitForMscOML");
257 pfnProxyWaitForSbcOML = glProxyGetExtProcAddr(handle, "glXWaitForSbcOML");
258 pfnProxyQueryHyperpipeNetworkSGIX = glProxyGetExtProcAddr(handle, "glXQueryHyperpipeNetworkSGIX");
259 pfnProxyHyperpipeConfigSGIX = glProxyGetExtProcAddr(handle, "glXHyperpipeConfigSGIX");
260 pfnProxyQueryHyperpipeConfigSGIX = glProxyGetExtProcAddr(handle, "glXQueryHyperpipeConfigSGIX");
261 pfnProxyDestroyHyperpipeConfigSGIX = glProxyGetExtProcAddr(handle, "glXDestroyHyperpipeConfigSGIX");
262 pfnProxyBindHyperpipeSGIX = glProxyGetExtProcAddr(handle, "glXBindHyperpipeSGIX");
263 pfnProxyQueryHyperpipeBestAttribSGIX = glProxyGetExtProcAddr(handle, "glXQueryHyperpipeBestAttribSGIX");
264 pfnProxyHyperpipeAttribSGIX = glProxyGetExtProcAddr(handle, "glXHyperpipeAttribSGIX");
265 pfnProxyQueryHyperpipeAttribSGIX = glProxyGetExtProcAddr(handle, "glXQueryHyperpipeAttribSGIX");
266 pfnProxyGetAGPOffsetMESA = glProxyGetExtProcAddr(handle, "glXGetAGPOffsetMESA");
267 pfnProxyBindTexImageEXT = glProxyGetExtProcAddr(handle, "glXBindTexImageEXT");
268 pfnProxyReleaseTexImageEXT = glProxyGetExtProcAddr(handle, "glXReleaseTexImageEXT");
269 pfnProxyEnumerateVideoDevicesNV = glProxyGetExtProcAddr(handle, "glXEnumerateVideoDevicesNV");
270 pfnProxyBindVideoDeviceNV = glProxyGetExtProcAddr(handle, "glXBindVideoDeviceNV");
271 pfnProxyGetVideoDeviceNV = glProxyGetExtProcAddr(handle, "glXGetVideoDeviceNV");
272 pfnProxyReleaseVideoDeviceNV = glProxyGetExtProcAddr(handle, "glXReleaseVideoDeviceNV");
273 pfnProxyBindVideoImageNV = glProxyGetExtProcAddr(handle, "glXBindVideoImageNV");
274 pfnProxyReleaseVideoImageNV = glProxyGetExtProcAddr(handle, "glXReleaseVideoImageNV");
275 pfnProxySendPbufferToVideoNV = glProxyGetExtProcAddr(handle, "glXSendPbufferToVideoNV");
276 pfnProxyGetVideoInfoNV = glProxyGetExtProcAddr(handle, "glXGetVideoInfoNV");
277 pfnProxyJoinSwapGroupNV = glProxyGetExtProcAddr(handle, "glXJoinSwapGroupNV");
278 pfnProxyBindSwapBarrierNV = glProxyGetExtProcAddr(handle, "glXBindSwapBarrierNV");
279 pfnProxyQuerySwapGroupNV = glProxyGetExtProcAddr(handle, "glXQuerySwapGroupNV");
280 pfnProxyQueryMaxSwapGroupsNV = glProxyGetExtProcAddr(handle, "glXQueryMaxSwapGroupsNV");
281 pfnProxyQueryFrameCountNV = glProxyGetExtProcAddr(handle, "glXQueryFrameCountNV");
282 pfnProxyResetFrameCountNV = glProxyGetExtProcAddr(handle, "glXResetFrameCountNV");
283 pfnProxyBindVideoCaptureDeviceNV = glProxyGetExtProcAddr(handle, "glXBindVideoCaptureDeviceNV");
284 pfnProxyEnumerateVideoCaptureDevicesNV = glProxyGetExtProcAddr(handle, "glXEnumerateVideoCaptureDevicesNV");
285 pfnProxyLockVideoCaptureDeviceNV = glProxyGetExtProcAddr(handle, "glXLockVideoCaptureDeviceNV");
286 pfnProxyQueryVideoCaptureDeviceNV = glProxyGetExtProcAddr(handle, "glXQueryVideoCaptureDeviceNV");
287 pfnProxyReleaseVideoCaptureDeviceNV = glProxyGetExtProcAddr(handle, "glXReleaseVideoCaptureDeviceNV");
288 pfnProxySwapIntervalEXT = glProxyGetExtProcAddr(handle, "glXSwapIntervalEXT");
289 pfnProxyCopyImageSubDataNV = glProxyGetExtProcAddr(handle, "glXCopyImageSubDataNV");
290 pfnProxySwapIntervalMESA = glProxyGetExtProcAddr(handle, "glXSwapIntervalMESA");
291 pfnProxyGetSwapIntervalMESA = glProxyGetExtProcAddr(handle, "glXGetSwapIntervalMESA");
292
293 return 0;
294}
295120
=== modified file 'tests/tfp/egl_tfp.c'
--- tests/tfp/egl_tfp.c 2011-05-04 07:10:32 +0000
+++ tests/tfp/egl_tfp.c 2011-10-19 11:31:30 +0000
@@ -103,6 +103,8 @@
103 PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR;103 PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR;
104 PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR;104 PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR;
105105
106 PFNPROXYEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES;
107
106 /* Shaders */108 /* Shaders */
107 GLfloat projection_matrix[16];109 GLfloat projection_matrix[16];
108 GLfloat model_view_matrix[16];110 GLfloat model_view_matrix[16];
@@ -253,8 +255,8 @@
253 * must be re-attached.255 * must be re-attached.
254 */256 */
255 if (data->options.use_egl_image) {257 if (data->options.use_egl_image) {
256 glEGLImageTargetTexture2DOES(GL_TEXTURE_2D,258 data->glEGLImageTargetTexture2DOES(GL_TEXTURE_2D,
257 (GLeglImageOES) data->img);259 (GLeglImageOES) data->img);
258 }260 }
259 else {261 else {
260 /* Normal texture data upload */262 /* Normal texture data upload */
@@ -495,12 +497,19 @@
495497
496 exts = eglQueryString(data->dpy, EGL_EXTENSIONS);498 exts = eglQueryString(data->dpy, EGL_EXTENSIONS);
497 printf("EGL extensions: %s\n", exts);499 printf("EGL extensions: %s\n", exts);
500
501 data->glEGLImageTargetTexture2DOES =
502 (PFNPROXYEGLIMAGETARGETTEXTURE2DOESPROC) glProxyGetExtProcAddr("GL_OES_EGL_image", "glEGLImageTargetTexture2DOES");
503 if (!exts || !data->glEGLImageTargetTexture2DOES) {
504 printf("EGL does not support GL_OES_EGL_image\n");
505 return False;
506 }
507
498 data->eglCreateImageKHR =508 data->eglCreateImageKHR =
499 (PFNEGLCREATEIMAGEKHRPROC) eglGetProcAddress("eglCreateImageKHR");509 (PFNEGLCREATEIMAGEKHRPROC) glProxyGetExtProcAddr("EGL_KHR_image_pixmap", "eglCreateImageKHR");
500 data->eglDestroyImageKHR =510 data->eglDestroyImageKHR =
501 (PFNEGLDESTROYIMAGEKHRPROC) eglGetProcAddress("eglDestroyImageKHR");511 (PFNEGLDESTROYIMAGEKHRPROC) glProxyGetExtProcAddr("EGL_KHR_image_pixmap", "eglDestroyImageKHR");
502 if (!exts || !strstr(exts, "EGL_KHR_image_pixmap") ||512 if (!exts || !data->eglCreateImageKHR || !data->eglDestroyImageKHR) {
503 !data->eglCreateImageKHR || !data->eglDestroyImageKHR) {
504 printf("EGL does not support EGL_KHR_image_pixmap\n");513 printf("EGL does not support EGL_KHR_image_pixmap\n");
505 return False;514 return False;
506 }515 }
507516
=== modified file 'tests/tfp/glx_tfp.c'
--- tests/tfp/glx_tfp.c 2011-01-05 15:48:46 +0000
+++ tests/tfp/glx_tfp.c 2011-10-19 11:31:30 +0000
@@ -76,6 +76,9 @@
7676
77static float top, bottom;77static float top, bottom;
7878
79PFNPROXYBINDTEXIMAGEEXTPROC glXBindTexImageEXT_ = NULL;
80PFNPROXYRELEASETEXIMAGEEXTPROC glXReleaseTexImageEXT_ = NULL;
81
79static Display *82static Display *
80OpenDisplay(void)83OpenDisplay(void)
81{84{
@@ -91,13 +94,15 @@
9194
92 screen = DefaultScreen(dpy);95 screen = DefaultScreen(dpy);
93 ext = glXQueryExtensionsString(dpy, screen);96 ext = glXQueryExtensionsString(dpy, screen);
94 if (!strstr(ext, "GLX_EXT_texture_from_pixmap")) {97 printf("GLX extensions: %s\n", ext);
95 fprintf(stderr, "GLX_EXT_texture_from_pixmap not supported.\n");98
96 exit(1);99 glXBindTexImageEXT_ = (PFNPROXYBINDTEXIMAGEEXTPROC)
97 }100 glProxyGetExtProcAddr("GLX_EXT_texture_from_pixmap", "glXBindTexImageEXT");
98101 glXReleaseTexImageEXT_ = (PFNPROXYRELEASETEXIMAGEEXTPROC)
99 if (!glXBindTexImageEXT || !glXReleaseTexImageEXT) {102 glProxyGetExtProcAddr("GLX_EXT_texture_from_pixmap", "glXReleaseTexImageEXT");
100 fprintf(stderr, "glXGetProcAddress failed!\n");103
104 if (!glXBindTexImageEXT_ || !glXReleaseTexImageEXT_) {
105 fprintf(stderr, "glProxyGetProcAddress failed!\n");
101 exit(1);106 exit(1);
102 }107 }
103 108
@@ -312,14 +317,14 @@
312 glGenTextures(1, &texture);317 glGenTextures(1, &texture);
313 glBindTexture(GL_TEXTURE_2D, texture);318 glBindTexture(GL_TEXTURE_2D, texture);
314319
315 glXBindTexImageEXT(dpy, gp, GLX_FRONT_LEFT_EXT, NULL);320 glXBindTexImageEXT_(dpy, gp, GLX_FRONT_LEFT_EXT, NULL);
316321
317 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);322 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
318 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);323 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
319324
320 glEnable(GL_TEXTURE_2D);325 glEnable(GL_TEXTURE_2D);
321 /*326 /*
322 glXReleaseTexImageEXT(display, glxpixmap, GLX_FRONT_LEFT_EXT);327 glXReleaseTexImageEXT_(display, glxpixmap, GLX_FRONT_LEFT_EXT);
323 */328 */
324}329}
325330

Subscribers

People subscribed via source and target branches