summaryrefslogtreecommitdiff
path: root/dom/canvas
diff options
context:
space:
mode:
Diffstat (limited to 'dom/canvas')
-rw-r--r--dom/canvas/WebGLContextTextures.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/dom/canvas/WebGLContextTextures.cpp b/dom/canvas/WebGLContextTextures.cpp
index 30716438f5..66138361ab 100644
--- a/dom/canvas/WebGLContextTextures.cpp
+++ b/dom/canvas/WebGLContextTextures.cpp
@@ -390,6 +390,16 @@ WebGLContext::TexImage(const char* funcName, uint8_t funcDims, GLenum rawTarget,
if (!ValidateTexImageTarget(this, funcName, funcDims, rawTarget, &target, &tex))
return;
+ const bool isUploadFromPbo = bool(src.mPboOffset);
+ const bool isPboBound = bool(mBoundPixelUnpackBuffer);
+ if (isUploadFromPbo != isPboBound) {
+ SynthesizeGLError(LOCAL_GL_INVALID_OPERATION,
+ "Tex upload from %s but PIXEL_UNPACK_BUFFER %s bound.",
+ isUploadFromPbo ? "PBO" : "non-PBO",
+ isPboBound ? "was" : "was not");
+ return;
+ }
+
const webgl::PackingInfo pi = {unpackFormat, unpackType};
tex->TexImage(funcName, target, level, internalFormat, width, height, depth, border,
pi, src);
@@ -407,6 +417,16 @@ WebGLContext::TexSubImage(const char* funcName, uint8_t funcDims, GLenum rawTarg
if (!ValidateTexImageTarget(this, funcName, funcDims, rawTarget, &target, &tex))
return;
+ const bool isUploadFromPbo = bool(src.mPboOffset);
+ const bool isPboBound = bool(mBoundPixelUnpackBuffer);
+ if (isUploadFromPbo != isPboBound) {
+ SynthesizeGLError(LOCAL_GL_INVALID_OPERATION,
+ "Tex upload from %s but PIXEL_UNPACK_BUFFER %s bound.",
+ isUploadFromPbo ? "PBO" : "non-PBO",
+ isPboBound ? "was" : "was not");
+ return;
+ }
+
const webgl::PackingInfo pi = {unpackFormat, unpackType};
tex->TexSubImage(funcName, target, level, xOffset, yOffset, zOffset, width, height,
depth, pi, src);