diff options
author | Moonchild <moonchild@palemoon.org> | 2021-03-24 12:16:08 +0000 |
---|---|---|
committer | Moonchild <moonchild@palemoon.org> | 2021-03-24 12:16:08 +0000 |
commit | 75dbd532f5e7ac30bb8fb943538cae15b9517dd3 (patch) | |
tree | ecb5f8cb300ac1216168d425a65c49e12134d127 | |
parent | 021fecdedca2b32d80966411f51637126b58bc67 (diff) | |
download | uxp-75dbd532f5e7ac30bb8fb943538cae15b9517dd3.tar.gz |
[WebGL] Only allow texture uploads from pixelbuffer if bound.
Throw an error if it mismatches.
-rw-r--r-- | dom/canvas/WebGLContextTextures.cpp | 20 |
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); |