From 54bdb5a0c8b1409f57f330d93c34e4442c4c6ab7 Mon Sep 17 00:00:00 2001 From: Andreas Hartmetz Date: Mon, 8 Jul 2013 12:31:45 +0200 Subject: [PATCH] Proper AttribArray / attrib_list support for applicable EGL functions. The functions are: eglChooseConfig eglCreateWindowSurface eglCreatePbufferSurface eglCreatePixmapSurface eglCreatePbufferFromClientBuffer eglCreateContext eglCreateImageKHR eglCreateDRMImageMESA --- specs/eglapi.py | 97 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 89 insertions(+), 8 deletions(-) diff --git a/specs/eglapi.py b/specs/eglapi.py index cc95840..59610eb 100644 --- a/specs/eglapi.py +++ b/specs/eglapi.py @@ -78,6 +78,87 @@ eglapi = Module("EGL") EGLAttribList = Array(Const(EGLattrib), "_AttribPairList_size(attrib_list, EGL_NONE)") +EGLSurfaceFlags = Flags(Int, [ + 'EGL_MULTISAMPLE_RESOLVE_BOX_BIT', + 'EGL_PBUFFER_BIT', + 'EGL_PIXMAP_BIT', + 'EGL_SWAP_BEHAVIOR_PRESERVED_BIT', + 'EGL_VG_ALPHA_FORMAT_PRE_BIT', + 'EGL_VG_COLORSPACE_LINEAR_BIT', + 'EGL_WINDOW_BIT' +]) + +EGLConformantFlags = Flags(Int, ['EGL_OPENGL_BIT','EGL_OPENGL_ES_BIT', 'EGL_OPENGL_ES2_BIT', 'EGL_OPENVG_BIT',]) + +EGLConfigAttribs = AttribArray(EGLenum, [ + ('EGL_ALPHA_MASK_SIZE', UInt), + ('EGL_ALPHA_SIZE', UInt), + ('EGL_BIND_TO_TEXTURE_RGB', EGLBoolean), + ('EGL_BIND_TO_TEXTURE_RGBA', EGLBoolean), + ('EGL_BLUE_SIZE', UInt), + ('EGL_BUFFER_SIZE', UInt), + ('EGL_COLOR_BUFFER_TYPE', FakeEnum(Int, ['EGL_RGB_BUFFER', 'EGL_LUMINANCE_BUFFER'])), + ('EGL_CONFIG_CAVEAT', FakeEnum(Int, ['EGL_DONT_CARE', 'EGL_NONE', 'EGL_SLOW_CONFIG', 'EGL_NON_CONFORMANT_CONFIG'])), + ('EGL_CONFIG_ID', Int), + ('EGL_CONFORMANT', EGLConformantFlags), + ('EGL_DEPTH_SIZE', Int), + ('EGL_GREEN_SIZE', UInt), + ('EGL_LEVEL', Int), + ('EGL_LUMINANCE_SIZE', UInt), + ('EGL_MATCH_NATIVE_PIXMAP', Int), + ('EGL_NATIVE_RENDERABLE', FakeEnum(Int, ['EGL_DONT_CARE', 'EGL_TRUE', 'EGL_FALSE'])), + ('EGL_MAX_SWAP_INTERVAL', Int), + ('EGL_MIN_SWAP_INTERVAL', Int), + ('EGL_RED_SIZE', UInt), + ('EGL_SAMPLE_BUFFERS', Int), + ('EGL_SAMPLES', Int), + ('EGL_STENCIL_SIZE', UInt), + ('EGL_RENDERABLE_TYPE', EGLConformantFlags), + ('EGL_SURFACE_TYPE', EGLSurfaceFlags), + ('EGL_TRANSPARENT_TYPE', FakeEnum(Int, ['EGL_NONE', 'EGL_TRANSPARENT_RGB'])), + ('EGL_TRANSPARENT_RED_VALUE', Int), + ('EGL_TRANSPARENT_GREEN_VALUE', Int), + ('EGL_TRANSPARENT_BLUE_VALUE ', Int) +]) + +EGLVGAlphaFormat = FakeEnum(Int, ['EGL_VG_ALPHA_FORMAT_NONPRE', 'EGL_VG_ALPHA_FORMAT_PRE']) +EGLVGColorspace = FakeEnum(Int, ['EGL_VG_COLORSPACE_sRGB', 'EGL_VG_COLORSPACE_LINEAR']) +EGLTextureFormat = FakeEnum(Int, ['EGL_NO_TEXTURE', 'EGL_TEXTURE_RGB', 'EGL_TEXTURE_RGBA']) +EGLTextureTarget = FakeEnum(Int, ['EGL_TEXTURE_2D', 'EGL_NO_TEXTURE' ]) + +EGLWindowsSurfaceAttribs = AttribArray(EGLenum, [ + ('EGL_RENDER_BUFFER', FakeEnum(Int, ['EGL_SINGLE_BUFFER', 'EGL_BACK_BUFFER'])), + ('EGL_VG_ALPHA_FORMAT', EGLVGAlphaFormat), + ('EGL_VG_COLORSPACE', EGLVGColorspace) +]) + +EGLPixmapSurfaceAttribs = AttribArray(EGLenum, [ + ('EGL_VG_ALPHA_FORMAT', EGLVGAlphaFormat), + ('EGL_VG_COLORSPACE', EGLVGColorspace) +]) + +EGLPbufferAttribs = AttribArray(EGLenum, [ + ('EGL_HEIGHT', Int), + ('EGL_LARGEST_PBUFFER', EGLBoolean), + ('EGL_MIPMAP_TEXTURE', UInt), + ('EGL_TEXTURE_FORMAT', EGLTextureFormat), + ('EGL_TEXTURE_TARGET', EGLTextureTarget), + ('EGL_VG_ALPHA_FORMAT', EGLVGAlphaFormat), + ('EGL_VG_COLORSPACE', EGLVGColorspace), + ('EGL_WIDTH', Int) +]) + +EGLPbufferFromClientBufferAttribs = AttribArray(EGLenum, [ + ('EGL_MIPMAP_TEXTURE', EGLBoolean), + ('EGL_TEXTURE_FORMAT', EGLTextureFormat), + ('EGL_TEXTURE_TARGET', EGLTextureTarget) +]) + +EGLDrmImageMesaAttribs = AttribArray(EGLenum, [ + ('EGL_DRM_BUFFER_FORMAT_MESA', FakeEnum(Int, ['EGL_DRM_BUFFER_FORMAT_ARGB32_MESA'])), + ('EGL_DRM_BUFFER_USE_MESA', Flags(Int, ['EGL_DRM_BUFFER_USE_SCANOUT_MESA', 'EGL_DRM_BUFFER_USE_SHARE_MESA'])) +]) + EGLProc = Opaque("__eglMustCastToProperFunctionPointerType") def GlFunction(*args, **kwargs): @@ -95,12 +176,12 @@ eglapi.addFunctions([ Function(ConstCString, "eglQueryString", [(EGLDisplay, "dpy"), (EGLint_enum, "name")], sideeffects=False), Function(EGLBoolean, "eglGetConfigs", [(EGLDisplay, "dpy"), (Array(EGLConfig, "config_size"), "configs"), (EGLint, "config_size"), Out(Pointer(EGLint), "num_config")]), - Function(EGLBoolean, "eglChooseConfig", [(EGLDisplay, "dpy"), (EGLAttribList, "attrib_list"), (Array(EGLConfig, "config_size"), "configs"), (EGLint, "config_size"), Out(Pointer(EGLint), "num_config")]), + Function(EGLBoolean, "eglChooseConfig", [(EGLDisplay, "dpy"), (EGLConfigAttribs, "attrib_list"), (Array(EGLConfig, "config_size"), "configs"), (EGLint, "config_size"), Out(Pointer(EGLint), "num_config")]), Function(EGLBoolean, "eglGetConfigAttrib", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLattrib, "attribute"), Out(Pointer(EGLint), "value")], sideeffects=False), - Function(EGLSurface, "eglCreateWindowSurface", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLNativeWindowType, "win"), (EGLAttribList, "attrib_list")]), - Function(EGLSurface, "eglCreatePbufferSurface", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLAttribList, "attrib_list")]), - Function(EGLSurface, "eglCreatePixmapSurface", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLNativePixmapType, "pixmap"), (EGLAttribList, "attrib_list")]), + Function(EGLSurface, "eglCreateWindowSurface", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLNativeWindowType, "win"), (EGLWindowsSurfaceAttribs, "attrib_list")]), + Function(EGLSurface, "eglCreatePbufferSurface", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLPbufferAttribs, "attrib_list")]), + Function(EGLSurface, "eglCreatePixmapSurface", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLNativePixmapType, "pixmap"), (EGLPixmapSurfaceAttribs, "attrib_list")]), Function(EGLBoolean, "eglDestroySurface", [(EGLDisplay, "dpy"), (EGLSurface, "surface")]), Function(EGLBoolean, "eglQuerySurface", [(EGLDisplay, "dpy"), (EGLSurface, "surface"), (EGLattrib, "attribute"), Out(Pointer(EGLint), "value")], sideeffects=False), @@ -111,7 +192,7 @@ eglapi.addFunctions([ Function(EGLBoolean, "eglReleaseThread", []), - Function(EGLSurface, "eglCreatePbufferFromClientBuffer", [(EGLDisplay, "dpy"), (EGLenum, "buftype"), (EGLClientBuffer, "buffer"), (EGLConfig, "config"), (EGLAttribList, "attrib_list")]), + Function(EGLSurface, "eglCreatePbufferFromClientBuffer", [(EGLDisplay, "dpy"), (EGLenum, "buftype"), (EGLClientBuffer, "buffer"), (EGLConfig, "config"), (EGLPbufferFromClientBufferAttribs, "attrib_list")]), Function(EGLBoolean, "eglSurfaceAttrib", [(EGLDisplay, "dpy"), (EGLSurface, "surface"), (EGLattrib, "attribute"), (EGLint, "value")]), Function(EGLBoolean, "eglBindTexImage", [(EGLDisplay, "dpy"), (EGLSurface, "surface"), (EGLattrib, "buffer")]), @@ -119,7 +200,7 @@ eglapi.addFunctions([ Function(EGLBoolean, "eglSwapInterval", [(EGLDisplay, "dpy"), (EGLint, "interval")]), - Function(EGLContext, "eglCreateContext", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLContext, "share_context"), (EGLAttribList, "attrib_list")]), + Function(EGLContext, "eglCreateContext", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (EGLContext, "share_context"), (AttribArray(EGLenum, [('EGL_CONTEXT_CLIENT_VERSION', Int)]), "attrib_list")]), Function(EGLBoolean, "eglDestroyContext", [(EGLDisplay, "dpy"), (EGLContext, "ctx")]), Function(EGLBoolean, "eglMakeCurrent", [(EGLDisplay, "dpy"), (EGLSurface, "draw"), (EGLSurface, "read"), (EGLContext, "ctx")]), @@ -142,7 +223,7 @@ eglapi.addFunctions([ Function(EGLBoolean, "eglUnlockSurfaceKHR", [(EGLDisplay, "display"), (EGLSurface, "surface")]), # EGL_KHR_image_base - Function(EGLImageKHR, "eglCreateImageKHR", [(EGLDisplay, "dpy"), (EGLContext, "ctx"), (EGLenum, "target"), (EGLClientBuffer, "buffer"), (EGLAttribList, "attrib_list")]), + Function(EGLImageKHR, "eglCreateImageKHR", [(EGLDisplay, "dpy"), (EGLContext, "ctx"), (EGLenum, "target"), (EGLClientBuffer, "buffer"), (AttribArray(EGLenum, [('EGL_IMAGE_PRESERVED_KHR', EGLBoolean)]), "attrib_list")]), Function(EGLBoolean, "eglDestroyImageKHR", [(EGLDisplay, "dpy"), (EGLImageKHR, "image")]), # EGL_KHR_fence_sync @@ -165,7 +246,7 @@ eglapi.addFunctions([ Function(EGLSurface, "eglCreatePixmapSurfaceHI", [(EGLDisplay, "dpy"), (EGLConfig, "config"), (Pointer(EGLClientPixmapHI), "pixmap")]), # EGL_MESA_drm_image - Function(EGLImageKHR, "eglCreateDRMImageMESA", [(EGLDisplay, "dpy"), (EGLAttribList, "attrib_list")]), + Function(EGLImageKHR, "eglCreateDRMImageMESA", [(EGLDisplay, "dpy"), (EGLDrmImageMesaAttribs, "attrib_list")]), Function(EGLBoolean, "eglExportDRMImageMESA", [(EGLDisplay, "dpy"), (EGLImageKHR, "image"), Out(Pointer(EGLint), "name"), Out(Pointer(EGLint), "handle"), Out(Pointer(EGLint), "stride")]), # EGL_NV_post_sub_buffer -- 2.43.0