Bug 739421 - Implement/expose ARB_sync in GLContext - r=bjacob

This commit is contained in:
Jeff Gilbert 2012-04-06 16:57:55 -07:00
parent 58f7ff90d4
commit 7d33dde9d8
4 changed files with 118 additions and 1 deletions

View File

@ -107,6 +107,7 @@ static const char *sExtensionNames[] = {
"GL_OES_rgb8_rgba8",
"GL_ARB_robustness",
"GL_EXT_robustness",
"GL_ARB_sync",
NULL
};
@ -450,6 +451,32 @@ GLContext::InitWithPrefix(const char *prefix, bool trygl)
mSymbols.fRenderbufferStorageMultisample = nsnull;
}
}
if (IsExtensionSupported(ARB_sync)) {
SymLoadStruct syncSymbols[] = {
{ (PRFuncPtr*) &mSymbols.fFenceSync, { "FenceSync", nsnull } },
{ (PRFuncPtr*) &mSymbols.fIsSync, { "IsSync", nsnull } },
{ (PRFuncPtr*) &mSymbols.fDeleteSync, { "DeleteSync", nsnull } },
{ (PRFuncPtr*) &mSymbols.fClientWaitSync, { "ClientWaitSync", nsnull } },
{ (PRFuncPtr*) &mSymbols.fWaitSync, { "WaitSync", nsnull } },
{ (PRFuncPtr*) &mSymbols.fGetInteger64v, { "GetInteger64v", nsnull } },
{ (PRFuncPtr*) &mSymbols.fGetSynciv, { "GetSynciv", nsnull } },
{ nsnull, { nsnull } },
};
if (!LoadSymbols(&syncSymbols[0], trygl, prefix)) {
NS_ERROR("GL supports ARB_sync without supplying its functions.");
MarkExtensionUnsupported(ARB_sync);
mSymbols.fFenceSync = nsnull;
mSymbols.fIsSync = nsnull;
mSymbols.fDeleteSync = nsnull;
mSymbols.fClientWaitSync = nsnull;
mSymbols.fWaitSync = nsnull;
mSymbols.fGetInteger64v = nsnull;
mSymbols.fGetSynciv = nsnull;
}
}
// Load developer symbols, don't fail if we can't find them.
SymLoadStruct auxSymbols[] = {

View File

@ -1500,6 +1500,7 @@ public:
OES_rgb8_rgba8,
ARB_robustness,
EXT_robustness,
ARB_sync,
Extensions_Max
};
@ -2898,6 +2899,51 @@ public:
return ret;
}
GLsync GLAPIENTRY fFenceSync(GLenum condition, GLbitfield flags) {
BEFORE_GL_CALL;
GLsync ret = mSymbols.fFenceSync(condition, flags);
AFTER_GL_CALL;
return ret;
}
realGLboolean GLAPIENTRY fIsSync(GLsync sync) {
BEFORE_GL_CALL;
realGLboolean ret = mSymbols.fIsSync(sync);
AFTER_GL_CALL;
return ret;
}
void GLAPIENTRY fDeleteSync(GLsync sync) {
BEFORE_GL_CALL;
mSymbols.fDeleteSync(sync);
AFTER_GL_CALL;
}
GLenum GLAPIENTRY fClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {
BEFORE_GL_CALL;
GLenum ret = mSymbols.fClientWaitSync(sync, flags, timeout);
AFTER_GL_CALL;
return ret;
}
void GLAPIENTRY fWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {
BEFORE_GL_CALL;
mSymbols.fWaitSync(sync, flags, timeout);
AFTER_GL_CALL;
}
void GLAPIENTRY fGetInteger64v(GLenum pname, GLint64 *params) {
BEFORE_GL_CALL;
mSymbols.fGetInteger64v(pname, params);
AFTER_GL_CALL;
}
void GLAPIENTRY fGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values) {
BEFORE_GL_CALL;
mSymbols.fGetSynciv(sync, pname, bufSize, length, values);
AFTER_GL_CALL;
}
#ifdef DEBUG
void THEBES_API CreatedProgram(GLContext *aOrigin, GLuint aName);
void THEBES_API CreatedShader(GLContext *aOrigin, GLuint aName);

View File

@ -40,6 +40,8 @@
#ifndef GLCONTEXTSYMBOLS_H_
#define GLCONTEXTSYMBOLS_H_
#include "GLDefs.h"
/*
* This file should only be included by GLContext.h, and should be
* autogenerated in the future.
@ -381,6 +383,24 @@ struct GLContextSymbols
typedef GLenum (GLAPIENTRY * PFNGLGETGRAPHICSRESETSTATUS) (void);
PFNGLGETGRAPHICSRESETSTATUS fGetGraphicsResetStatus;
/*
* ARB_sync extension
*/
typedef GLsync (GLAPIENTRY * PFNGLFENCESYNC) (GLenum condition, GLbitfield flags);
PFNGLFENCESYNC fFenceSync;
typedef realGLboolean (GLAPIENTRY * PFNGLISSYNC) (GLsync sync);
PFNGLISSYNC fIsSync;
typedef void (GLAPIENTRY * PFNGLDELETESYNC) (GLsync sync);
PFNGLDELETESYNC fDeleteSync;
typedef GLenum (GLAPIENTRY * PFNGLCLIENTWAITSYNC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
PFNGLCLIENTWAITSYNC fClientWaitSync;
typedef void (GLAPIENTRY * PFNGLWAITSYNC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
PFNGLWAITSYNC fWaitSync;
typedef void (GLAPIENTRY * PFNGLGETINTEGER64V) (GLenum pname, GLint64 *params);
PFNGLGETINTEGER64V fGetInteger64v;
typedef void (GLAPIENTRY * PFNGLGETSYNCIV) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
PFNGLGETSYNCIV fGetSynciv;
};
}

View File

@ -37,7 +37,6 @@
* ***** END LICENSE BLOCK ***** */
#if !defined(LOCALGL_H_)
#define LOCALGL_H_
#if !defined(__gltypes_h_) && !defined(__gl_h_)
@ -72,6 +71,14 @@ typedef ptrdiff_t GLintptr;
#endif /* #if !defined(__gltypes_h_) && !defined(__gl_h_) */
#include "mozilla/StandardInteger.h"
// ARB_sync
typedef struct __GLsync *GLsync;
typedef int64_t GLint64;
typedef uint64_t GLuint64;
#ifndef GLAPIENTRY
# ifdef WIN32
# define GLAPIENTRY APIENTRY
@ -3032,6 +3039,23 @@ typedef ptrdiff_t GLintptr;
#define LOCAL_GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC
#define LOCAL_GL_WIN_swap_hint 1
// ARB_sync
#define LOCAL_GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
#define LOCAL_GL_OBJECT_TYPE 0x9112
#define LOCAL_GL_SYNC_CONDITION 0x9113
#define LOCAL_GL_SYNC_STATUS 0x9114
#define LOCAL_GL_SYNC_FLAGS 0x9115
#define LOCAL_GL_SYNC_FENCE 0x9116
#define LOCAL_GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
#define LOCAL_GL_UNSIGNALED 0x9118
#define LOCAL_GL_SIGNALED 0x9119
#define LOCAL_GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
#define LOCAL_GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
#define LOCAL_GL_ALREADY_SIGNALED 0x911A
#define LOCAL_GL_TIMEOUT_EXPIRED 0x911B
#define LOCAL_GL_CONDITION_SATISFIED 0x911C
#define LOCAL_GL_WAIT_FAILED 0x911D
#define LOCAL_GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
#define LOCAL_GL_MAX_VARYING_VECTORS 0x8DFC
#define LOCAL_GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD