mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:18:48 +00:00
cbff465051
- Bug 1167420 - Handle fallible AppendElement call in netwerk/base/Dashboard.cpp. r=valentin (a485b8990) - Bug 968520 - Add mozilla::fallible to FallibleTArray::AppendElement calls. r=froydnj (12a529a0e) - Bug 1172584 - Avoid coping FallibleTArray in SendRequestRunnable constructor. r=dragana (c3a4a4253) - Bug 948466: Rename gfxPangoFonts to gfxFontconfigFonts. r=nical (43eed1f5f) - Bug 968520 - Add mozilla::fallible to more FallibleTArray calls. r=froydnj (339968a1d) - Bug 1166544 - Assume successful InsertElementAt calls in DOMSVG*List::MaybeInsertNullInAnimValListAt. r=dholbert (cf687dad7) - Bug 968520 - Add mozilla::fallible to FallibleTArray::InsertElementAt calls. r=froydnj (cc5c68ff2) - Bug 968520 - Add mozilla::fallible to more FallibleTArray::InsertElementsAt calls. r=froydnj (66df1d034) - Bug 1165735 - Make ThreadSharedFloatArrayBufferList::mContents infallible. r=roc (eda2839db) - Bug 1166544 - Use ReplaceElementAt instead of Clear and InsertElementAt in SVGMotionSMILType::Add. r=dholbert (474887a8c) - Bug 1167418 - Check AppendElement call in MediaQueryList. r=heycam (b6ed6d153) - Bug 1167418 - Use nsTArray instead of FallibleTArray in MediaQueryList. r=heycam (c9e3816d0) - Bug 1167418 - Follow-up: Fix bustage (5015e91ce) - Bug 1174220 - Part 1: Remove capacity constructor of MediaLargeByteBuffer. r=jya (66819d3e4) - Bug 1179282 - Use nsTArray::Assign instead of the assignment operator in dom/svg/. r=dholbert (cb3d43c19) - Bug 968520 - Add nsTArray::Assign. r=froydnj (e5eccf354) - Bug 1182277, don't leak when using nsAutoTArray inside nsTArray, r=nfroyd (bba32394c) - Bug 1143575. Avoid including Android's GraphicBuffer.h from LayersTypes.h. r=nical (99e4e2816) - Bug 1143575. Avoid use of COMPARE macro which can clash with Android headers. r=bent (99cfc74c4) - Bug 1143575. Add RefBase #include to stagefright stubs. r=cpearce (f9e327600) - Bug 1143575. test_HaveMetadataUnbufferedSeek should not wait for canplay since preload='metadata' elements may not fire canplay. r=cpearce (f1b0eee27) - Bug 1143575. Make GL context current before cleaning up programs. r=nical (d7b05b2bd) - partial Bug 1143575. Android's screenshotting code should invalidate the LayrManagerComposite to ensure composition will actually happen. r=nical (58fb296ab) - Bug 1143575. Remove unused Image::IsSentToCompositor tracking. r=nical (808d0b3f0) - Bug 1143575. Remove unused CompositionNotifySink. r=nical (98a332305) - Bug 1143575. Remove unused VideoFrameContainer::Reset. r=nical (e292bc722) - Bug 1143575. Rename mAsyncTransactionTrackeres to mAsyncTransactionTrackers. r=nical (df71ebf4f) - Bug 1143575. Remove unused ImageContainer::ResetPaintCount. r=nical (a92c5bf6e) - Bug 1143575. Remove unused VideoFrameContainer::ClearCurrentFrame aResetSize parameter. r=nical (5d3c9b83a) - Bug 1143575. Remove unused ReturnReleaseFence. r=nical (9d6ea92b5) - Bug 1143575. LayerManagerComposite can't get END_NO_COMPOSITE. r=mattwoodrow (0c5c364b5) - Bug 1143575. Remove unused AttachAsyncCompositable overload. r=nical (5fd3d4f6d) - Bug 1143575. Rename ImageBridgeChild's AutoRemoteTextures to AutoRemoveTexturesFromImageBridge to avoid clashes with later work. r=nical (34d67fcc0) - Bug 1143575. Fix some code formatting. r=nical (1d7f30f60) - Bug 1143575. Move mLayer from ImageClientBridge up into its superclass ImageClient. r=nical (40c902a36) - Bug 1127336 - Label HW-decoded frames with correct origin. - r=vlad (fd1580bcd) - Bug 1167504 - Part 1: Remove BindableName - Framebuffer. r=jgilbert (b3133eee6) - Bug 1167504 - Part 2: Remove BindableName - Renderbuffer. r=jgilbert (155a7e796) - Bug 1167504 - Part 3: Remove BindableName - Sampler. r=jgilbert (8c5c68960) - Bug 1167504 - Part 4: Remove BindableName - Texture. r=jgilbert (28077db04) - Bug 1167504 - Part 5: Remove BindableName - Transform Feedback. r=jgilbert (4fd839598) - Bug 1170454: Fix up instance type for VAOs. r=smaug,r=jgilbert (cc62d993a) - Bug 1167504 - Part 6: Remove BindableName - Vertex Array. r=jgilbert (1d54d5bc1) - Bug 1048724 - Implement GetBufferSubData. r=jgilbert, r=smaug (06570aa84) - Bug 1167504 - Part 7: Remove BindableName - Buffer. r=jgilbert (b2ddf3fc6)
254 lines
7.1 KiB
C++
254 lines
7.1 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "WebGL2Context.h"
|
|
#include "WebGLActiveInfo.h"
|
|
#include "WebGLProgram.h"
|
|
#include "WebGLTransformFeedback.h"
|
|
#include "GLContext.h"
|
|
|
|
using namespace mozilla;
|
|
using namespace mozilla::dom;
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Transform Feedback
|
|
|
|
already_AddRefed<WebGLTransformFeedback>
|
|
WebGL2Context::CreateTransformFeedback()
|
|
{
|
|
if (IsContextLost())
|
|
return nullptr;
|
|
|
|
GLuint tf = 0;
|
|
MakeContextCurrent();
|
|
gl->fGenTransformFeedbacks(1, &tf);
|
|
|
|
nsRefPtr<WebGLTransformFeedback> globj = new WebGLTransformFeedback(this, tf);
|
|
return globj.forget();
|
|
}
|
|
|
|
void
|
|
WebGL2Context::DeleteTransformFeedback(WebGLTransformFeedback* tf)
|
|
{
|
|
if (IsContextLost())
|
|
return;
|
|
|
|
if (!ValidateObjectAllowDeletedOrNull("deleteTransformFeedback", tf))
|
|
return;
|
|
|
|
if (!tf || tf->IsDeleted())
|
|
return;
|
|
|
|
if (mBoundTransformFeedback == tf)
|
|
BindTransformFeedback(LOCAL_GL_TRANSFORM_FEEDBACK, tf);
|
|
|
|
tf->RequestDelete();
|
|
}
|
|
|
|
bool
|
|
WebGL2Context::IsTransformFeedback(WebGLTransformFeedback* tf)
|
|
{
|
|
if (IsContextLost())
|
|
return false;
|
|
|
|
if (!ValidateObjectAllowDeleted("isTransformFeedback", tf))
|
|
return false;
|
|
|
|
if (tf->IsDeleted())
|
|
return false;
|
|
|
|
MakeContextCurrent();
|
|
return gl->fIsTransformFeedback(tf->mGLName);
|
|
}
|
|
|
|
void
|
|
WebGL2Context::BindTransformFeedback(GLenum target, WebGLTransformFeedback* tf)
|
|
{
|
|
if (IsContextLost())
|
|
return;
|
|
|
|
if (!ValidateObjectAllowDeletedOrNull("bindTransformFeedback", tf))
|
|
return;
|
|
|
|
if (target != LOCAL_GL_TRANSFORM_FEEDBACK)
|
|
return ErrorInvalidEnum("bindTransformFeedback: target must be TRANSFORM_FEEDBACK");
|
|
|
|
WebGLRefPtr<WebGLTransformFeedback> currentTF = mBoundTransformFeedback;
|
|
if (currentTF && currentTF->mIsActive && !currentTF->mIsPaused) {
|
|
return ErrorInvalidOperation("bindTransformFeedback: Currently bound transform "
|
|
"feedback is active and not paused");
|
|
}
|
|
|
|
if (tf && tf->IsDeleted())
|
|
return ErrorInvalidOperation("bindTransformFeedback: Attempt to bind deleted id");
|
|
|
|
MakeContextCurrent();
|
|
gl->fBindTransformFeedback(target, tf ? tf->mGLName : 0);
|
|
if (tf)
|
|
mBoundTransformFeedback = tf;
|
|
else
|
|
mBoundTransformFeedback = mDefaultTransformFeedback;
|
|
}
|
|
|
|
void
|
|
WebGL2Context::BeginTransformFeedback(GLenum primitiveMode)
|
|
{
|
|
if (IsContextLost())
|
|
return;
|
|
|
|
WebGLTransformFeedback* tf = mBoundTransformFeedback;
|
|
MOZ_ASSERT(tf);
|
|
if (!tf)
|
|
return;
|
|
|
|
if (tf->mIsActive)
|
|
return ErrorInvalidOperation("beginTransformFeedback: transform feedback is active");
|
|
|
|
const GLenum mode = tf->mMode;
|
|
if (mode != LOCAL_GL_POINTS && mode != LOCAL_GL_LINES && mode != LOCAL_GL_TRIANGLES)
|
|
return ErrorInvalidEnum("beginTransformFeedback: primitive must be one of POINTS, LINES, or TRIANGLES");
|
|
|
|
// TODO:
|
|
// GL_INVALID_OPERATION is generated by glBeginTransformFeedback
|
|
// if any binding point used in transform feedback mode does not
|
|
// have a buffer object bound. In interleaved mode, only the first
|
|
// buffer object binding point is ever written to.
|
|
|
|
// GL_INVALID_OPERATION is generated by glBeginTransformFeedback
|
|
// if no binding points would be used, either because no program
|
|
// object is active of because the active program object has
|
|
// specified no varying variables to record.
|
|
if (!mCurrentProgram)
|
|
return ErrorInvalidOperation("beginTransformFeedback: no program is active");
|
|
|
|
MakeContextCurrent();
|
|
gl->fBeginTransformFeedback(primitiveMode);
|
|
tf->mIsActive = true;
|
|
tf->mIsPaused = false;
|
|
}
|
|
|
|
void
|
|
WebGL2Context::EndTransformFeedback()
|
|
{
|
|
if (IsContextLost())
|
|
return;
|
|
|
|
WebGLTransformFeedback* tf = mBoundTransformFeedback;
|
|
MOZ_ASSERT(tf);
|
|
|
|
if (!tf)
|
|
return;
|
|
|
|
if (!tf->mIsActive)
|
|
return ErrorInvalidOperation("%s: transform feedback in not active",
|
|
"endTransformFeedback");
|
|
|
|
MakeContextCurrent();
|
|
gl->fEndTransformFeedback();
|
|
tf->mIsActive = false;
|
|
tf->mIsPaused = false;
|
|
}
|
|
|
|
void
|
|
WebGL2Context::PauseTransformFeedback()
|
|
{
|
|
if (IsContextLost())
|
|
return;
|
|
|
|
WebGLTransformFeedback* tf = mBoundTransformFeedback;
|
|
MOZ_ASSERT(tf);
|
|
if (!tf)
|
|
return;
|
|
|
|
if (!tf->mIsActive || tf->mIsPaused) {
|
|
return ErrorInvalidOperation("%s: transform feedback is not active or is paused",
|
|
"pauseTransformFeedback");
|
|
}
|
|
|
|
MakeContextCurrent();
|
|
gl->fPauseTransformFeedback();
|
|
tf->mIsPaused = true;
|
|
}
|
|
|
|
void
|
|
WebGL2Context::ResumeTransformFeedback()
|
|
{
|
|
if (IsContextLost())
|
|
return;
|
|
|
|
WebGLTransformFeedback* tf = mBoundTransformFeedback;
|
|
MOZ_ASSERT(tf);
|
|
if (!tf)
|
|
return;
|
|
|
|
if (!tf->mIsActive || !tf->mIsPaused)
|
|
return ErrorInvalidOperation("resumeTransformFeedback: transform feedback is not active or is not paused");
|
|
|
|
MakeContextCurrent();
|
|
gl->fResumeTransformFeedback();
|
|
tf->mIsPaused = false;
|
|
}
|
|
|
|
void
|
|
WebGL2Context::TransformFeedbackVaryings(WebGLProgram* program,
|
|
const dom::Sequence<nsString>& varyings,
|
|
GLenum bufferMode)
|
|
{
|
|
if (IsContextLost())
|
|
return;
|
|
|
|
if (!ValidateObject("transformFeedbackVaryings: program", program))
|
|
return;
|
|
|
|
GLsizei count = varyings.Length();
|
|
GLchar** tmpVaryings = (GLchar**) moz_xmalloc(count * sizeof(GLchar*));
|
|
|
|
for (GLsizei n = 0; n < count; n++) {
|
|
tmpVaryings[n] = (GLchar*) ToNewCString(varyings[n]);
|
|
}
|
|
|
|
GLuint progname = program->mGLName;
|
|
MakeContextCurrent();
|
|
gl->fTransformFeedbackVaryings(progname, count, tmpVaryings, bufferMode);
|
|
|
|
NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(count, tmpVaryings);
|
|
}
|
|
|
|
already_AddRefed<WebGLActiveInfo>
|
|
WebGL2Context::GetTransformFeedbackVarying(WebGLProgram* program, GLuint index)
|
|
{
|
|
if (IsContextLost())
|
|
return nullptr;
|
|
|
|
if (!ValidateObject("getTransformFeedbackVarying: program", program))
|
|
return nullptr;
|
|
|
|
MakeContextCurrent();
|
|
|
|
GLint len = 0;
|
|
GLuint progname = program->mGLName;
|
|
gl->fGetProgramiv(progname, LOCAL_GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH, &len);
|
|
if (!len)
|
|
return nullptr;
|
|
|
|
UniquePtr<char[]> name(new char[len]);
|
|
GLint tfsize = 0;
|
|
GLuint tftype = 0;
|
|
|
|
gl->fGetTransformFeedbackVarying(progname, index, len, &len, &tfsize, &tftype, name.get());
|
|
if (len == 0 || tfsize == 0 || tftype == 0)
|
|
return nullptr;
|
|
|
|
MOZ_CRASH("todo");
|
|
/*
|
|
// Reverse lookup of name
|
|
nsCString reverseMappedName;
|
|
prog->ReverveMapIdentifier(nsDependentCString(name), &reverseMappedName);
|
|
|
|
nsRefPtr<WebGLActiveInfo> result = new WebGLActiveInfo(tfsize, tftype, nsDependentCString(name.get()));
|
|
return result.forget();
|
|
*/
|
|
}
|