mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 762263 - Add EGLSync - r=bjacob
This commit is contained in:
parent
102120e83e
commit
f8c10a1c5b
@ -75,6 +75,7 @@ static const char *sExtensionNames[] = {
|
||||
"GL_EXT_robustness",
|
||||
"GL_ARB_sync",
|
||||
"GL_OES_EGL_image",
|
||||
"GL_OES_EGL_sync",
|
||||
nsnull
|
||||
};
|
||||
|
||||
|
@ -1505,6 +1505,7 @@ public:
|
||||
EXT_robustness,
|
||||
ARB_sync,
|
||||
OES_EGL_image,
|
||||
OES_EGL_sync,
|
||||
Extensions_Max
|
||||
};
|
||||
|
||||
|
@ -3252,4 +3252,18 @@ typedef void* GLeglImage;
|
||||
#define LOCAL_EGL_READ 0x305A
|
||||
#define LOCAL_EGL_DRAW 0x3059
|
||||
#define LOCAL_EGL_CONTEXT_LOST 0x300E
|
||||
|
||||
// EGL_KHR_fence_sync
|
||||
#define LOCAL_EGL_SYNC_FENCE 0x30F9
|
||||
#define LOCAL_EGL_SYNC_TYPE 0x30F7
|
||||
#define LOCAL_EGL_SYNC_STATUS 0x30F1
|
||||
#define LOCAL_EGL_SYNC_CONDITION 0x30F8
|
||||
#define LOCAL_EGL_SIGNALED 0x30F2
|
||||
#define LOCAL_EGL_UNSIGNALED 0x30F3
|
||||
#define LOCAL_EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0
|
||||
#define LOCAL_EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001
|
||||
#define LOCAL_EGL_FOREVER 0xFFFFFFFFFFFFFFFFull
|
||||
#define LOCAL_EGL_TIMEOUT_EXPIRED 0x30F5
|
||||
#define LOCAL_EGL_CONDITION_SATISFIED 0x30F6
|
||||
|
||||
#endif
|
||||
|
@ -20,6 +20,7 @@ static const char *sExtensionNames[] = {
|
||||
"EGL_ANGLE_surface_d3d_texture_2d_share_handle",
|
||||
"EGL_EXT_create_context_robustness",
|
||||
"EGL_KHR_image",
|
||||
"EGL_KHR_fence_sync",
|
||||
nsnull
|
||||
};
|
||||
|
||||
@ -243,6 +244,30 @@ GLLibraryEGL::EnsureInitialized()
|
||||
}
|
||||
}
|
||||
|
||||
if (IsExtensionSupported(KHR_fence_sync)) {
|
||||
GLLibraryLoader::SymLoadStruct syncSymbols[] = {
|
||||
{ (PRFuncPtr*) &mSymbols.fCreateSync, { "eglCreateSyncKHR", nsnull } },
|
||||
{ (PRFuncPtr*) &mSymbols.fDestroySync, { "eglDestroySyncKHR", nsnull } },
|
||||
{ (PRFuncPtr*) &mSymbols.fClientWaitSync, { "eglClientWaitSyncKHR", nsnull } },
|
||||
{ (PRFuncPtr*) &mSymbols.fGetSyncAttrib, { "eglGetSyncAttribKHR", nsnull } },
|
||||
{ nsnull, { nsnull } }
|
||||
};
|
||||
|
||||
bool success = GLLibraryLoader::LoadSymbols(mEGLLibrary,
|
||||
&syncSymbols[0],
|
||||
lookupFunction);
|
||||
if (!success) {
|
||||
NS_ERROR("EGL supports KHR_fence_sync without exposing its functions!");
|
||||
|
||||
MarkExtensionUnsupported(KHR_fence_sync);
|
||||
|
||||
mSymbols.fCreateSync = nsnull;
|
||||
mSymbols.fDestroySync = nsnull;
|
||||
mSymbols.fClientWaitSync = nsnull;
|
||||
mSymbols.fGetSyncAttrib = nsnull;
|
||||
}
|
||||
}
|
||||
|
||||
mInitialized = true;
|
||||
reporter.SetSuccessful();
|
||||
return true;
|
||||
|
@ -24,6 +24,8 @@ typedef void *EGLSurface;
|
||||
typedef void *EGLClientBuffer;
|
||||
typedef void *EGLCastToRelevantPtr;
|
||||
typedef void *EGLImage;
|
||||
typedef void *EGLSync;
|
||||
typedef uint64_t EGLTime;
|
||||
|
||||
#if defined(XP_WIN)
|
||||
|
||||
@ -65,6 +67,7 @@ typedef void *EGLNativeWindowType;
|
||||
#define EGL_NO_CONTEXT ((EGLContext)0)
|
||||
#define EGL_NO_DISPLAY ((EGLDisplay)0)
|
||||
#define EGL_NO_SURFACE ((EGLSurface)0)
|
||||
#define EGL_NO_SYNC ((EGLSync)0)
|
||||
|
||||
#define EGL_DISPLAY() sEGLLibrary.Display()
|
||||
|
||||
@ -128,6 +131,7 @@ public:
|
||||
ANGLE_surface_d3d_texture_2d_share_handle,
|
||||
EXT_create_context_robustness,
|
||||
KHR_image,
|
||||
KHR_fence_sync,
|
||||
Extensions_Max
|
||||
};
|
||||
|
||||
@ -385,6 +389,38 @@ public:
|
||||
return b;
|
||||
}
|
||||
|
||||
EGLSync fCreateSync(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
|
||||
{
|
||||
BEFORE_GL_CALL;
|
||||
EGLSync ret = mSymbols.fCreateSync(dpy, type, attrib_list);
|
||||
AFTER_GL_CALL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
EGLBoolean fDestroySync(EGLDisplay dpy, EGLSync sync)
|
||||
{
|
||||
BEFORE_GL_CALL;
|
||||
EGLBoolean b = mSymbols.fDestroySync(dpy, sync);
|
||||
AFTER_GL_CALL;
|
||||
return b;
|
||||
}
|
||||
|
||||
EGLint fClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout)
|
||||
{
|
||||
BEFORE_GL_CALL;
|
||||
EGLint ret = mSymbols.fClientWaitSync(dpy, sync, flags, timeout);
|
||||
AFTER_GL_CALL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
EGLBoolean fGetSyncAttrib(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLint *value)
|
||||
{
|
||||
BEFORE_GL_CALL;
|
||||
EGLBoolean b = mSymbols.fGetSyncAttrib(dpy, sync, attribute, value);
|
||||
AFTER_GL_CALL;
|
||||
return b;
|
||||
}
|
||||
|
||||
EGLDisplay Display() {
|
||||
return mEGLDisplay;
|
||||
}
|
||||
@ -488,6 +524,15 @@ public:
|
||||
|
||||
typedef EGLBoolean (GLAPIENTRY * pfnQuerySurfacePointerANGLE)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
|
||||
pfnQuerySurfacePointerANGLE fQuerySurfacePointerANGLE;
|
||||
|
||||
typedef EGLSync (GLAPIENTRY * pfnCreateSync)(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
|
||||
pfnCreateSync fCreateSync;
|
||||
typedef EGLBoolean (GLAPIENTRY * pfnDestroySync)(EGLDisplay dpy, EGLSync sync);
|
||||
pfnDestroySync fDestroySync;
|
||||
typedef EGLint (GLAPIENTRY * pfnClientWaitSync)(EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
|
||||
pfnClientWaitSync fClientWaitSync;
|
||||
typedef EGLBoolean (GLAPIENTRY * pfnGetSyncAttrib)(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLint *value);
|
||||
pfnGetSyncAttrib fGetSyncAttrib;
|
||||
} mSymbols;
|
||||
|
||||
private:
|
||||
|
Loading…
Reference in New Issue
Block a user