mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1048721 - Implement WebGL2Sync. r=jgilbert
This commit is contained in:
parent
57f2d0718c
commit
483e253e65
@ -4,7 +4,9 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "WebGL2Context.h"
|
||||
|
||||
#include "GLContext.h"
|
||||
#include "WebGLSync.h"
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
@ -15,38 +17,117 @@ using namespace mozilla::dom;
|
||||
already_AddRefed<WebGLSync>
|
||||
WebGL2Context::FenceSync(GLenum condition, GLbitfield flags)
|
||||
{
|
||||
MOZ_CRASH("Not Implemented.");
|
||||
return nullptr;
|
||||
if (IsContextLost())
|
||||
return nullptr;
|
||||
|
||||
if (condition != LOCAL_GL_SYNC_GPU_COMMANDS_COMPLETE) {
|
||||
ErrorInvalidEnum("fenceSync: condition must be SYNC_GPU_COMMANDS_COMPLETE");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (flags != 0) {
|
||||
ErrorInvalidValue("fenceSync: flags must be 0");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
MakeContextCurrent();
|
||||
nsRefPtr<WebGLSync> globj = new WebGLSync(this, condition, flags);
|
||||
return globj.forget();
|
||||
}
|
||||
|
||||
bool
|
||||
WebGL2Context::IsSync(WebGLSync* sync)
|
||||
{
|
||||
MOZ_CRASH("Not Implemented.");
|
||||
return false;
|
||||
if (IsContextLost())
|
||||
return false;
|
||||
|
||||
return ValidateObjectAllowDeleted("isSync", sync) && !sync->IsDeleted();
|
||||
}
|
||||
|
||||
void
|
||||
WebGL2Context::DeleteSync(WebGLSync* sync)
|
||||
{
|
||||
MOZ_CRASH("Not Implemented.");
|
||||
if (IsContextLost())
|
||||
return;
|
||||
|
||||
if (!ValidateObjectAllowDeletedOrNull("deleteSync", sync))
|
||||
return;
|
||||
|
||||
if (!sync || sync->IsDeleted())
|
||||
return;
|
||||
|
||||
sync->RequestDelete();
|
||||
}
|
||||
|
||||
GLenum
|
||||
WebGL2Context::ClientWaitSync(WebGLSync* sync, GLbitfield flags, GLuint64 timeout)
|
||||
{
|
||||
MOZ_CRASH("Not Implemented.");
|
||||
return LOCAL_GL_FALSE;
|
||||
if (IsContextLost())
|
||||
return LOCAL_GL_WAIT_FAILED;
|
||||
|
||||
if (!sync || sync->IsDeleted()) {
|
||||
ErrorInvalidValue("clientWaitSync: sync is not a sync object.");
|
||||
return LOCAL_GL_WAIT_FAILED;
|
||||
}
|
||||
|
||||
if (flags != 0 && flags != LOCAL_GL_SYNC_FLUSH_COMMANDS_BIT) {
|
||||
ErrorInvalidValue("clientWaitSync: flag must be SYNC_FLUSH_COMMANDS_BIT or 0");
|
||||
return LOCAL_GL_WAIT_FAILED;
|
||||
}
|
||||
|
||||
MakeContextCurrent();
|
||||
return gl->fClientWaitSync(sync->mGLName, flags, timeout);
|
||||
}
|
||||
|
||||
void
|
||||
WebGL2Context::WaitSync(WebGLSync* sync, GLbitfield flags, GLuint64 timeout)
|
||||
{
|
||||
MOZ_CRASH("Not Implemented.");
|
||||
if (IsContextLost())
|
||||
return;
|
||||
|
||||
if (!sync || sync->IsDeleted()) {
|
||||
ErrorInvalidValue("waitSync: sync is not a sync object.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (flags != 0) {
|
||||
ErrorInvalidValue("waitSync: flags must be 0");
|
||||
return;
|
||||
}
|
||||
|
||||
if (timeout != LOCAL_GL_TIMEOUT_IGNORED) {
|
||||
ErrorInvalidValue("waitSync: timeout must be TIMEOUT_IGNORED");
|
||||
return;
|
||||
}
|
||||
|
||||
MakeContextCurrent();
|
||||
gl->fWaitSync(sync->mGLName, flags, timeout);
|
||||
}
|
||||
|
||||
void
|
||||
WebGL2Context::GetSyncParameter(JSContext*, WebGLSync* sync, GLenum pname, JS::MutableHandleValue retval)
|
||||
{
|
||||
MOZ_CRASH("Not Implemented.");
|
||||
if (IsContextLost())
|
||||
return;
|
||||
|
||||
if (!sync || sync->IsDeleted()) {
|
||||
ErrorInvalidValue("getSyncParameter: sync is not a sync object.");
|
||||
return;
|
||||
}
|
||||
|
||||
retval.set(JS::NullValue());
|
||||
|
||||
GLint result = 0;
|
||||
switch (pname) {
|
||||
case LOCAL_GL_OBJECT_TYPE:
|
||||
case LOCAL_GL_SYNC_STATUS:
|
||||
case LOCAL_GL_SYNC_CONDITION:
|
||||
case LOCAL_GL_SYNC_FLAGS:
|
||||
MakeContextCurrent();
|
||||
gl->fGetSynciv(sync->mGLName, pname, 1, nullptr, &result);
|
||||
retval.set(JS::Int32Value(result));
|
||||
break;
|
||||
}
|
||||
|
||||
ErrorInvalidEnum("getSyncParameter: Invalid pname 0x%04x", pname);
|
||||
}
|
||||
|
@ -1591,6 +1591,7 @@ public:
|
||||
friend class WebGLBuffer;
|
||||
friend class WebGLSampler;
|
||||
friend class WebGLShader;
|
||||
friend class WebGLSync;
|
||||
friend class WebGLTransformFeedback;
|
||||
friend class WebGLUniformLocation;
|
||||
friend class WebGLVertexArray;
|
||||
|
@ -9,26 +9,30 @@
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
WebGLSync::WebGLSync(WebGLContext* webgl):
|
||||
WebGLContextBoundObject(webgl)
|
||||
WebGLSync::WebGLSync(WebGLContext* webgl, GLenum condition, GLbitfield flags)
|
||||
: WebGLContextBoundObject(webgl)
|
||||
{
|
||||
MOZ_CRASH("Not Implemented.");
|
||||
mGLName = mContext->gl->fFenceSync(condition, flags);
|
||||
}
|
||||
|
||||
WebGLSync::~WebGLSync()
|
||||
{}
|
||||
{
|
||||
DeleteOnce();
|
||||
}
|
||||
|
||||
void
|
||||
WebGLSync::Delete()
|
||||
{
|
||||
MOZ_CRASH("Not Implemented.");
|
||||
mContext->MakeContextCurrent();
|
||||
mContext->gl->fDeleteSync(mGLName);
|
||||
mGLName = 0;
|
||||
LinkedListElement<WebGLSync>::remove();
|
||||
}
|
||||
|
||||
WebGLContext*
|
||||
WebGLSync::GetParentObject() const
|
||||
{
|
||||
MOZ_CRASH("Not Implemented.");
|
||||
return nullptr;
|
||||
return Context();
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
|
@ -21,7 +21,7 @@ class WebGLSync final
|
||||
friend class WebGL2Context;
|
||||
|
||||
public:
|
||||
explicit WebGLSync(WebGLContext* webgl);
|
||||
WebGLSync(WebGLContext* webgl, GLenum condition, GLbitfield flags);
|
||||
|
||||
void Delete();
|
||||
WebGLContext* GetParentObject() const;
|
||||
@ -33,6 +33,8 @@ public:
|
||||
|
||||
private:
|
||||
~WebGLSync();
|
||||
|
||||
GLsync mGLName;
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
Loading…
Reference in New Issue
Block a user