WebGL objects keep an array of refptrs of other WebGL objects owning references to them. In practical cases, the size of this array can oscillate between 0 and 2 at high frequency. nsTArray throws away its whole storage (mHdr) when its size hits 0. This patch makes us use a nsAutoTArray with a pre-allocated size of 2 or 8 depending on WebGL object types.
This patch does 3 things on Macs with Intel GPUs:
* prevents attaching a cube map to a framebuffer.
Test case: http://codeflow.org/webgl/irradiance/
* skips glGenerateMipmaps on cube maps
* since cube maps are now missing their mipmaps, prevents setting on them a minification filter that requires a mipmap, but only from OpenGL's point of view, not from WebGL's.
This code is copied mostly from WebKit. It strips out comments from shader source code before actually compiling it, so that the comments can have illegal characters. It was benchmarked and it was noted that a test attached to the bug ticket took about twice as long with these changes.
This includes the patch from bug 680722 to check for illegal characters.
This code is copied mostly from WebKit. It strips out comments from shader source code before actually compiling it, so that the comments can have illegal characters. It was benchmarked and it was noted that a test attached to the bug ticket took about twice as long with these changes.
This includes the patch from bug 680722 to check for illegal characters.
There was actually some surrounding logic breaking 0-size textures. It was because there was code that basically checked "did uint=negative_num*other_vars overflow". For incorrect validation, two copies of the same variable (one stored internally and one passed in) were available to the function, but the one stored internally was being validated, while the version passed in wasn't. The fix for this was simply checking the passed var instead.
The bindX() commands were erroring with INVALID_VALUE when they're instead supposed to simply fail silently when they're given a deleted object. Additionally, the getParameter() function was failing after its associated variable was deleted, sometimes returning values when it should return null.
* * *
Bug 681835: WebGL fix for previous patch which introduced a bug with deletion
DeleteRenderbuffer and DeleteFramebuffer weren't checking if the deleted buffer was the currently bound buffer before deleting them. This patch implements this functionality. A separate test case patch was also submitted to Khronos:
http://www.khronos.org/bugzilla/show_bug.cgi?id=518
I need this now especially as it gets us the shader modification mechanisms to work around Mac GL crashes, see bug 665578
The relevant ANGLE revisions are 734, 738, and 740 fixes a bug in 738.
This also allows us to reset our set of cherrypicked ANGLE revisions which was starting to be very big.
This test is valid, but flaky as it relies on GC happening at a particular time. A recent JS engine change making it actually happen caused it to actually catch a bug we've always had in the OES_texture_float impl, see the discussion on bug 630672, and I don't have time to fix that now.
This patch disables the quickCheckAPI.html page, with this comment:
this test causes whichever comes after to intermittently time out.
forcing a GC run doesn't solve this issue. Could be something about using a random amount of memory that
can be too high, causing e.g. swapping.