trace all EGL extensions
Chia-I Wu
olvaffe at gmail.com
Thu Dec 1 02:24:57 PST 2011
On Thu, Dec 1, 2011 at 5:29 PM, José Fonseca <jose.r.fonseca at gmail.com> wrote:
> On Thu, Dec 1, 2011 at 7:20 AM, Chia-I Wu <olvaffe at gmail.com> wrote:
>> Hi,
>>
>> I've spent some time adding all EGL extensions to specs/eglapi.py.
>> The changes are available at
>>
>> https://github.com/olvaffe/apitrace/commits/trace-egl-extensions
>>
>> $ git diff --stat master..trace-egl-extensions
>> specs/eglapi.py | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 files changed, 177 insertions(+), 0 deletions(-)
>>
>> It was just a tedious process to go through the specs and eglext.h to
>> add the entrypoints, types, and enums.
>
> I don't know what process you used to generate these, but I added a
> bit more documentation on the spec/scripts FWIW.
>
> gltxt.py doesn't handle enums or new types, but it now handles
> prototypes reasonably well:
I did not know about this script! I had to do that manually.
I will run the scripts to verify my changes.
> $ ./gltxt.py --prefix=
> http://www.khronos.org/registry/egl/extensions/NV/EGL_NV_sync.txt
> # EGL_NV_sync
> GlFunction(EGLSyncNV, "eglCreateFenceSyncNV", [(EGLDisplay,
> "dpy"), (EGLenum, "condition"), (Const(OpaquePointer(EGLint)),
> "attrib_list")]),
> GlFunction(EGLBoolean, "eglDestroySyncNV", [(EGLSyncNV, "sync")]),
> GlFunction(EGLBoolean, "eglFenceNV", [(EGLSyncNV, "sync")]),
> GlFunction(EGLint, "eglClientWaitSyncNV", [(EGLSyncNV, "sync"),
> (EGLint, "flags"), (EGLTimeNV, "timeout")]),
> GlFunction(EGLBoolean, "eglSignalSyncNV", [(EGLSyncNV, "sync"),
> (EGLenum, "mode")]),
> GlFunction(EGLBoolean, "eglGetSyncAttribNV", [(EGLSyncNV, "sync"),
> (EGLint, "attribute"), (OpaquePointer(EGLint), "value")]),
>
> It should be easy to make it handle enums too.
>
> I noticed that you separated the enums:
>
> +EGLSyncKHRType = FakeEnum(EGLenum, [
> + "EGL_SYNC_REUSABLE_KHR", # 0x30FA
> +
> + # EGL_KHR_fence_sync
> + "EGL_SYNC_FENCE_KHR", # 0x30F9
> +])
> +
> +EGLSyncKHRAttrib = FakeEnum(EGLint, [
> + "EGL_SYNC_STATUS_KHR", # 0x30F1
> + "EGL_SYNC_TYPE_KHR", # 0x30F7
> +
> + # EGL_KHR_fence_sync
> + "EGL_SYNC_CONDITION_KHR", # 0x30F8
> +
> + "EGL_NONE",
> +])
> +
> +EGLSyncKHRMode = FakeEnum(EGLenum, [
> + "EGL_SIGNALED_KHR", # 0x30F2
> + "EGL_UNSIGNALED_KHR", # 0x30F3
> +])
> +
>
> Although this is more "correct", I think this is more trouble than
> it's worth, specially because same enums are often used in different
> parameters (often with different semantics). So for Khronos APIs I
> only separate the enums when they overlap (e.g, GL_NONE, GL_ZERO,
> etc), or for bitmask. So I'd suggest you
>
> EGLenum = Enum('EGLenum", [
> ...
> "EGL_SYNC_STATUS_KHR", # 0x30F1
> "EGL_SIGNALED_KHR", # 0x30F2
> "EGL_UNSIGNALED_KHR", # 0x30F3
> "EGL_SYNC_TYPE_KHR", # 0x30F7
> "EGL_SYNC_CONDITION_KHR", # 0x30F8
> "EGL_SYNC_FENCE_KHR", # 0x30F9
> "EGL_SYNC_REUSABLE_KHR", # 0x30FA
> ....
> ])
That makes sense. I will merge the enums. I followed glxapi.py to
separate them, but it now seems to have too many kinds of enums for no
good reason.
But this example will not work. Where EGL_SYNC_STATUS_KHR is used
expects EGLint, not EGLenum. Maybe I should have
EGLenum = Enum("EGLenum", [
# enums that are used in EGLenum
"EGL_NATIVE_PIXMAP_KHR",
...
])
EGLattrib = FakeEnum(EGLint, [
# enums that are used in EGLint
"EGL_SYNC_STATUS_KHR",
...
])
>> If there is no objection, I'd like to merge it sometime tomorrow.
>
> I'm fine with you merginging the branch as is BTW. My comments above
> are merely suggestions for future improvements.
Thanks. I prefer to merge the branch, and clean eglapi.py up in
follow-on commits if that's ok.
> Jose
--
olv at LunarG.com
More information about the apitrace
mailing list