mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 21:35:39 +00:00
1bafd858a5
--HG-- rename : content/canvas/src/CanvasGradient.h => dom/canvas/CanvasGradient.h rename : content/canvas/src/CanvasImageCache.cpp => dom/canvas/CanvasImageCache.cpp rename : content/canvas/src/CanvasImageCache.h => dom/canvas/CanvasImageCache.h rename : content/canvas/src/CanvasPattern.h => dom/canvas/CanvasPattern.h rename : content/canvas/src/CanvasRenderingContext2D.cpp => dom/canvas/CanvasRenderingContext2D.cpp rename : content/canvas/src/CanvasRenderingContext2D.h => dom/canvas/CanvasRenderingContext2D.h rename : content/canvas/src/CanvasUtils.cpp => dom/canvas/CanvasUtils.cpp rename : content/canvas/src/CanvasUtils.h => dom/canvas/CanvasUtils.h rename : content/canvas/src/DocumentRendererChild.cpp => dom/canvas/DocumentRendererChild.cpp rename : content/canvas/public/DocumentRendererChild.h => dom/canvas/DocumentRendererChild.h rename : content/canvas/src/DocumentRendererParent.cpp => dom/canvas/DocumentRendererParent.cpp rename : content/canvas/public/DocumentRendererParent.h => dom/canvas/DocumentRendererParent.h rename : content/canvas/src/ImageData.cpp => dom/canvas/ImageData.cpp rename : content/canvas/src/ImageData.h => dom/canvas/ImageData.h rename : content/canvas/src/ImageEncoder.cpp => dom/canvas/ImageEncoder.cpp rename : content/canvas/src/ImageEncoder.h => dom/canvas/ImageEncoder.h rename : content/canvas/src/Makefile.in => dom/canvas/Makefile.in rename : content/canvas/src/MurmurHash3.cpp => dom/canvas/MurmurHash3.cpp rename : content/canvas/src/MurmurHash3.h => dom/canvas/MurmurHash3.h rename : content/canvas/src/TextMetrics.h => dom/canvas/TextMetrics.h rename : content/canvas/src/WebGL1Context.cpp => dom/canvas/WebGL1Context.cpp rename : content/canvas/src/WebGL1Context.h => dom/canvas/WebGL1Context.h rename : content/canvas/src/WebGL2Context.cpp => dom/canvas/WebGL2Context.cpp rename : content/canvas/src/WebGL2Context.h => dom/canvas/WebGL2Context.h rename : content/canvas/src/WebGLActiveInfo.cpp => dom/canvas/WebGLActiveInfo.cpp rename : content/canvas/src/WebGLActiveInfo.h => dom/canvas/WebGLActiveInfo.h rename : content/canvas/src/WebGLBuffer.cpp => dom/canvas/WebGLBuffer.cpp rename : content/canvas/src/WebGLBuffer.h => dom/canvas/WebGLBuffer.h rename : content/canvas/src/WebGLContext.cpp => dom/canvas/WebGLContext.cpp rename : content/canvas/src/WebGLContext.h => dom/canvas/WebGLContext.h rename : content/canvas/src/WebGLContextAsyncQueries.cpp => dom/canvas/WebGLContextAsyncQueries.cpp rename : content/canvas/src/WebGLContextBuffers.cpp => dom/canvas/WebGLContextBuffers.cpp rename : content/canvas/src/WebGLContextDraw.cpp => dom/canvas/WebGLContextDraw.cpp rename : content/canvas/src/WebGLContextExtensions.cpp => dom/canvas/WebGLContextExtensions.cpp rename : content/canvas/src/WebGLContextFramebufferOperations.cpp => dom/canvas/WebGLContextFramebufferOperations.cpp rename : content/canvas/src/WebGLContextGL.cpp => dom/canvas/WebGLContextGL.cpp rename : content/canvas/src/WebGLContextLossTimer.cpp => dom/canvas/WebGLContextLossTimer.cpp rename : content/canvas/src/WebGLContextNotSupported.cpp => dom/canvas/WebGLContextNotSupported.cpp rename : content/canvas/src/WebGLContextReporter.cpp => dom/canvas/WebGLContextReporter.cpp rename : content/canvas/src/WebGLContextState.cpp => dom/canvas/WebGLContextState.cpp rename : content/canvas/src/WebGLContextUtils.cpp => dom/canvas/WebGLContextUtils.cpp rename : content/canvas/src/WebGLContextUtils.h => dom/canvas/WebGLContextUtils.h rename : content/canvas/src/WebGLContextValidate.cpp => dom/canvas/WebGLContextValidate.cpp rename : content/canvas/src/WebGLContextVertexArray.cpp => dom/canvas/WebGLContextVertexArray.cpp rename : content/canvas/src/WebGLContextVertices.cpp => dom/canvas/WebGLContextVertices.cpp rename : content/canvas/src/WebGLElementArrayCache.cpp => dom/canvas/WebGLElementArrayCache.cpp rename : content/canvas/src/WebGLElementArrayCache.h => dom/canvas/WebGLElementArrayCache.h rename : content/canvas/src/WebGLExtensionBase.cpp => dom/canvas/WebGLExtensionBase.cpp rename : content/canvas/src/WebGLExtensionBlendMinMax.cpp => dom/canvas/WebGLExtensionBlendMinMax.cpp rename : content/canvas/src/WebGLExtensionColorBufferFloat.cpp => dom/canvas/WebGLExtensionColorBufferFloat.cpp rename : content/canvas/src/WebGLExtensionColorBufferHalfFloat.cpp => dom/canvas/WebGLExtensionColorBufferHalfFloat.cpp rename : content/canvas/src/WebGLExtensionCompressedTextureATC.cpp => dom/canvas/WebGLExtensionCompressedTextureATC.cpp rename : content/canvas/src/WebGLExtensionCompressedTextureETC1.cpp => dom/canvas/WebGLExtensionCompressedTextureETC1.cpp rename : content/canvas/src/WebGLExtensionCompressedTexturePVRTC.cpp => dom/canvas/WebGLExtensionCompressedTexturePVRTC.cpp rename : content/canvas/src/WebGLExtensionCompressedTextureS3TC.cpp => dom/canvas/WebGLExtensionCompressedTextureS3TC.cpp rename : content/canvas/src/WebGLExtensionDebugRendererInfo.cpp => dom/canvas/WebGLExtensionDebugRendererInfo.cpp rename : content/canvas/src/WebGLExtensionDebugShaders.cpp => dom/canvas/WebGLExtensionDebugShaders.cpp rename : content/canvas/src/WebGLExtensionDepthTexture.cpp => dom/canvas/WebGLExtensionDepthTexture.cpp rename : content/canvas/src/WebGLExtensionDrawBuffers.cpp => dom/canvas/WebGLExtensionDrawBuffers.cpp rename : content/canvas/src/WebGLExtensionElementIndexUint.cpp => dom/canvas/WebGLExtensionElementIndexUint.cpp rename : content/canvas/src/WebGLExtensionFragDepth.cpp => dom/canvas/WebGLExtensionFragDepth.cpp rename : content/canvas/src/WebGLExtensionInstancedArrays.cpp => dom/canvas/WebGLExtensionInstancedArrays.cpp rename : content/canvas/src/WebGLExtensionLoseContext.cpp => dom/canvas/WebGLExtensionLoseContext.cpp rename : content/canvas/src/WebGLExtensionSRGB.cpp => dom/canvas/WebGLExtensionSRGB.cpp rename : content/canvas/src/WebGLExtensionStandardDerivatives.cpp => dom/canvas/WebGLExtensionStandardDerivatives.cpp rename : content/canvas/src/WebGLExtensionTextureFilterAnisotropic.cpp => dom/canvas/WebGLExtensionTextureFilterAnisotropic.cpp rename : content/canvas/src/WebGLExtensionTextureFloat.cpp => dom/canvas/WebGLExtensionTextureFloat.cpp rename : content/canvas/src/WebGLExtensionTextureFloatLinear.cpp => dom/canvas/WebGLExtensionTextureFloatLinear.cpp rename : content/canvas/src/WebGLExtensionTextureHalfFloat.cpp => dom/canvas/WebGLExtensionTextureHalfFloat.cpp rename : content/canvas/src/WebGLExtensionTextureHalfFloatLinear.cpp => dom/canvas/WebGLExtensionTextureHalfFloatLinear.cpp rename : content/canvas/src/WebGLExtensionVertexArray.cpp => dom/canvas/WebGLExtensionVertexArray.cpp rename : content/canvas/src/WebGLExtensions.h => dom/canvas/WebGLExtensions.h rename : content/canvas/src/WebGLFramebuffer.cpp => dom/canvas/WebGLFramebuffer.cpp rename : content/canvas/src/WebGLFramebuffer.h => dom/canvas/WebGLFramebuffer.h rename : content/canvas/src/WebGLFramebufferAttachable.cpp => dom/canvas/WebGLFramebufferAttachable.cpp rename : content/canvas/src/WebGLFramebufferAttachable.h => dom/canvas/WebGLFramebufferAttachable.h rename : content/canvas/src/WebGLMemoryTracker.h => dom/canvas/WebGLMemoryTracker.h rename : content/canvas/src/WebGLObjectModel.cpp => dom/canvas/WebGLObjectModel.cpp rename : content/canvas/src/WebGLObjectModel.h => dom/canvas/WebGLObjectModel.h rename : content/canvas/src/WebGLProgram.cpp => dom/canvas/WebGLProgram.cpp rename : content/canvas/src/WebGLProgram.h => dom/canvas/WebGLProgram.h rename : content/canvas/src/WebGLQuery.cpp => dom/canvas/WebGLQuery.cpp rename : content/canvas/src/WebGLQuery.h => dom/canvas/WebGLQuery.h rename : content/canvas/src/WebGLRenderbuffer.cpp => dom/canvas/WebGLRenderbuffer.cpp rename : content/canvas/src/WebGLRenderbuffer.h => dom/canvas/WebGLRenderbuffer.h rename : content/canvas/src/WebGLShader.cpp => dom/canvas/WebGLShader.cpp rename : content/canvas/src/WebGLShader.h => dom/canvas/WebGLShader.h rename : content/canvas/src/WebGLShaderPrecisionFormat.cpp => dom/canvas/WebGLShaderPrecisionFormat.cpp rename : content/canvas/src/WebGLShaderPrecisionFormat.h => dom/canvas/WebGLShaderPrecisionFormat.h rename : content/canvas/src/WebGLTexelConversions.cpp => dom/canvas/WebGLTexelConversions.cpp rename : content/canvas/src/WebGLTexelConversions.h => dom/canvas/WebGLTexelConversions.h rename : content/canvas/src/WebGLTexture.cpp => dom/canvas/WebGLTexture.cpp rename : content/canvas/src/WebGLTexture.h => dom/canvas/WebGLTexture.h rename : content/canvas/src/WebGLTypes.h => dom/canvas/WebGLTypes.h rename : content/canvas/src/WebGLUniformInfo.h => dom/canvas/WebGLUniformInfo.h rename : content/canvas/src/WebGLUniformLocation.cpp => dom/canvas/WebGLUniformLocation.cpp rename : content/canvas/src/WebGLUniformLocation.h => dom/canvas/WebGLUniformLocation.h rename : content/canvas/src/WebGLValidateStrings.h => dom/canvas/WebGLValidateStrings.h rename : content/canvas/src/WebGLVertexArray.cpp => dom/canvas/WebGLVertexArray.cpp rename : content/canvas/src/WebGLVertexArray.h => dom/canvas/WebGLVertexArray.h rename : content/canvas/src/WebGLVertexArrayFake.cpp => dom/canvas/WebGLVertexArrayFake.cpp rename : content/canvas/src/WebGLVertexArrayFake.h => dom/canvas/WebGLVertexArrayFake.h rename : content/canvas/src/WebGLVertexArrayGL.cpp => dom/canvas/WebGLVertexArrayGL.cpp rename : content/canvas/src/WebGLVertexArrayGL.h => dom/canvas/WebGLVertexArrayGL.h rename : content/canvas/src/WebGLVertexAttribData.h => dom/canvas/WebGLVertexAttribData.h rename : content/canvas/compiledtest/TestWebGLElementArrayCache.cpp => dom/canvas/compiledtest/TestWebGLElementArrayCache.cpp rename : content/canvas/compiledtest/moz.build => dom/canvas/compiledtest/moz.build rename : content/canvas/crashtests/0px-size-font-667225.html => dom/canvas/crashtests/0px-size-font-667225.html rename : content/canvas/crashtests/0px-size-font-shadow.html => dom/canvas/crashtests/0px-size-font-shadow.html rename : content/canvas/crashtests/360293-1.html => dom/canvas/crashtests/360293-1.html rename : content/canvas/crashtests/421715-1.html => dom/canvas/crashtests/421715-1.html rename : content/canvas/crashtests/553938-1.html => dom/canvas/crashtests/553938-1.html rename : content/canvas/crashtests/647480.html => dom/canvas/crashtests/647480.html rename : content/canvas/crashtests/727547.html => dom/canvas/crashtests/727547.html rename : content/canvas/crashtests/729116.html => dom/canvas/crashtests/729116.html rename : content/canvas/crashtests/743499-negative-size.html => dom/canvas/crashtests/743499-negative-size.html rename : content/canvas/crashtests/745699-1.html => dom/canvas/crashtests/745699-1.html rename : content/canvas/crashtests/745818-large-source.html => dom/canvas/crashtests/745818-large-source.html rename : content/canvas/crashtests/746813-1.html => dom/canvas/crashtests/746813-1.html rename : content/canvas/crashtests/767337-1.html => dom/canvas/crashtests/767337-1.html rename : content/canvas/crashtests/780392-1.html => dom/canvas/crashtests/780392-1.html rename : content/canvas/crashtests/789933-1.html => dom/canvas/crashtests/789933-1.html rename : content/canvas/crashtests/794463-1.html => dom/canvas/crashtests/794463-1.html rename : content/canvas/crashtests/802926-1.html => dom/canvas/crashtests/802926-1.html rename : content/canvas/crashtests/896047-1.html => dom/canvas/crashtests/896047-1.html rename : content/canvas/crashtests/896047-2.html => dom/canvas/crashtests/896047-2.html rename : content/canvas/crashtests/916128-1.html => dom/canvas/crashtests/916128-1.html rename : content/canvas/crashtests/934939-1.html => dom/canvas/crashtests/934939-1.html rename : content/canvas/crashtests/crashtests.list => dom/canvas/crashtests/crashtests.list rename : content/canvas/crashtests/texImage2D.html => dom/canvas/crashtests/texImage2D.html rename : content/canvas/moz.build => dom/canvas/moz.build rename : content/canvas/public/nsICanvasRenderingContextInternal.h => dom/canvas/nsICanvasRenderingContextInternal.h rename : content/canvas/test/android.json => dom/canvas/test/android.json rename : content/canvas/test/chrome/chrome.ini => dom/canvas/test/chrome/chrome.ini rename : content/canvas/test/chrome/nonchrome_webgl_debug_renderer_info.html => dom/canvas/test/chrome/nonchrome_webgl_debug_renderer_info.html rename : content/canvas/test/chrome/test_drawWindow_widget_layers.html => dom/canvas/test/chrome/test_drawWindow_widget_layers.html rename : content/canvas/test/chrome/test_webgl_debug_renderer_info.html => dom/canvas/test/chrome/test_webgl_debug_renderer_info.html rename : content/canvas/test/crossorigin/image-allow-credentials.png => dom/canvas/test/crossorigin/image-allow-credentials.png rename : content/canvas/test/crossorigin/image-allow-credentials.png^headers^ => dom/canvas/test/crossorigin/image-allow-credentials.png^headers^ rename : content/canvas/test/crossorigin/image-allow-star.png => dom/canvas/test/crossorigin/image-allow-star.png rename : content/canvas/test/crossorigin/image-allow-star.png^headers^ => dom/canvas/test/crossorigin/image-allow-star.png^headers^ rename : content/canvas/test/crossorigin/image.png => dom/canvas/test/crossorigin/image.png rename : content/canvas/test/crossorigin/mochitest.ini => dom/canvas/test/crossorigin/mochitest.ini rename : content/canvas/test/crossorigin/test_canvas2d_crossorigin.html => dom/canvas/test/crossorigin/test_canvas2d_crossorigin.html rename : content/canvas/test/crossorigin/test_video_crossorigin.html => dom/canvas/test/crossorigin/test_video_crossorigin.html rename : content/canvas/test/crossorigin/test_webgl_crossorigin_textures.html => dom/canvas/test/crossorigin/test_webgl_crossorigin_textures.html rename : content/canvas/test/crossorigin/video.sjs => dom/canvas/test/crossorigin/video.sjs rename : content/canvas/test/file_drawImage_document_domain.html => dom/canvas/test/file_drawImage_document_domain.html rename : content/canvas/test/file_drawWindow_common.js => dom/canvas/test/file_drawWindow_common.js rename : content/canvas/test/file_drawWindow_source.html => dom/canvas/test/file_drawWindow_source.html rename : content/canvas/test/image_anim-gr.gif => dom/canvas/test/image_anim-gr.gif rename : content/canvas/test/image_anim-gr.png => dom/canvas/test/image_anim-gr.png rename : content/canvas/test/image_anim-poster-gr.png => dom/canvas/test/image_anim-poster-gr.png rename : content/canvas/test/image_broken.png => dom/canvas/test/image_broken.png rename : content/canvas/test/image_ggrr-256x256.png => dom/canvas/test/image_ggrr-256x256.png rename : content/canvas/test/image_green-16x16.png => dom/canvas/test/image_green-16x16.png rename : content/canvas/test/image_green-1x1.png => dom/canvas/test/image_green-1x1.png rename : content/canvas/test/image_green-redirect => dom/canvas/test/image_green-redirect rename : content/canvas/test/image_green-redirect^headers^ => dom/canvas/test/image_green-redirect^headers^ rename : content/canvas/test/image_green.png => dom/canvas/test/image_green.png rename : content/canvas/test/image_red-16x16.png => dom/canvas/test/image_red-16x16.png rename : content/canvas/test/image_red.png => dom/canvas/test/image_red.png rename : content/canvas/test/image_redtransparent.png => dom/canvas/test/image_redtransparent.png rename : content/canvas/test/image_rgrg-256x256.png => dom/canvas/test/image_rgrg-256x256.png rename : content/canvas/test/image_rrgg-256x256.png => dom/canvas/test/image_rrgg-256x256.png rename : content/canvas/test/image_transparent.png => dom/canvas/test/image_transparent.png rename : content/canvas/test/image_transparent50.png => dom/canvas/test/image_transparent50.png rename : content/canvas/test/image_yellow.png => dom/canvas/test/image_yellow.png rename : content/canvas/test/image_yellow75.png => dom/canvas/test/image_yellow75.png rename : content/canvas/test/mochitest.ini => dom/canvas/test/mochitest.ini rename : content/canvas/test/moz.build => dom/canvas/test/moz.build rename : content/canvas/test/reftest/black.html => dom/canvas/test/reftest/black.html rename : content/canvas/test/reftest/clip-multiple-paths-badref.html => dom/canvas/test/reftest/clip-multiple-paths-badref.html rename : content/canvas/test/reftest/clip-multiple-paths.html => dom/canvas/test/reftest/clip-multiple-paths.html rename : content/canvas/test/reftest/colors-half-alpha.png => dom/canvas/test/reftest/colors-half-alpha.png rename : content/canvas/test/reftest/colors.png => dom/canvas/test/reftest/colors.png rename : content/canvas/test/reftest/drawCustomFocusRing-ref.html => dom/canvas/test/reftest/drawCustomFocusRing-ref.html rename : content/canvas/test/reftest/drawCustomFocusRing.html => dom/canvas/test/reftest/drawCustomFocusRing.html rename : content/canvas/test/reftest/drawFocusIfNeeded-ref.html => dom/canvas/test/reftest/drawFocusIfNeeded-ref.html rename : content/canvas/test/reftest/drawFocusIfNeeded.html => dom/canvas/test/reftest/drawFocusIfNeeded.html rename : content/canvas/test/reftest/green.png => dom/canvas/test/reftest/green.png rename : content/canvas/test/reftest/half-colors-half-alpha.png => dom/canvas/test/reftest/half-colors-half-alpha.png rename : content/canvas/test/reftest/half-colors.png => dom/canvas/test/reftest/half-colors.png rename : content/canvas/test/reftest/reftest.list => dom/canvas/test/reftest/reftest.list rename : content/canvas/test/reftest/stroketext-shadow-ref.html => dom/canvas/test/reftest/stroketext-shadow-ref.html rename : content/canvas/test/reftest/stroketext-shadow.html => dom/canvas/test/reftest/stroketext-shadow.html rename : content/canvas/test/reftest/webgl-clear-test.html => dom/canvas/test/reftest/webgl-clear-test.html rename : content/canvas/test/reftest/webgl-color-alpha-test.html => dom/canvas/test/reftest/webgl-color-alpha-test.html rename : content/canvas/test/reftest/webgl-color-test.html => dom/canvas/test/reftest/webgl-color-test.html rename : content/canvas/test/reftest/webgl-disable-test.html => dom/canvas/test/reftest/webgl-disable-test.html rename : content/canvas/test/reftest/webgl-hanging-fb-test.html => dom/canvas/test/reftest/webgl-hanging-fb-test.html rename : content/canvas/test/reftest/webgl-hanging-scissor-test.html => dom/canvas/test/reftest/webgl-hanging-scissor-test.html rename : content/canvas/test/reftest/webgl-orientation-test.html => dom/canvas/test/reftest/webgl-orientation-test.html rename : content/canvas/test/reftest/webgl-resize-test.html => dom/canvas/test/reftest/webgl-resize-test.html rename : content/canvas/test/reftest/webgl-utils.js => dom/canvas/test/reftest/webgl-utils.js rename : content/canvas/test/reftest/white-top-left.png => dom/canvas/test/reftest/white-top-left.png rename : content/canvas/test/reftest/white.png => dom/canvas/test/reftest/white.png rename : content/canvas/test/reftest/wrapper.html => dom/canvas/test/reftest/wrapper.html rename : content/canvas/test/test_2d.clearRect.image.offscreen.html => dom/canvas/test/test_2d.clearRect.image.offscreen.html rename : content/canvas/test/test_2d.clip.winding.html => dom/canvas/test/test_2d.clip.winding.html rename : content/canvas/test/test_2d.composite.canvas.color-burn.html => dom/canvas/test/test_2d.composite.canvas.color-burn.html rename : content/canvas/test/test_2d.composite.canvas.color-dodge.html => dom/canvas/test/test_2d.composite.canvas.color-dodge.html rename : content/canvas/test/test_2d.composite.canvas.color.html => dom/canvas/test/test_2d.composite.canvas.color.html rename : content/canvas/test/test_2d.composite.canvas.darken.html => dom/canvas/test/test_2d.composite.canvas.darken.html rename : content/canvas/test/test_2d.composite.canvas.destination-atop.html => dom/canvas/test/test_2d.composite.canvas.destination-atop.html rename : content/canvas/test/test_2d.composite.canvas.destination-in.html => dom/canvas/test/test_2d.composite.canvas.destination-in.html rename : content/canvas/test/test_2d.composite.canvas.difference.html => dom/canvas/test/test_2d.composite.canvas.difference.html rename : content/canvas/test/test_2d.composite.canvas.exclusion.html => dom/canvas/test/test_2d.composite.canvas.exclusion.html rename : content/canvas/test/test_2d.composite.canvas.hard-light.html => dom/canvas/test/test_2d.composite.canvas.hard-light.html rename : content/canvas/test/test_2d.composite.canvas.hue.html => dom/canvas/test/test_2d.composite.canvas.hue.html rename : content/canvas/test/test_2d.composite.canvas.lighten.html => dom/canvas/test/test_2d.composite.canvas.lighten.html rename : content/canvas/test/test_2d.composite.canvas.lighter.html => dom/canvas/test/test_2d.composite.canvas.lighter.html rename : content/canvas/test/test_2d.composite.canvas.luminosity.html => dom/canvas/test/test_2d.composite.canvas.luminosity.html rename : content/canvas/test/test_2d.composite.canvas.multiply.html => dom/canvas/test/test_2d.composite.canvas.multiply.html rename : content/canvas/test/test_2d.composite.canvas.overlay.html => dom/canvas/test/test_2d.composite.canvas.overlay.html rename : content/canvas/test/test_2d.composite.canvas.saturation.html => dom/canvas/test/test_2d.composite.canvas.saturation.html rename : content/canvas/test/test_2d.composite.canvas.screen.html => dom/canvas/test/test_2d.composite.canvas.screen.html rename : content/canvas/test/test_2d.composite.canvas.soft-light.html => dom/canvas/test/test_2d.composite.canvas.soft-light.html rename : content/canvas/test/test_2d.composite.canvas.source-in.html => dom/canvas/test/test_2d.composite.canvas.source-in.html rename : content/canvas/test/test_2d.composite.canvas.source-out.html => dom/canvas/test/test_2d.composite.canvas.source-out.html rename : content/canvas/test/test_2d.composite.canvas.xor.html => dom/canvas/test/test_2d.composite.canvas.xor.html rename : content/canvas/test/test_2d.composite.clip.lighter.html => dom/canvas/test/test_2d.composite.clip.lighter.html rename : content/canvas/test/test_2d.composite.clip.xor.html => dom/canvas/test/test_2d.composite.clip.xor.html rename : content/canvas/test/test_2d.composite.image.destination-atop.html => dom/canvas/test/test_2d.composite.image.destination-atop.html rename : content/canvas/test/test_2d.composite.image.destination-in.html => dom/canvas/test/test_2d.composite.image.destination-in.html rename : content/canvas/test/test_2d.composite.image.lighter.html => dom/canvas/test/test_2d.composite.image.lighter.html rename : content/canvas/test/test_2d.composite.image.source-in.html => dom/canvas/test/test_2d.composite.image.source-in.html rename : content/canvas/test/test_2d.composite.image.source-out.html => dom/canvas/test/test_2d.composite.image.source-out.html rename : content/canvas/test/test_2d.composite.image.xor.html => dom/canvas/test/test_2d.composite.image.xor.html rename : content/canvas/test/test_2d.composite.solid.color-burn.html => dom/canvas/test/test_2d.composite.solid.color-burn.html rename : content/canvas/test/test_2d.composite.solid.color-dodge.html => dom/canvas/test/test_2d.composite.solid.color-dodge.html rename : content/canvas/test/test_2d.composite.solid.color.html => dom/canvas/test/test_2d.composite.solid.color.html rename : content/canvas/test/test_2d.composite.solid.darken.html => dom/canvas/test/test_2d.composite.solid.darken.html rename : content/canvas/test/test_2d.composite.solid.difference.html => dom/canvas/test/test_2d.composite.solid.difference.html rename : content/canvas/test/test_2d.composite.solid.exclusion.html => dom/canvas/test/test_2d.composite.solid.exclusion.html rename : content/canvas/test/test_2d.composite.solid.hard-light.html => dom/canvas/test/test_2d.composite.solid.hard-light.html rename : content/canvas/test/test_2d.composite.solid.hue.html => dom/canvas/test/test_2d.composite.solid.hue.html rename : content/canvas/test/test_2d.composite.solid.lighten.html => dom/canvas/test/test_2d.composite.solid.lighten.html rename : content/canvas/test/test_2d.composite.solid.lighter.html => dom/canvas/test/test_2d.composite.solid.lighter.html rename : content/canvas/test/test_2d.composite.solid.luminosity.html => dom/canvas/test/test_2d.composite.solid.luminosity.html rename : content/canvas/test/test_2d.composite.solid.multiply.html => dom/canvas/test/test_2d.composite.solid.multiply.html rename : content/canvas/test/test_2d.composite.solid.overlay.html => dom/canvas/test/test_2d.composite.solid.overlay.html rename : content/canvas/test/test_2d.composite.solid.saturation.html => dom/canvas/test/test_2d.composite.solid.saturation.html rename : content/canvas/test/test_2d.composite.solid.screen.html => dom/canvas/test/test_2d.composite.solid.screen.html rename : content/canvas/test/test_2d.composite.solid.soft-light.html => dom/canvas/test/test_2d.composite.solid.soft-light.html rename : content/canvas/test/test_2d.composite.solid.xor.html => dom/canvas/test/test_2d.composite.solid.xor.html rename : content/canvas/test/test_2d.composite.transparent.lighter.html => dom/canvas/test/test_2d.composite.transparent.lighter.html rename : content/canvas/test/test_2d.composite.transparent.xor.html => dom/canvas/test/test_2d.composite.transparent.xor.html rename : content/canvas/test/test_2d.composite.uncovered.fill.color-burn.html => dom/canvas/test/test_2d.composite.uncovered.fill.color-burn.html rename : content/canvas/test/test_2d.composite.uncovered.fill.color-dodge.html => dom/canvas/test/test_2d.composite.uncovered.fill.color-dodge.html rename : content/canvas/test/test_2d.composite.uncovered.fill.color.html => dom/canvas/test/test_2d.composite.uncovered.fill.color.html rename : content/canvas/test/test_2d.composite.uncovered.fill.darken.html => dom/canvas/test/test_2d.composite.uncovered.fill.darken.html rename : content/canvas/test/test_2d.composite.uncovered.fill.destination-atop.html => dom/canvas/test/test_2d.composite.uncovered.fill.destination-atop.html rename : content/canvas/test/test_2d.composite.uncovered.fill.destination-in.html => dom/canvas/test/test_2d.composite.uncovered.fill.destination-in.html rename : content/canvas/test/test_2d.composite.uncovered.fill.difference.html => dom/canvas/test/test_2d.composite.uncovered.fill.difference.html rename : content/canvas/test/test_2d.composite.uncovered.fill.exclusion.html => dom/canvas/test/test_2d.composite.uncovered.fill.exclusion.html rename : content/canvas/test/test_2d.composite.uncovered.fill.hard-light.html => dom/canvas/test/test_2d.composite.uncovered.fill.hard-light.html rename : content/canvas/test/test_2d.composite.uncovered.fill.hue.html => dom/canvas/test/test_2d.composite.uncovered.fill.hue.html rename : content/canvas/test/test_2d.composite.uncovered.fill.lighten.html => dom/canvas/test/test_2d.composite.uncovered.fill.lighten.html rename : content/canvas/test/test_2d.composite.uncovered.fill.luminosity.html => dom/canvas/test/test_2d.composite.uncovered.fill.luminosity.html rename : content/canvas/test/test_2d.composite.uncovered.fill.multiply.html => dom/canvas/test/test_2d.composite.uncovered.fill.multiply.html rename : content/canvas/test/test_2d.composite.uncovered.fill.overlay.html => dom/canvas/test/test_2d.composite.uncovered.fill.overlay.html rename : content/canvas/test/test_2d.composite.uncovered.fill.saturation.html => dom/canvas/test/test_2d.composite.uncovered.fill.saturation.html rename : content/canvas/test/test_2d.composite.uncovered.fill.screen.html => dom/canvas/test/test_2d.composite.uncovered.fill.screen.html rename : content/canvas/test/test_2d.composite.uncovered.fill.soft-light.html => dom/canvas/test/test_2d.composite.uncovered.fill.soft-light.html rename : content/canvas/test/test_2d.composite.uncovered.fill.source-in.html => dom/canvas/test/test_2d.composite.uncovered.fill.source-in.html rename : content/canvas/test/test_2d.composite.uncovered.fill.source-out.html => dom/canvas/test/test_2d.composite.uncovered.fill.source-out.html rename : content/canvas/test/test_2d.composite.uncovered.image.destination-atop.html => dom/canvas/test/test_2d.composite.uncovered.image.destination-atop.html rename : content/canvas/test/test_2d.composite.uncovered.image.destination-in.html => dom/canvas/test/test_2d.composite.uncovered.image.destination-in.html rename : content/canvas/test/test_2d.composite.uncovered.image.source-in.html => dom/canvas/test/test_2d.composite.uncovered.image.source-in.html rename : content/canvas/test/test_2d.composite.uncovered.image.source-out.html => dom/canvas/test/test_2d.composite.uncovered.image.source-out.html rename : content/canvas/test/test_2d.composite.uncovered.pattern.destination-atop.html => dom/canvas/test/test_2d.composite.uncovered.pattern.destination-atop.html rename : content/canvas/test/test_2d.composite.uncovered.pattern.destination-in.html => dom/canvas/test/test_2d.composite.uncovered.pattern.destination-in.html rename : content/canvas/test/test_2d.composite.uncovered.pattern.source-in.html => dom/canvas/test/test_2d.composite.uncovered.pattern.source-in.html rename : content/canvas/test/test_2d.composite.uncovered.pattern.source-out.html => dom/canvas/test/test_2d.composite.uncovered.pattern.source-out.html rename : content/canvas/test/test_2d.drawImage.zerocanvas.html => dom/canvas/test/test_2d.drawImage.zerocanvas.html rename : content/canvas/test/test_2d.fill.winding.html => dom/canvas/test/test_2d.fill.winding.html rename : content/canvas/test/test_2d.fillText.gradient.html => dom/canvas/test/test_2d.fillText.gradient.html rename : content/canvas/test/test_2d.gradient.radial.cone.behind.html => dom/canvas/test/test_2d.gradient.radial.cone.behind.html rename : content/canvas/test/test_2d.gradient.radial.cone.beside.html => dom/canvas/test/test_2d.gradient.radial.cone.beside.html rename : content/canvas/test/test_2d.gradient.radial.cone.front.html => dom/canvas/test/test_2d.gradient.radial.cone.front.html rename : content/canvas/test/test_2d.gradient.radial.cone.shape2.html => dom/canvas/test/test_2d.gradient.radial.cone.shape2.html rename : content/canvas/test/test_2d.gradient.radial.cone.top.html => dom/canvas/test/test_2d.gradient.radial.cone.top.html rename : content/canvas/test/test_2d.gradient.radial.equal.html => dom/canvas/test/test_2d.gradient.radial.equal.html rename : content/canvas/test/test_2d.gradient.radial.inside2.html => dom/canvas/test/test_2d.gradient.radial.inside2.html rename : content/canvas/test/test_2d.gradient.radial.inside3.html => dom/canvas/test/test_2d.gradient.radial.inside3.html rename : content/canvas/test/test_2d.gradient.radial.outside1.html => dom/canvas/test/test_2d.gradient.radial.outside1.html rename : content/canvas/test/test_2d.gradient.radial.outside2.html => dom/canvas/test/test_2d.gradient.radial.outside2.html rename : content/canvas/test/test_2d.gradient.radial.outside3.html => dom/canvas/test/test_2d.gradient.radial.outside3.html rename : content/canvas/test/test_2d.gradient.radial.touch1.html => dom/canvas/test/test_2d.gradient.radial.touch1.html rename : content/canvas/test/test_2d.gradient.radial.touch2.html => dom/canvas/test/test_2d.gradient.radial.touch2.html rename : content/canvas/test/test_2d.gradient.radial.touch3.html => dom/canvas/test/test_2d.gradient.radial.touch3.html rename : content/canvas/test/test_2d.isPointInPath.winding.html => dom/canvas/test/test_2d.isPointInPath.winding.html rename : content/canvas/test/test_2d.line.cap.closed.html => dom/canvas/test/test_2d.line.cap.closed.html rename : content/canvas/test/test_2d.line.join.parallel.html => dom/canvas/test/test_2d.line.join.parallel.html rename : content/canvas/test/test_2d.path.arc.shape.3.html => dom/canvas/test/test_2d.path.arc.shape.3.html rename : content/canvas/test/test_2d.path.rect.selfintersect.html => dom/canvas/test/test_2d.path.rect.selfintersect.html rename : content/canvas/test/test_2d.path.rect.zero.6.html => dom/canvas/test/test_2d.path.rect.zero.6.html rename : content/canvas/test/test_2d.strokeRect.zero.5.html => dom/canvas/test/test_2d.strokeRect.zero.5.html rename : content/canvas/test/test_2d_composite_canvaspattern_setTransform.html => dom/canvas/test/test_2d_composite_canvaspattern_setTransform.html rename : content/canvas/test/test_ImageData_ctor.html => dom/canvas/test/test_ImageData_ctor.html rename : content/canvas/test/test_bug613794.html => dom/canvas/test/test_bug613794.html rename : content/canvas/test/test_bug753758.html => dom/canvas/test/test_bug753758.html rename : content/canvas/test/test_bug764125.html => dom/canvas/test/test_bug764125.html rename : content/canvas/test/test_bug856472.html => dom/canvas/test/test_bug856472.html rename : content/canvas/test/test_bug866575.html => dom/canvas/test/test_bug866575.html rename : content/canvas/test/test_bug902651.html => dom/canvas/test/test_bug902651.html rename : content/canvas/test/test_canvas.html => dom/canvas/test/test_canvas.html rename : content/canvas/test/test_canvas_focusring.html => dom/canvas/test/test_canvas_focusring.html rename : content/canvas/test/test_canvas_font_setter.html => dom/canvas/test/test_canvas_font_setter.html rename : content/canvas/test/test_canvas_path.html => dom/canvas/test/test_canvas_path.html rename : content/canvas/test/test_canvas_strokeStyle_getter.html => dom/canvas/test/test_canvas_strokeStyle_getter.html rename : content/canvas/test/test_createPattern_broken.html => dom/canvas/test/test_createPattern_broken.html rename : content/canvas/test/test_drawImageIncomplete.html => dom/canvas/test/test_drawImageIncomplete.html rename : content/canvas/test/test_drawImage_document_domain.html => dom/canvas/test/test_drawImage_document_domain.html rename : content/canvas/test/test_drawImage_edge_cases.html => dom/canvas/test/test_drawImage_edge_cases.html rename : content/canvas/test/test_drawWindow.html => dom/canvas/test/test_drawWindow.html rename : content/canvas/test/test_hitregion_canvas.html => dom/canvas/test/test_hitregion_canvas.html rename : content/canvas/test/test_hitregion_event.html => dom/canvas/test/test_hitregion_event.html rename : content/canvas/test/test_isPointInStroke.html => dom/canvas/test/test_isPointInStroke.html rename : content/canvas/test/test_mozDashOffset.html => dom/canvas/test/test_mozDashOffset.html rename : content/canvas/test/test_mozGetAsFile.html => dom/canvas/test/test_mozGetAsFile.html rename : content/canvas/test/test_setlinedash.html => dom/canvas/test/test_setlinedash.html rename : content/canvas/test/test_strokeText_throw.html => dom/canvas/test/test_strokeText_throw.html rename : content/canvas/test/test_toBlob.html => dom/canvas/test/test_toBlob.html rename : content/canvas/test/test_toDataURL_alpha.html => dom/canvas/test/test_toDataURL_alpha.html rename : content/canvas/test/test_toDataURL_lowercase_ascii.html => dom/canvas/test/test_toDataURL_lowercase_ascii.html rename : content/canvas/test/test_toDataURL_parameters.html => dom/canvas/test/test_toDataURL_parameters.html rename : content/canvas/test/test_windingRuleUndefined.html => dom/canvas/test/test_windingRuleUndefined.html rename : content/canvas/test/webgl-conformance/00_test_list.txt => dom/canvas/test/webgl-conformance/00_test_list.txt rename : content/canvas/test/webgl-conformance/README.mozilla => dom/canvas/test/webgl-conformance/README.mozilla rename : content/canvas/test/webgl-conformance/README.txt => dom/canvas/test/webgl-conformance/README.txt rename : content/canvas/test/webgl-conformance/conformance/00_readme.txt => dom/canvas/test/webgl-conformance/conformance/00_readme.txt rename : content/canvas/test/webgl-conformance/conformance/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/LICENSE_CHROMIUM => dom/canvas/test/webgl-conformance/conformance/LICENSE_CHROMIUM rename : content/canvas/test/webgl-conformance/conformance/attribs/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/attribs/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/attribs/gl-enable-vertex-attrib.html => dom/canvas/test/webgl-conformance/conformance/attribs/gl-enable-vertex-attrib.html rename : content/canvas/test/webgl-conformance/conformance/attribs/gl-vertex-attrib-zero-issues.html => dom/canvas/test/webgl-conformance/conformance/attribs/gl-vertex-attrib-zero-issues.html rename : content/canvas/test/webgl-conformance/conformance/attribs/gl-vertex-attrib.html => dom/canvas/test/webgl-conformance/conformance/attribs/gl-vertex-attrib.html rename : content/canvas/test/webgl-conformance/conformance/attribs/gl-vertexattribpointer-offsets.html => dom/canvas/test/webgl-conformance/conformance/attribs/gl-vertexattribpointer-offsets.html rename : content/canvas/test/webgl-conformance/conformance/attribs/gl-vertexattribpointer.html => dom/canvas/test/webgl-conformance/conformance/attribs/gl-vertexattribpointer.html rename : content/canvas/test/webgl-conformance/conformance/buffers/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/buffers/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/buffers/buffer-bind-test.html => dom/canvas/test/webgl-conformance/conformance/buffers/buffer-bind-test.html rename : content/canvas/test/webgl-conformance/conformance/buffers/buffer-data-array-buffer.html => dom/canvas/test/webgl-conformance/conformance/buffers/buffer-data-array-buffer.html rename : content/canvas/test/webgl-conformance/conformance/buffers/index-validation-copies-indices.html => dom/canvas/test/webgl-conformance/conformance/buffers/index-validation-copies-indices.html rename : content/canvas/test/webgl-conformance/conformance/buffers/index-validation-crash-with-buffer-sub-data.html => dom/canvas/test/webgl-conformance/conformance/buffers/index-validation-crash-with-buffer-sub-data.html rename : content/canvas/test/webgl-conformance/conformance/buffers/index-validation-verifies-too-many-indices.html => dom/canvas/test/webgl-conformance/conformance/buffers/index-validation-verifies-too-many-indices.html rename : content/canvas/test/webgl-conformance/conformance/buffers/index-validation-with-resized-buffer.html => dom/canvas/test/webgl-conformance/conformance/buffers/index-validation-with-resized-buffer.html rename : content/canvas/test/webgl-conformance/conformance/buffers/index-validation.html => dom/canvas/test/webgl-conformance/conformance/buffers/index-validation.html rename : content/canvas/test/webgl-conformance/conformance/canvas/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/canvas/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/canvas/buffer-offscreen-test.html => dom/canvas/test/webgl-conformance/conformance/canvas/buffer-offscreen-test.html rename : content/canvas/test/webgl-conformance/conformance/canvas/buffer-preserve-test.html => dom/canvas/test/webgl-conformance/conformance/canvas/buffer-preserve-test.html rename : content/canvas/test/webgl-conformance/conformance/canvas/canvas-test.html => dom/canvas/test/webgl-conformance/conformance/canvas/canvas-test.html rename : content/canvas/test/webgl-conformance/conformance/canvas/canvas-zero-size.html => dom/canvas/test/webgl-conformance/conformance/canvas/canvas-zero-size.html rename : content/canvas/test/webgl-conformance/conformance/canvas/drawingbuffer-static-canvas-test.html => dom/canvas/test/webgl-conformance/conformance/canvas/drawingbuffer-static-canvas-test.html rename : content/canvas/test/webgl-conformance/conformance/canvas/drawingbuffer-test.html => dom/canvas/test/webgl-conformance/conformance/canvas/drawingbuffer-test.html rename : content/canvas/test/webgl-conformance/conformance/canvas/viewport-unchanged-upon-resize.html => dom/canvas/test/webgl-conformance/conformance/canvas/viewport-unchanged-upon-resize.html rename : content/canvas/test/webgl-conformance/conformance/context/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/context/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/context/constants.html => dom/canvas/test/webgl-conformance/conformance/context/constants.html rename : content/canvas/test/webgl-conformance/conformance/context/context-attribute-preserve-drawing-buffer.html => dom/canvas/test/webgl-conformance/conformance/context/context-attribute-preserve-drawing-buffer.html rename : content/canvas/test/webgl-conformance/conformance/context/context-attributes-alpha-depth-stencil-antialias.html => dom/canvas/test/webgl-conformance/conformance/context/context-attributes-alpha-depth-stencil-antialias.html rename : content/canvas/test/webgl-conformance/conformance/context/context-lost-restored.html => dom/canvas/test/webgl-conformance/conformance/context/context-lost-restored.html rename : content/canvas/test/webgl-conformance/conformance/context/context-lost.html => dom/canvas/test/webgl-conformance/conformance/context/context-lost.html rename : content/canvas/test/webgl-conformance/conformance/context/context-type-test.html => dom/canvas/test/webgl-conformance/conformance/context/context-type-test.html rename : content/canvas/test/webgl-conformance/conformance/context/incorrect-context-object-behaviour.html => dom/canvas/test/webgl-conformance/conformance/context/incorrect-context-object-behaviour.html rename : content/canvas/test/webgl-conformance/conformance/context/methods.html => dom/canvas/test/webgl-conformance/conformance/context/methods.html rename : content/canvas/test/webgl-conformance/conformance/context/premultiplyalpha-test.html => dom/canvas/test/webgl-conformance/conformance/context/premultiplyalpha-test.html rename : content/canvas/test/webgl-conformance/conformance/context/resource-sharing-test.html => dom/canvas/test/webgl-conformance/conformance/context/resource-sharing-test.html rename : content/canvas/test/webgl-conformance/conformance/extensions/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/extensions/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/extensions/ext-sRGB.html => dom/canvas/test/webgl-conformance/conformance/extensions/ext-sRGB.html rename : content/canvas/test/webgl-conformance/conformance/extensions/ext-texture-filter-anisotropic.html => dom/canvas/test/webgl-conformance/conformance/extensions/ext-texture-filter-anisotropic.html rename : content/canvas/test/webgl-conformance/conformance/extensions/oes-standard-derivatives.html => dom/canvas/test/webgl-conformance/conformance/extensions/oes-standard-derivatives.html rename : content/canvas/test/webgl-conformance/conformance/extensions/oes-texture-float.html => dom/canvas/test/webgl-conformance/conformance/extensions/oes-texture-float.html rename : content/canvas/test/webgl-conformance/conformance/extensions/oes-vertex-array-object.html => dom/canvas/test/webgl-conformance/conformance/extensions/oes-vertex-array-object.html rename : content/canvas/test/webgl-conformance/conformance/extensions/webgl-compressed-texture-etc1.html => dom/canvas/test/webgl-conformance/conformance/extensions/webgl-compressed-texture-etc1.html rename : content/canvas/test/webgl-conformance/conformance/extensions/webgl-compressed-texture-s3tc.html => dom/canvas/test/webgl-conformance/conformance/extensions/webgl-compressed-texture-s3tc.html rename : content/canvas/test/webgl-conformance/conformance/extensions/webgl-debug-renderer-info.html => dom/canvas/test/webgl-conformance/conformance/extensions/webgl-debug-renderer-info.html rename : content/canvas/test/webgl-conformance/conformance/extensions/webgl-debug-shaders.html => dom/canvas/test/webgl-conformance/conformance/extensions/webgl-debug-shaders.html rename : content/canvas/test/webgl-conformance/conformance/extensions/webgl-depth-texture.html => dom/canvas/test/webgl-conformance/conformance/extensions/webgl-depth-texture.html rename : content/canvas/test/webgl-conformance/conformance/glsl/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/glsl/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/glsl/functions/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-abs.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-abs.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-acos.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-acos.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-asin.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-asin.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-atan-xy.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-atan-xy.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-atan.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-atan.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-ceil.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-ceil.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-clamp-float.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-clamp-float.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-clamp-gentype.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-clamp-gentype.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-cos.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-cos.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-cross.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-cross.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-distance.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-distance.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-dot.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-dot.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-faceforward.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-faceforward.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-floor.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-floor.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-fract.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-fract.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-length.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-length.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-lessThan.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-lessThan.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-max-float.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-max-float.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-max-gentype.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-max-gentype.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-min-float.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-min-float.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-min-gentype.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-min-gentype.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-mix-float.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-mix-float.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-mix-gentype.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-mix-gentype.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-mod-float.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-mod-float.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-mod-gentype.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-mod-gentype.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-normalize.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-normalize.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-reflect.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-reflect.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-refract.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-refract.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-sign.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-sign.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-sin.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-sin.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-smoothstep-float.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-smoothstep-float.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-smoothstep-gentype.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-smoothstep-gentype.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-step-float.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-step-float.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-step-gentype.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function-step-gentype.html rename : content/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function.html => dom/canvas/test/webgl-conformance/conformance/glsl/functions/glsl-function.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_float.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_float.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_mat2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_mat2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_mat3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_mat3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_mat4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_mat4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/add_int_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/add_ivec2_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/add_ivec2_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/add_ivec3_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/add_ivec3_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/add_ivec4_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/add_ivec4_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/assign_int_to_float.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/assign_int_to_float.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/assign_ivec2_to_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/assign_ivec2_to_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/assign_ivec3_to_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/assign_ivec3_to_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/assign_ivec4_to_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/assign_ivec4_to_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/construct_struct.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/construct_struct.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_float.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_float.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_mat2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_mat2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_mat3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_mat3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_mat4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_mat4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_int_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_ivec2_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_ivec2_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_ivec3_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_ivec3_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_ivec4_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/divide_ivec4_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/equal_int_float.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/equal_int_float.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/equal_ivec2_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/equal_ivec2_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/equal_ivec3_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/equal_ivec3_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/equal_ivec4_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/equal_ivec4_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/function_int_float.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/function_int_float.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/function_ivec2_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/function_ivec2_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/function_ivec3_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/function_ivec3_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/function_ivec4_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/function_ivec4_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/greater_than.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/greater_than.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/greater_than_equal.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/greater_than_equal.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/less_than.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/less_than.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/less_than_equal.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/less_than_equal.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_float.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_float.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_mat2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_mat2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_mat3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_mat3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_mat4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_mat4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_int_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_ivec2_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_ivec2_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_ivec3_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_ivec3_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_ivec4_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/multiply_ivec4_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/not_equal_int_float.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/not_equal_int_float.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/not_equal_ivec2_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/not_equal_ivec2_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/not_equal_ivec3_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/not_equal_ivec3_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/not_equal_ivec4_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/not_equal_ivec4_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_float.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_float.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_mat2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_mat2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_mat3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_mat3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_mat4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_mat4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_int_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_ivec2_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_ivec2_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_ivec3_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_ivec3_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_ivec4_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/subtract_ivec4_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/ternary_int_float.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/ternary_int_float.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/ternary_ivec2_vec2.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/ternary_ivec2_vec2.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/ternary_ivec3_vec3.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/ternary_ivec3_vec3.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/implicit/ternary_ivec4_vec4.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/implicit/ternary_ivec4_vec4.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/matrices/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/glsl/matrices/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/glsl/matrices/glsl-mat4-to-mat3.html => dom/canvas/test/webgl-conformance/conformance/glsl/matrices/glsl-mat4-to-mat3.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/glsl/misc/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/attrib-location-length-limits.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/attrib-location-length-limits.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/embedded-struct-definitions-forbidden.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/embedded-struct-definitions-forbidden.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/glsl-2types-of-textures-on-same-unit.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/glsl-2types-of-textures-on-same-unit.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/glsl-function-nodes.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/glsl-function-nodes.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/glsl-long-variable-names.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/glsl-long-variable-names.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/glsl-vertex-branch.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/glsl-vertex-branch.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/include.vs => dom/canvas/test/webgl-conformance/conformance/glsl/misc/include.vs rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/non-ascii-comments.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/non-ascii-comments.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/non-ascii.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/non-ascii.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/re-compile-re-link.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/re-compile-re-link.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-256-character-identifier.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-256-character-identifier.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-257-character-identifier.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-257-character-identifier.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-_webgl-identifier.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-_webgl-identifier.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-arbitrary-indexing.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-arbitrary-indexing.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-arbitrary-indexing.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-arbitrary-indexing.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-attrib-array.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-attrib-array.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-attrib-struct.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-attrib-struct.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-clipvertex.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-clipvertex.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-comma-assignment.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-comma-assignment.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-comma-conditional-assignment.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-comma-conditional-assignment.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-conditional-scoping.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-conditional-scoping.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-default-precision.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-default-precision.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-default-precision.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-default-precision.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-define-line-continuation.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-define-line-continuation.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-dfdx-no-ext.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-dfdx-no-ext.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-dfdx.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-dfdx.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-do-scoping.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-do-scoping.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-error-directive.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-error-directive.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-explicit-int-cast.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-explicit-int-cast.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-float-return-value.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-float-return-value.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-for-loop.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-for-loop.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-for-scoping.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-for-scoping.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-frag-depth.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-frag-depth.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-function-recursion.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-function-recursion.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-function-scoped-struct.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-function-scoped-struct.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-functional-scoping.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-functional-scoping.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-glcolor.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-glcolor.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-gles-1.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-gles-1.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-gles-symbol.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-gles-symbol.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-glprojectionmatrix.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-glprojectionmatrix.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-hex-int-constant-macro.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-hex-int-constant-macro.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-implicit-vec3-to-vec4-cast.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-implicit-vec3-to-vec4-cast.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-include.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-include.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-int-return-value.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-int-return-value.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-invalid-identifier.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-invalid-identifier.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-ivec2-return-value.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-ivec2-return-value.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-ivec3-return-value.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-ivec3-return-value.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-ivec4-return-value.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-ivec4-return-value.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-limited-indexing.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-limited-indexing.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-line-directive.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-line-directive.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-long-line.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-long-line.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-non-ascii-error.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-non-ascii-error.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-precision.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-precision.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-quoted-error.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-quoted-error.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-undefined-preprocessor-symbol.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-undefined-preprocessor-symbol.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-uniform-in-loop-condition.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-uniform-in-loop-condition.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-vec2-return-value.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-vec2-return-value.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-vec3-return-value.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-vec3-return-value.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-vec4-return-value.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-vec4-return-value.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-vec4-vec3-vec4-conditional.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-vec4-vec3-vec4-conditional.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-version-100.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-version-100.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-version-100.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-version-100.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-version-120.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-version-120.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-version-130.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-version-130.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-webgl-identifier.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-with-webgl-identifier.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shader-without-precision.frag.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shader-without-precision.frag.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/shared.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/shared.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/struct-nesting-exceeds-maximum.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/struct-nesting-exceeds-maximum.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/struct-nesting-under-maximum.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/struct-nesting-under-maximum.html rename : content/canvas/test/webgl-conformance/conformance/glsl/misc/uniform-location-length-limits.html => dom/canvas/test/webgl-conformance/conformance/glsl/misc/uniform-location-length-limits.html rename : content/canvas/test/webgl-conformance/conformance/glsl/reserved/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/glsl/reserved/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/glsl/reserved/_webgl_field.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/reserved/_webgl_field.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/reserved/_webgl_function.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/reserved/_webgl_function.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/reserved/_webgl_struct.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/reserved/_webgl_struct.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/reserved/_webgl_variable.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/reserved/_webgl_variable.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/reserved/webgl_field.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/reserved/webgl_field.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/reserved/webgl_function.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/reserved/webgl_function.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/reserved/webgl_struct.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/reserved/webgl_struct.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/reserved/webgl_variable.vert.html => dom/canvas/test/webgl-conformance/conformance/glsl/reserved/webgl_variable.vert.html rename : content/canvas/test/webgl-conformance/conformance/glsl/samplers/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/glsl/samplers/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/glsl/samplers/glsl-function-texture2d-bias.html => dom/canvas/test/webgl-conformance/conformance/glsl/samplers/glsl-function-texture2d-bias.html rename : content/canvas/test/webgl-conformance/conformance/glsl/samplers/glsl-function-texture2dlod.html => dom/canvas/test/webgl-conformance/conformance/glsl/samplers/glsl-function-texture2dlod.html rename : content/canvas/test/webgl-conformance/conformance/glsl/samplers/glsl-function-texture2dproj.html => dom/canvas/test/webgl-conformance/conformance/glsl/samplers/glsl-function-texture2dproj.html rename : content/canvas/test/webgl-conformance/conformance/glsl/variables/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/glsl/variables/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/glsl/variables/gl-fragcoord.html => dom/canvas/test/webgl-conformance/conformance/glsl/variables/gl-fragcoord.html rename : content/canvas/test/webgl-conformance/conformance/glsl/variables/gl-frontfacing.html => dom/canvas/test/webgl-conformance/conformance/glsl/variables/gl-frontfacing.html rename : content/canvas/test/webgl-conformance/conformance/glsl/variables/gl-pointcoord.html => dom/canvas/test/webgl-conformance/conformance/glsl/variables/gl-pointcoord.html rename : content/canvas/test/webgl-conformance/conformance/limits/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/limits/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/limits/gl-max-texture-dimensions.html => dom/canvas/test/webgl-conformance/conformance/limits/gl-max-texture-dimensions.html rename : content/canvas/test/webgl-conformance/conformance/limits/gl-min-attribs.html => dom/canvas/test/webgl-conformance/conformance/limits/gl-min-attribs.html rename : content/canvas/test/webgl-conformance/conformance/limits/gl-min-textures.html => dom/canvas/test/webgl-conformance/conformance/limits/gl-min-textures.html rename : content/canvas/test/webgl-conformance/conformance/limits/gl-min-uniforms.html => dom/canvas/test/webgl-conformance/conformance/limits/gl-min-uniforms.html rename : content/canvas/test/webgl-conformance/conformance/misc/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/misc/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/misc/bad-arguments-test.html => dom/canvas/test/webgl-conformance/conformance/misc/bad-arguments-test.html rename : content/canvas/test/webgl-conformance/conformance/misc/delayed-drawing.html => dom/canvas/test/webgl-conformance/conformance/misc/delayed-drawing.html rename : content/canvas/test/webgl-conformance/conformance/misc/error-reporting.html => dom/canvas/test/webgl-conformance/conformance/misc/error-reporting.html rename : content/canvas/test/webgl-conformance/conformance/misc/functions-returning-strings.html => dom/canvas/test/webgl-conformance/conformance/misc/functions-returning-strings.html rename : content/canvas/test/webgl-conformance/conformance/misc/instanceof-test.html => dom/canvas/test/webgl-conformance/conformance/misc/instanceof-test.html rename : content/canvas/test/webgl-conformance/conformance/misc/invalid-passed-params.html => dom/canvas/test/webgl-conformance/conformance/misc/invalid-passed-params.html rename : content/canvas/test/webgl-conformance/conformance/misc/is-object.html => dom/canvas/test/webgl-conformance/conformance/misc/is-object.html rename : content/canvas/test/webgl-conformance/conformance/misc/null-object-behaviour.html => dom/canvas/test/webgl-conformance/conformance/misc/null-object-behaviour.html rename : content/canvas/test/webgl-conformance/conformance/misc/object-deletion-behaviour.html => dom/canvas/test/webgl-conformance/conformance/misc/object-deletion-behaviour.html rename : content/canvas/test/webgl-conformance/conformance/misc/shader-precision-format.html => dom/canvas/test/webgl-conformance/conformance/misc/shader-precision-format.html rename : content/canvas/test/webgl-conformance/conformance/misc/type-conversion-test.html => dom/canvas/test/webgl-conformance/conformance/misc/type-conversion-test.html rename : content/canvas/test/webgl-conformance/conformance/misc/uninitialized-test.html => dom/canvas/test/webgl-conformance/conformance/misc/uninitialized-test.html rename : content/canvas/test/webgl-conformance/conformance/misc/webgl-specific.html => dom/canvas/test/webgl-conformance/conformance/misc/webgl-specific.html rename : content/canvas/test/webgl-conformance/conformance/more/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/more/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/more/README.md => dom/canvas/test/webgl-conformance/conformance/more/README.md rename : content/canvas/test/webgl-conformance/conformance/more/all_tests.html => dom/canvas/test/webgl-conformance/conformance/more/all_tests.html rename : content/canvas/test/webgl-conformance/conformance/more/all_tests_linkonly.html => dom/canvas/test/webgl-conformance/conformance/more/all_tests_linkonly.html rename : content/canvas/test/webgl-conformance/conformance/more/all_tests_sequential.html => dom/canvas/test/webgl-conformance/conformance/more/all_tests_sequential.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-A.js => dom/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-A.js rename : content/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-B1.js => dom/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-B1.js rename : content/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-B2.js => dom/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-B2.js rename : content/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-B3.js => dom/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-B3.js rename : content/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-B4.js => dom/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-B4.js rename : content/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-C.js => dom/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-C.js rename : content/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-D_G.js => dom/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-D_G.js rename : content/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-G_I.js => dom/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-G_I.js rename : content/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-L_S.js => dom/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-L_S.js rename : content/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-S_V.js => dom/canvas/test/webgl-conformance/conformance/more/conformance/argGenerators-S_V.js rename : content/canvas/test/webgl-conformance/conformance/more/conformance/badArgsArityLessThanArgc.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/badArgsArityLessThanArgc.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/constants.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/constants.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/fuzzTheAPI.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/fuzzTheAPI.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/getContext.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/getContext.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/methods.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/methods.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-A.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-A.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-B1.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-B1.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-B2.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-B2.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-B3.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-B3.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-B4.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-B4.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-C.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-C.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-D_G.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-D_G.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-G_I.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-G_I.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-L_S.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-L_S.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-S_V.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI-S_V.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI.js => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPI.js rename : content/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPIBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/quickCheckAPIBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/conformance/webGLArrays.html => dom/canvas/test/webgl-conformance/conformance/more/conformance/webGLArrays.html rename : content/canvas/test/webgl-conformance/conformance/more/demos/opengl_web.html => dom/canvas/test/webgl-conformance/conformance/more/demos/opengl_web.html rename : content/canvas/test/webgl-conformance/conformance/more/demos/video.html => dom/canvas/test/webgl-conformance/conformance/more/demos/video.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/bindBuffer.html => dom/canvas/test/webgl-conformance/conformance/more/functions/bindBuffer.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/bindBufferBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/bindBufferBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/bindFramebufferLeaveNonZero.html => dom/canvas/test/webgl-conformance/conformance/more/functions/bindFramebufferLeaveNonZero.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/bufferData.html => dom/canvas/test/webgl-conformance/conformance/more/functions/bufferData.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/bufferDataBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/bufferDataBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/bufferSubData.html => dom/canvas/test/webgl-conformance/conformance/more/functions/bufferSubData.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/bufferSubDataBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/bufferSubDataBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/copyTexImage2D.html => dom/canvas/test/webgl-conformance/conformance/more/functions/copyTexImage2D.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/copyTexImage2DBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/copyTexImage2DBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/copyTexSubImage2D.html => dom/canvas/test/webgl-conformance/conformance/more/functions/copyTexSubImage2D.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/copyTexSubImage2DBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/copyTexSubImage2DBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/deleteBufferBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/deleteBufferBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/drawArrays.html => dom/canvas/test/webgl-conformance/conformance/more/functions/drawArrays.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/drawArraysOutOfBounds.html => dom/canvas/test/webgl-conformance/conformance/more/functions/drawArraysOutOfBounds.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/drawElements.html => dom/canvas/test/webgl-conformance/conformance/more/functions/drawElements.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/drawElementsBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/drawElementsBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/isTests.html => dom/canvas/test/webgl-conformance/conformance/more/functions/isTests.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/readPixels.html => dom/canvas/test/webgl-conformance/conformance/more/functions/readPixels.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/readPixelsBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/readPixelsBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/texImage2D.html => dom/canvas/test/webgl-conformance/conformance/more/functions/texImage2D.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/texImage2DBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/texImage2DBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/texImage2DHTML.html => dom/canvas/test/webgl-conformance/conformance/more/functions/texImage2DHTML.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/texImage2DHTMLBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/texImage2DHTMLBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/texSubImage2D.html => dom/canvas/test/webgl-conformance/conformance/more/functions/texSubImage2D.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/texSubImage2DBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/texSubImage2DBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/texSubImage2DHTML.html => dom/canvas/test/webgl-conformance/conformance/more/functions/texSubImage2DHTML.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/texSubImage2DHTMLBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/texSubImage2DHTMLBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/uniformMatrix.html => dom/canvas/test/webgl-conformance/conformance/more/functions/uniformMatrix.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/uniformMatrixBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/uniformMatrixBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/uniformf.html => dom/canvas/test/webgl-conformance/conformance/more/functions/uniformf.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/uniformfArrayLen1.html => dom/canvas/test/webgl-conformance/conformance/more/functions/uniformfArrayLen1.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/uniformfBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/uniformfBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/uniformi.html => dom/canvas/test/webgl-conformance/conformance/more/functions/uniformi.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/uniformiBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/uniformiBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/vertexAttrib.html => dom/canvas/test/webgl-conformance/conformance/more/functions/vertexAttrib.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/vertexAttribBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/vertexAttribBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/vertexAttribPointer.html => dom/canvas/test/webgl-conformance/conformance/more/functions/vertexAttribPointer.html rename : content/canvas/test/webgl-conformance/conformance/more/functions/vertexAttribPointerBadArgs.html => dom/canvas/test/webgl-conformance/conformance/more/functions/vertexAttribPointerBadArgs.html rename : content/canvas/test/webgl-conformance/conformance/more/glsl/arrayOutOfBounds.html => dom/canvas/test/webgl-conformance/conformance/more/glsl/arrayOutOfBounds.html rename : content/canvas/test/webgl-conformance/conformance/more/glsl/longLoops.html => dom/canvas/test/webgl-conformance/conformance/more/glsl/longLoops.html rename : content/canvas/test/webgl-conformance/conformance/more/glsl/uniformOutOfBounds.html => dom/canvas/test/webgl-conformance/conformance/more/glsl/uniformOutOfBounds.html rename : content/canvas/test/webgl-conformance/conformance/more/glsl/unusedAttribsUniforms.html => dom/canvas/test/webgl-conformance/conformance/more/glsl/unusedAttribsUniforms.html rename : content/canvas/test/webgl-conformance/conformance/more/index.html => dom/canvas/test/webgl-conformance/conformance/more/index.html rename : content/canvas/test/webgl-conformance/conformance/more/performance/CPUvsGPU.html => dom/canvas/test/webgl-conformance/conformance/more/performance/CPUvsGPU.html rename : content/canvas/test/webgl-conformance/conformance/more/performance/bandwidth.html => dom/canvas/test/webgl-conformance/conformance/more/performance/bandwidth.html rename : content/canvas/test/webgl-conformance/conformance/more/performance/jsGCPause.html => dom/canvas/test/webgl-conformance/conformance/more/performance/jsGCPause.html rename : content/canvas/test/webgl-conformance/conformance/more/performance/jsMatrixMult.html => dom/canvas/test/webgl-conformance/conformance/more/performance/jsMatrixMult.html rename : content/canvas/test/webgl-conformance/conformance/more/performance/jsToGLOverhead.html => dom/canvas/test/webgl-conformance/conformance/more/performance/jsToGLOverhead.html rename : content/canvas/test/webgl-conformance/conformance/more/unit.css => dom/canvas/test/webgl-conformance/conformance/more/unit.css rename : content/canvas/test/webgl-conformance/conformance/more/unit.js => dom/canvas/test/webgl-conformance/conformance/more/unit.js rename : content/canvas/test/webgl-conformance/conformance/more/util.js => dom/canvas/test/webgl-conformance/conformance/more/util.js rename : content/canvas/test/webgl-conformance/conformance/programs/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/programs/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/programs/get-active-test.html => dom/canvas/test/webgl-conformance/conformance/programs/get-active-test.html rename : content/canvas/test/webgl-conformance/conformance/programs/gl-bind-attrib-location-test.html => dom/canvas/test/webgl-conformance/conformance/programs/gl-bind-attrib-location-test.html rename : content/canvas/test/webgl-conformance/conformance/programs/gl-get-active-attribute.html => dom/canvas/test/webgl-conformance/conformance/programs/gl-get-active-attribute.html rename : content/canvas/test/webgl-conformance/conformance/programs/gl-get-active-uniform.html => dom/canvas/test/webgl-conformance/conformance/programs/gl-get-active-uniform.html rename : content/canvas/test/webgl-conformance/conformance/programs/gl-getshadersource.html => dom/canvas/test/webgl-conformance/conformance/programs/gl-getshadersource.html rename : content/canvas/test/webgl-conformance/conformance/programs/gl-shader-test.html => dom/canvas/test/webgl-conformance/conformance/programs/gl-shader-test.html rename : content/canvas/test/webgl-conformance/conformance/programs/invalid-UTF-16.html => dom/canvas/test/webgl-conformance/conformance/programs/invalid-UTF-16.html rename : content/canvas/test/webgl-conformance/conformance/programs/program-test.html => dom/canvas/test/webgl-conformance/conformance/programs/program-test.html rename : content/canvas/test/webgl-conformance/conformance/reading/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/reading/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/reading/read-pixels-pack-alignment.html => dom/canvas/test/webgl-conformance/conformance/reading/read-pixels-pack-alignment.html rename : content/canvas/test/webgl-conformance/conformance/reading/read-pixels-test.html => dom/canvas/test/webgl-conformance/conformance/reading/read-pixels-test.html rename : content/canvas/test/webgl-conformance/conformance/renderbuffers/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/renderbuffers/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/renderbuffers/framebuffer-object-attachment.html => dom/canvas/test/webgl-conformance/conformance/renderbuffers/framebuffer-object-attachment.html rename : content/canvas/test/webgl-conformance/conformance/renderbuffers/framebuffer-test.html => dom/canvas/test/webgl-conformance/conformance/renderbuffers/framebuffer-test.html rename : content/canvas/test/webgl-conformance/conformance/renderbuffers/renderbuffer-initialization.html => dom/canvas/test/webgl-conformance/conformance/renderbuffers/renderbuffer-initialization.html rename : content/canvas/test/webgl-conformance/conformance/rendering/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/rendering/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/rendering/draw-arrays-out-of-bounds.html => dom/canvas/test/webgl-conformance/conformance/rendering/draw-arrays-out-of-bounds.html rename : content/canvas/test/webgl-conformance/conformance/rendering/draw-elements-out-of-bounds.html => dom/canvas/test/webgl-conformance/conformance/rendering/draw-elements-out-of-bounds.html rename : content/canvas/test/webgl-conformance/conformance/rendering/gl-clear.html => dom/canvas/test/webgl-conformance/conformance/rendering/gl-clear.html rename : content/canvas/test/webgl-conformance/conformance/rendering/gl-drawelements.html => dom/canvas/test/webgl-conformance/conformance/rendering/gl-drawelements.html rename : content/canvas/test/webgl-conformance/conformance/rendering/gl-scissor-test.html => dom/canvas/test/webgl-conformance/conformance/rendering/gl-scissor-test.html rename : content/canvas/test/webgl-conformance/conformance/rendering/line-loop-tri-fan.html => dom/canvas/test/webgl-conformance/conformance/rendering/line-loop-tri-fan.html rename : content/canvas/test/webgl-conformance/conformance/rendering/more-than-65536-indices.html => dom/canvas/test/webgl-conformance/conformance/rendering/more-than-65536-indices.html rename : content/canvas/test/webgl-conformance/conformance/rendering/point-size.html => dom/canvas/test/webgl-conformance/conformance/rendering/point-size.html rename : content/canvas/test/webgl-conformance/conformance/rendering/triangle.html => dom/canvas/test/webgl-conformance/conformance/rendering/triangle.html rename : content/canvas/test/webgl-conformance/conformance/resources/3x3.png => dom/canvas/test/webgl-conformance/conformance/resources/3x3.png rename : content/canvas/test/webgl-conformance/conformance/resources/blue-1x1.jpg => dom/canvas/test/webgl-conformance/conformance/resources/blue-1x1.jpg rename : content/canvas/test/webgl-conformance/conformance/resources/boolUniformShader.vert => dom/canvas/test/webgl-conformance/conformance/resources/boolUniformShader.vert rename : content/canvas/test/webgl-conformance/conformance/resources/bug-32888-texture.png => dom/canvas/test/webgl-conformance/conformance/resources/bug-32888-texture.png rename : content/canvas/test/webgl-conformance/conformance/resources/floatUniformShader.vert => dom/canvas/test/webgl-conformance/conformance/resources/floatUniformShader.vert rename : content/canvas/test/webgl-conformance/conformance/resources/fragmentShader.frag => dom/canvas/test/webgl-conformance/conformance/resources/fragmentShader.frag rename : content/canvas/test/webgl-conformance/conformance/resources/glsl-conformance-test.js => dom/canvas/test/webgl-conformance/conformance/resources/glsl-conformance-test.js rename : content/canvas/test/webgl-conformance/conformance/resources/glsl-feature-tests.css => dom/canvas/test/webgl-conformance/conformance/resources/glsl-feature-tests.css rename : content/canvas/test/webgl-conformance/conformance/resources/glsl-generator.js => dom/canvas/test/webgl-conformance/conformance/resources/glsl-generator.js rename : content/canvas/test/webgl-conformance/conformance/resources/gray-ramp-256-with-128-alpha.png => dom/canvas/test/webgl-conformance/conformance/resources/gray-ramp-256-with-128-alpha.png rename : content/canvas/test/webgl-conformance/conformance/resources/gray-ramp-256.png => dom/canvas/test/webgl-conformance/conformance/resources/gray-ramp-256.png rename : content/canvas/test/webgl-conformance/conformance/resources/gray-ramp-default-gamma.png => dom/canvas/test/webgl-conformance/conformance/resources/gray-ramp-default-gamma.png rename : content/canvas/test/webgl-conformance/conformance/resources/gray-ramp-gamma0.1.png => dom/canvas/test/webgl-conformance/conformance/resources/gray-ramp-gamma0.1.png rename : content/canvas/test/webgl-conformance/conformance/resources/gray-ramp-gamma1.0.png => dom/canvas/test/webgl-conformance/conformance/resources/gray-ramp-gamma1.0.png rename : content/canvas/test/webgl-conformance/conformance/resources/gray-ramp-gamma2.0.png => dom/canvas/test/webgl-conformance/conformance/resources/gray-ramp-gamma2.0.png rename : content/canvas/test/webgl-conformance/conformance/resources/gray-ramp-gamma4.0.png => dom/canvas/test/webgl-conformance/conformance/resources/gray-ramp-gamma4.0.png rename : content/canvas/test/webgl-conformance/conformance/resources/gray-ramp-gamma9.0.png => dom/canvas/test/webgl-conformance/conformance/resources/gray-ramp-gamma9.0.png rename : content/canvas/test/webgl-conformance/conformance/resources/gray-ramp.png => dom/canvas/test/webgl-conformance/conformance/resources/gray-ramp.png rename : content/canvas/test/webgl-conformance/conformance/resources/green-2x2-16bit.png => dom/canvas/test/webgl-conformance/conformance/resources/green-2x2-16bit.png rename : content/canvas/test/webgl-conformance/conformance/resources/intArrayUniformShader.vert => dom/canvas/test/webgl-conformance/conformance/resources/intArrayUniformShader.vert rename : content/canvas/test/webgl-conformance/conformance/resources/intUniformShader.vert => dom/canvas/test/webgl-conformance/conformance/resources/intUniformShader.vert rename : content/canvas/test/webgl-conformance/conformance/resources/matUniformShader.vert => dom/canvas/test/webgl-conformance/conformance/resources/matUniformShader.vert rename : content/canvas/test/webgl-conformance/conformance/resources/noopUniformShader.frag => dom/canvas/test/webgl-conformance/conformance/resources/noopUniformShader.frag rename : content/canvas/test/webgl-conformance/conformance/resources/noopUniformShader.vert => dom/canvas/test/webgl-conformance/conformance/resources/noopUniformShader.vert rename : content/canvas/test/webgl-conformance/conformance/resources/npot-video.mp4 => dom/canvas/test/webgl-conformance/conformance/resources/npot-video.mp4 rename : content/canvas/test/webgl-conformance/conformance/resources/npot-video.theora.ogv => dom/canvas/test/webgl-conformance/conformance/resources/npot-video.theora.ogv rename : content/canvas/test/webgl-conformance/conformance/resources/npot-video.webmvp8.webm => dom/canvas/test/webgl-conformance/conformance/resources/npot-video.webmvp8.webm rename : content/canvas/test/webgl-conformance/conformance/resources/pnglib.js => dom/canvas/test/webgl-conformance/conformance/resources/pnglib.js rename : content/canvas/test/webgl-conformance/conformance/resources/red-green.mp4 => dom/canvas/test/webgl-conformance/conformance/resources/red-green.mp4 rename : content/canvas/test/webgl-conformance/conformance/resources/red-green.png => dom/canvas/test/webgl-conformance/conformance/resources/red-green.png rename : content/canvas/test/webgl-conformance/conformance/resources/red-green.theora.ogv => dom/canvas/test/webgl-conformance/conformance/resources/red-green.theora.ogv rename : content/canvas/test/webgl-conformance/conformance/resources/red-green.webmvp8.webm => dom/canvas/test/webgl-conformance/conformance/resources/red-green.webmvp8.webm rename : content/canvas/test/webgl-conformance/conformance/resources/red-indexed.png => dom/canvas/test/webgl-conformance/conformance/resources/red-indexed.png rename : content/canvas/test/webgl-conformance/conformance/resources/samplerUniformShader.frag => dom/canvas/test/webgl-conformance/conformance/resources/samplerUniformShader.frag rename : content/canvas/test/webgl-conformance/conformance/resources/small-square-with-cie-rgb-profile.png => dom/canvas/test/webgl-conformance/conformance/resources/small-square-with-cie-rgb-profile.png rename : content/canvas/test/webgl-conformance/conformance/resources/small-square-with-colormatch-profile.png => dom/canvas/test/webgl-conformance/conformance/resources/small-square-with-colormatch-profile.png rename : content/canvas/test/webgl-conformance/conformance/resources/small-square-with-colorspin-profile.jpg => dom/canvas/test/webgl-conformance/conformance/resources/small-square-with-colorspin-profile.jpg rename : content/canvas/test/webgl-conformance/conformance/resources/small-square-with-colorspin-profile.png => dom/canvas/test/webgl-conformance/conformance/resources/small-square-with-colorspin-profile.png rename : content/canvas/test/webgl-conformance/conformance/resources/small-square-with-e-srgb-profile.png => dom/canvas/test/webgl-conformance/conformance/resources/small-square-with-e-srgb-profile.png rename : content/canvas/test/webgl-conformance/conformance/resources/small-square-with-smpte-c-profile.png => dom/canvas/test/webgl-conformance/conformance/resources/small-square-with-smpte-c-profile.png rename : content/canvas/test/webgl-conformance/conformance/resources/small-square-with-srgb-iec61966-2.1-profile.png => dom/canvas/test/webgl-conformance/conformance/resources/small-square-with-srgb-iec61966-2.1-profile.png rename : content/canvas/test/webgl-conformance/conformance/resources/structUniformShader.vert => dom/canvas/test/webgl-conformance/conformance/resources/structUniformShader.vert rename : content/canvas/test/webgl-conformance/conformance/resources/vertexShader.vert => dom/canvas/test/webgl-conformance/conformance/resources/vertexShader.vert rename : content/canvas/test/webgl-conformance/conformance/resources/webgl-test-utils.js => dom/canvas/test/webgl-conformance/conformance/resources/webgl-test-utils.js rename : content/canvas/test/webgl-conformance/conformance/resources/webgl-test.js => dom/canvas/test/webgl-conformance/conformance/resources/webgl-test.js rename : content/canvas/test/webgl-conformance/conformance/resources/zero-alpha.png => dom/canvas/test/webgl-conformance/conformance/resources/zero-alpha.png rename : content/canvas/test/webgl-conformance/conformance/state/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/state/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/state/gl-enable-enum-test.html => dom/canvas/test/webgl-conformance/conformance/state/gl-enable-enum-test.html rename : content/canvas/test/webgl-conformance/conformance/state/gl-enum-tests.html => dom/canvas/test/webgl-conformance/conformance/state/gl-enum-tests.html rename : content/canvas/test/webgl-conformance/conformance/state/gl-get-calls.html => dom/canvas/test/webgl-conformance/conformance/state/gl-get-calls.html rename : content/canvas/test/webgl-conformance/conformance/state/gl-geterror.html => dom/canvas/test/webgl-conformance/conformance/state/gl-geterror.html rename : content/canvas/test/webgl-conformance/conformance/state/gl-getstring.html => dom/canvas/test/webgl-conformance/conformance/state/gl-getstring.html rename : content/canvas/test/webgl-conformance/conformance/state/gl-object-get-calls.html => dom/canvas/test/webgl-conformance/conformance/state/gl-object-get-calls.html rename : content/canvas/test/webgl-conformance/conformance/textures/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/textures/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/textures/compressed-tex-image.html => dom/canvas/test/webgl-conformance/conformance/textures/compressed-tex-image.html rename : content/canvas/test/webgl-conformance/conformance/textures/copy-tex-image-and-sub-image-2d.html => dom/canvas/test/webgl-conformance/conformance/textures/copy-tex-image-and-sub-image-2d.html rename : content/canvas/test/webgl-conformance/conformance/textures/gl-pixelstorei.html => dom/canvas/test/webgl-conformance/conformance/textures/gl-pixelstorei.html rename : content/canvas/test/webgl-conformance/conformance/textures/gl-teximage.html => dom/canvas/test/webgl-conformance/conformance/textures/gl-teximage.html rename : content/canvas/test/webgl-conformance/conformance/textures/origin-clean-conformance.html => dom/canvas/test/webgl-conformance/conformance/textures/origin-clean-conformance.html rename : content/canvas/test/webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-array-buffer-view.html => dom/canvas/test/webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-array-buffer-view.html rename : content/canvas/test/webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html => dom/canvas/test/webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html rename : content/canvas/test/webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-image-data.html => dom/canvas/test/webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-image-data.html rename : content/canvas/test/webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-image.html => dom/canvas/test/webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-image.html rename : content/canvas/test/webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-video.html => dom/canvas/test/webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-video.html rename : content/canvas/test/webgl-conformance/conformance/textures/tex-image-and-uniform-binding-bugs.html => dom/canvas/test/webgl-conformance/conformance/textures/tex-image-and-uniform-binding-bugs.html rename : content/canvas/test/webgl-conformance/conformance/textures/tex-image-with-format-and-type.html => dom/canvas/test/webgl-conformance/conformance/textures/tex-image-with-format-and-type.html rename : content/canvas/test/webgl-conformance/conformance/textures/tex-image-with-invalid-data.html => dom/canvas/test/webgl-conformance/conformance/textures/tex-image-with-invalid-data.html rename : content/canvas/test/webgl-conformance/conformance/textures/tex-input-validation.html => dom/canvas/test/webgl-conformance/conformance/textures/tex-input-validation.html rename : content/canvas/test/webgl-conformance/conformance/textures/tex-sub-image-2d-bad-args.html => dom/canvas/test/webgl-conformance/conformance/textures/tex-sub-image-2d-bad-args.html rename : content/canvas/test/webgl-conformance/conformance/textures/tex-sub-image-2d.html => dom/canvas/test/webgl-conformance/conformance/textures/tex-sub-image-2d.html rename : content/canvas/test/webgl-conformance/conformance/textures/texparameter-test.html => dom/canvas/test/webgl-conformance/conformance/textures/texparameter-test.html rename : content/canvas/test/webgl-conformance/conformance/textures/texture-active-bind-2.html => dom/canvas/test/webgl-conformance/conformance/textures/texture-active-bind-2.html rename : content/canvas/test/webgl-conformance/conformance/textures/texture-active-bind.html => dom/canvas/test/webgl-conformance/conformance/textures/texture-active-bind.html rename : content/canvas/test/webgl-conformance/conformance/textures/texture-clear.html => dom/canvas/test/webgl-conformance/conformance/textures/texture-clear.html rename : content/canvas/test/webgl-conformance/conformance/textures/texture-complete.html => dom/canvas/test/webgl-conformance/conformance/textures/texture-complete.html rename : content/canvas/test/webgl-conformance/conformance/textures/texture-formats-test.html => dom/canvas/test/webgl-conformance/conformance/textures/texture-formats-test.html rename : content/canvas/test/webgl-conformance/conformance/textures/texture-mips.html => dom/canvas/test/webgl-conformance/conformance/textures/texture-mips.html rename : content/canvas/test/webgl-conformance/conformance/textures/texture-npot-video.html => dom/canvas/test/webgl-conformance/conformance/textures/texture-npot-video.html rename : content/canvas/test/webgl-conformance/conformance/textures/texture-npot.html => dom/canvas/test/webgl-conformance/conformance/textures/texture-npot.html rename : content/canvas/test/webgl-conformance/conformance/textures/texture-size-cube-maps.html => dom/canvas/test/webgl-conformance/conformance/textures/texture-size-cube-maps.html rename : content/canvas/test/webgl-conformance/conformance/textures/texture-size.html => dom/canvas/test/webgl-conformance/conformance/textures/texture-size.html rename : content/canvas/test/webgl-conformance/conformance/textures/texture-transparent-pixels-initialized.html => dom/canvas/test/webgl-conformance/conformance/textures/texture-transparent-pixels-initialized.html rename : content/canvas/test/webgl-conformance/conformance/typedarrays/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/typedarrays/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/typedarrays/array-buffer-crash.html => dom/canvas/test/webgl-conformance/conformance/typedarrays/array-buffer-crash.html rename : content/canvas/test/webgl-conformance/conformance/typedarrays/array-buffer-view-crash.html => dom/canvas/test/webgl-conformance/conformance/typedarrays/array-buffer-view-crash.html rename : content/canvas/test/webgl-conformance/conformance/typedarrays/array-unit-tests.html => dom/canvas/test/webgl-conformance/conformance/typedarrays/array-unit-tests.html rename : content/canvas/test/webgl-conformance/conformance/uniforms/00_test_list.txt => dom/canvas/test/webgl-conformance/conformance/uniforms/00_test_list.txt rename : content/canvas/test/webgl-conformance/conformance/uniforms/gl-uniform-arrays.html => dom/canvas/test/webgl-conformance/conformance/uniforms/gl-uniform-arrays.html rename : content/canvas/test/webgl-conformance/conformance/uniforms/gl-uniform-bool.html => dom/canvas/test/webgl-conformance/conformance/uniforms/gl-uniform-bool.html rename : content/canvas/test/webgl-conformance/conformance/uniforms/gl-uniformmatrix4fv.html => dom/canvas/test/webgl-conformance/conformance/uniforms/gl-uniformmatrix4fv.html rename : content/canvas/test/webgl-conformance/conformance/uniforms/gl-unknown-uniform.html => dom/canvas/test/webgl-conformance/conformance/uniforms/gl-unknown-uniform.html rename : content/canvas/test/webgl-conformance/conformance/uniforms/null-uniform-location.html => dom/canvas/test/webgl-conformance/conformance/uniforms/null-uniform-location.html rename : content/canvas/test/webgl-conformance/conformance/uniforms/uniform-location.html => dom/canvas/test/webgl-conformance/conformance/uniforms/uniform-location.html rename : content/canvas/test/webgl-conformance/conformance/uniforms/uniform-samplers-test.html => dom/canvas/test/webgl-conformance/conformance/uniforms/uniform-samplers-test.html rename : content/canvas/test/webgl-conformance/dont-load-image-from-internet.patch => dom/canvas/test/webgl-conformance/dont-load-image-from-internet.patch rename : content/canvas/test/webgl-conformance/ext-texture-filter-anisotropic.patch => dom/canvas/test/webgl-conformance/ext-texture-filter-anisotropic.patch rename : content/canvas/test/webgl-conformance/extra/50x50pixel-black-with-red-triangle.png => dom/canvas/test/webgl-conformance/extra/50x50pixel-black-with-red-triangle.png rename : content/canvas/test/webgl-conformance/extra/big-fbos-example.html => dom/canvas/test/webgl-conformance/extra/big-fbos-example.html rename : content/canvas/test/webgl-conformance/extra/canvas-compositing-test.html => dom/canvas/test/webgl-conformance/extra/canvas-compositing-test.html rename : content/canvas/test/webgl-conformance/extra/canvas-compositing-test.png => dom/canvas/test/webgl-conformance/extra/canvas-compositing-test.png rename : content/canvas/test/webgl-conformance/extra/fbo-lost-context.html => dom/canvas/test/webgl-conformance/extra/fbo-lost-context.html rename : content/canvas/test/webgl-conformance/extra/lots-of-polys-example.html => dom/canvas/test/webgl-conformance/extra/lots-of-polys-example.html rename : content/canvas/test/webgl-conformance/extra/offscreen-issue.html => dom/canvas/test/webgl-conformance/extra/offscreen-issue.html rename : content/canvas/test/webgl-conformance/extra/out-of-bounds-uniform-array-access.html => dom/canvas/test/webgl-conformance/extra/out-of-bounds-uniform-array-access.html rename : content/canvas/test/webgl-conformance/extra/out-of-memory.html => dom/canvas/test/webgl-conformance/extra/out-of-memory.html rename : content/canvas/test/webgl-conformance/extra/out-of-resources.html => dom/canvas/test/webgl-conformance/extra/out-of-resources.html rename : content/canvas/test/webgl-conformance/extra/out-of-vram.html => dom/canvas/test/webgl-conformance/extra/out-of-vram.html rename : content/canvas/test/webgl-conformance/extra/simulated-attrib-0-bug-test.html => dom/canvas/test/webgl-conformance/extra/simulated-attrib-0-bug-test.html rename : content/canvas/test/webgl-conformance/extra/slow-shader-example.html => dom/canvas/test/webgl-conformance/extra/slow-shader-example.html rename : content/canvas/test/webgl-conformance/extra/webgl-info.html => dom/canvas/test/webgl-conformance/extra/webgl-info.html rename : content/canvas/test/webgl-conformance/failing_tests_android.txt => dom/canvas/test/webgl-conformance/failing_tests_android.txt rename : content/canvas/test/webgl-conformance/failing_tests_android_nvidia.txt => dom/canvas/test/webgl-conformance/failing_tests_android_nvidia.txt rename : content/canvas/test/webgl-conformance/failing_tests_android_x86.txt => dom/canvas/test/webgl-conformance/failing_tests_android_x86.txt rename : content/canvas/test/webgl-conformance/failing_tests_linux.txt => dom/canvas/test/webgl-conformance/failing_tests_linux.txt rename : content/canvas/test/webgl-conformance/failing_tests_linux_mesa.txt => dom/canvas/test/webgl-conformance/failing_tests_linux_mesa.txt rename : content/canvas/test/webgl-conformance/failing_tests_linux_nvidia.txt => dom/canvas/test/webgl-conformance/failing_tests_linux_nvidia.txt rename : content/canvas/test/webgl-conformance/failing_tests_mac.txt => dom/canvas/test/webgl-conformance/failing_tests_mac.txt rename : content/canvas/test/webgl-conformance/failing_tests_mac_mtnlion.txt => dom/canvas/test/webgl-conformance/failing_tests_mac_mtnlion.txt rename : content/canvas/test/webgl-conformance/failing_tests_windows.txt => dom/canvas/test/webgl-conformance/failing_tests_windows.txt rename : content/canvas/test/webgl-conformance/fix-webgl-harness-async.patch => dom/canvas/test/webgl-conformance/fix-webgl-harness-async.patch rename : content/canvas/test/webgl-conformance/gc.patch => dom/canvas/test/webgl-conformance/gc.patch rename : content/canvas/test/webgl-conformance/log-more-info-about-test-failures.patch => dom/canvas/test/webgl-conformance/log-more-info-about-test-failures.patch rename : content/canvas/test/webgl-conformance/misc/program-test-1.html => dom/canvas/test/webgl-conformance/misc/program-test-1.html rename : content/canvas/test/webgl-conformance/mochitest-conformance-files.ini => dom/canvas/test/webgl-conformance/mochitest-conformance-files.ini rename : content/canvas/test/webgl-conformance/mochitest.ini => dom/canvas/test/webgl-conformance/mochitest.ini rename : content/canvas/test/webgl-conformance/moz.build => dom/canvas/test/webgl-conformance/moz.build rename : content/canvas/test/webgl-conformance/reference-cycle-test.patch => dom/canvas/test/webgl-conformance/reference-cycle-test.patch rename : content/canvas/test/webgl-conformance/resources/cors-util.js => dom/canvas/test/webgl-conformance/resources/cors-util.js rename : content/canvas/test/webgl-conformance/resources/desktop-gl-constants.js => dom/canvas/test/webgl-conformance/resources/desktop-gl-constants.js rename : content/canvas/test/webgl-conformance/resources/js-test-pre.js => dom/canvas/test/webgl-conformance/resources/js-test-pre.js rename : content/canvas/test/webgl-conformance/resources/js-test-style.css => dom/canvas/test/webgl-conformance/resources/js-test-style.css rename : content/canvas/test/webgl-conformance/resources/opengl_logo.jpg => dom/canvas/test/webgl-conformance/resources/opengl_logo.jpg rename : content/canvas/test/webgl-conformance/resources/thunderbird-logo-64x64.png => dom/canvas/test/webgl-conformance/resources/thunderbird-logo-64x64.png rename : content/canvas/test/webgl-conformance/resources/webgl-logo.png => dom/canvas/test/webgl-conformance/resources/webgl-logo.png rename : content/canvas/test/webgl-conformance/resources/webgl-test-harness.js => dom/canvas/test/webgl-conformance/resources/webgl-test-harness.js rename : content/canvas/test/webgl-conformance/skipped_tests_android.txt => dom/canvas/test/webgl-conformance/skipped_tests_android.txt rename : content/canvas/test/webgl-conformance/skipped_tests_android_x86.txt => dom/canvas/test/webgl-conformance/skipped_tests_android_x86.txt rename : content/canvas/test/webgl-conformance/skipped_tests_linux.txt => dom/canvas/test/webgl-conformance/skipped_tests_linux.txt rename : content/canvas/test/webgl-conformance/skipped_tests_linux_mesa.txt => dom/canvas/test/webgl-conformance/skipped_tests_linux_mesa.txt rename : content/canvas/test/webgl-conformance/skipped_tests_win_vista.txt => dom/canvas/test/webgl-conformance/skipped_tests_win_vista.txt rename : content/canvas/test/webgl-conformance/skipped_tests_winxp.txt => dom/canvas/test/webgl-conformance/skipped_tests_winxp.txt rename : content/canvas/test/webgl-conformance/test_webgl_conformance_test_suite.html => dom/canvas/test/webgl-conformance/test_webgl_conformance_test_suite.html rename : content/canvas/test/webgl-conformance/webgl-conformance-tests.html => dom/canvas/test/webgl-conformance/webgl-conformance-tests.html rename : content/canvas/test/webgl-conformance/writemanifest.py => dom/canvas/test/webgl-conformance/writemanifest.py rename : content/canvas/test/webgl-mochitest/driver-info.js => dom/canvas/test/webgl-mochitest/driver-info.js rename : content/canvas/test/webgl-mochitest/mochi-to-testcase.py => dom/canvas/test/webgl-mochitest/mochi-to-testcase.py rename : content/canvas/test/webgl-mochitest/mochitest.ini => dom/canvas/test/webgl-mochitest/mochitest.ini rename : content/canvas/test/webgl-mochitest/moz.build => dom/canvas/test/webgl-mochitest/moz.build rename : content/canvas/test/webgl-mochitest/test_depth_readpixels.html => dom/canvas/test/webgl-mochitest/test_depth_readpixels.html rename : content/canvas/test/webgl-mochitest/test_draw.html => dom/canvas/test/webgl-mochitest/test_draw.html rename : content/canvas/test/webgl-mochitest/test_fb_param.html => dom/canvas/test/webgl-mochitest/test_fb_param.html rename : content/canvas/test/webgl-mochitest/test_fb_param_crash.html => dom/canvas/test/webgl-mochitest/test_fb_param_crash.html rename : content/canvas/test/webgl-mochitest/test_highp_fs.html => dom/canvas/test/webgl-mochitest/test_highp_fs.html rename : content/canvas/test/webgl-mochitest/test_no_arr_points.html => dom/canvas/test/webgl-mochitest/test_no_arr_points.html rename : content/canvas/test/webgl-mochitest/test_noprog_draw.html => dom/canvas/test/webgl-mochitest/test_noprog_draw.html rename : content/canvas/test/webgl-mochitest/test_privileged_exts.html => dom/canvas/test/webgl-mochitest/test_privileged_exts.html rename : content/canvas/test/webgl-mochitest/test_texsubimage_float.html => dom/canvas/test/webgl-mochitest/test_texsubimage_float.html rename : content/canvas/test/webgl-mochitest/test_webgl2_not_exposed.html => dom/canvas/test/webgl-mochitest/test_webgl2_not_exposed.html rename : content/canvas/test/webgl-mochitest/test_webgl_available.html => dom/canvas/test/webgl-mochitest/test_webgl_available.html rename : content/canvas/test/webgl-mochitest/test_webgl_conformance.html => dom/canvas/test/webgl-mochitest/test_webgl_conformance.html rename : content/canvas/test/webgl-mochitest/test_webgl_request_context.html => dom/canvas/test/webgl-mochitest/test_webgl_request_context.html rename : content/canvas/test/webgl-mochitest/test_webgl_request_mismatch.html => dom/canvas/test/webgl-mochitest/test_webgl_request_mismatch.html rename : content/canvas/test/webgl-mochitest/webgl-util.js => dom/canvas/test/webgl-mochitest/webgl-util.js
1792 lines
61 KiB
C++
1792 lines
61 KiB
C++
/* -*- Mode: C++; tab-width: 20; 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 "WebGLContext.h"
|
||
#include "WebGLBuffer.h"
|
||
#include "WebGLVertexAttribData.h"
|
||
#include "WebGLShader.h"
|
||
#include "WebGLProgram.h"
|
||
#include "WebGLUniformLocation.h"
|
||
#include "WebGLFramebuffer.h"
|
||
#include "WebGLRenderbuffer.h"
|
||
#include "WebGLTexture.h"
|
||
#include "WebGLVertexArray.h"
|
||
#include "GLContext.h"
|
||
#include "CanvasUtils.h"
|
||
|
||
#include "mozilla/CheckedInt.h"
|
||
#include "mozilla/Preferences.h"
|
||
#include "mozilla/Services.h"
|
||
|
||
#include "jsfriendapi.h"
|
||
|
||
#include "angle/ShaderLang.h"
|
||
|
||
#include <algorithm>
|
||
|
||
#include "mozilla/Services.h"
|
||
#include "nsIObserverService.h"
|
||
|
||
using namespace mozilla;
|
||
|
||
/**
|
||
* Return the block size for format.
|
||
*/
|
||
static void
|
||
BlockSizeFor(GLenum format, GLint* blockWidth, GLint* blockHeight)
|
||
{
|
||
MOZ_ASSERT(blockWidth && blockHeight);
|
||
|
||
switch (format) {
|
||
case LOCAL_GL_ATC_RGB:
|
||
case LOCAL_GL_ATC_RGBA_EXPLICIT_ALPHA:
|
||
case LOCAL_GL_ATC_RGBA_INTERPOLATED_ALPHA:
|
||
case LOCAL_GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||
if (blockWidth)
|
||
*blockWidth = 4;
|
||
if (blockHeight)
|
||
*blockHeight = 4;
|
||
break;
|
||
|
||
case LOCAL_GL_ETC1_RGB8_OES:
|
||
// 4x4 blocks, but no 4-multiple requirement.
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Return the displayable name for the texture function that is the
|
||
* source for validation.
|
||
*/
|
||
static const char*
|
||
InfoFrom(WebGLTexImageFunc func)
|
||
{
|
||
// TODO: Account for dimensions (WebGL 2)
|
||
switch (func) {
|
||
case WebGLTexImageFunc::TexImage: return "texImage2D";
|
||
case WebGLTexImageFunc::TexSubImage: return "texSubImage2D";
|
||
case WebGLTexImageFunc::CopyTexImage: return "copyTexImage2D";
|
||
case WebGLTexImageFunc::CopyTexSubImage: return "copyTexSubImage2D";
|
||
case WebGLTexImageFunc::CompTexImage: return "compressedTexImage2D";
|
||
case WebGLTexImageFunc::CompTexSubImage: return "compressedTexSubImage2D";
|
||
default:
|
||
MOZ_ASSERT(false, "Missing case for WebGLTexImageSource");
|
||
return "(error)";
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Same as ErrorInvalidEnum but uses WebGLContext::EnumName to print displayable
|
||
* name for \a glenum.
|
||
*/
|
||
static void
|
||
ErrorInvalidEnumWithName(WebGLContext* ctx, const char* msg, GLenum glenum, WebGLTexImageFunc func)
|
||
{
|
||
const char* name = WebGLContext::EnumName(glenum);
|
||
if (name)
|
||
ctx->ErrorInvalidEnum("%s: %s %s", InfoFrom(func), msg, name);
|
||
else
|
||
ctx->ErrorInvalidEnum("%s: %s 0x%04X", InfoFrom(func), msg, glenum);
|
||
}
|
||
|
||
/**
|
||
* Return true if the format is valid for source calls.
|
||
*/
|
||
static bool
|
||
IsAllowedFromSource(GLenum format, WebGLTexImageFunc func)
|
||
{
|
||
switch (format) {
|
||
case LOCAL_GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGB_PVRTC_2BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGB_PVRTC_4BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGBA_PVRTC_2BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGBA_PVRTC_4BPPV1:
|
||
return (func == WebGLTexImageFunc::CompTexImage ||
|
||
func == WebGLTexImageFunc::CompTexSubImage);
|
||
|
||
case LOCAL_GL_ATC_RGB:
|
||
case LOCAL_GL_ATC_RGBA_EXPLICIT_ALPHA:
|
||
case LOCAL_GL_ATC_RGBA_INTERPOLATED_ALPHA:
|
||
case LOCAL_GL_ETC1_RGB8_OES:
|
||
return func == WebGLTexImageFunc::CompTexImage;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Returns true if func is a CopyTexImage variant.
|
||
*/
|
||
static bool
|
||
IsCopyFunc(WebGLTexImageFunc func)
|
||
{
|
||
return (func == WebGLTexImageFunc::CopyTexImage ||
|
||
func == WebGLTexImageFunc::CopyTexSubImage);
|
||
}
|
||
|
||
/**
|
||
* Returns true if func is a SubImage variant.
|
||
*/
|
||
static bool
|
||
IsSubFunc(WebGLTexImageFunc func)
|
||
{
|
||
return (func == WebGLTexImageFunc::TexSubImage ||
|
||
func == WebGLTexImageFunc::CopyTexSubImage ||
|
||
func == WebGLTexImageFunc::CompTexSubImage);
|
||
}
|
||
|
||
/**
|
||
* returns true is target is a texture cube map target.
|
||
*/
|
||
static bool
|
||
IsTexImageCubemapTarget(GLenum target)
|
||
{
|
||
return (target >= LOCAL_GL_TEXTURE_CUBE_MAP_POSITIVE_X &&
|
||
target <= LOCAL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z);
|
||
}
|
||
|
||
/*
|
||
* Pull data out of the program, post-linking
|
||
*/
|
||
bool
|
||
WebGLProgram::UpdateInfo()
|
||
{
|
||
mIdentifierMap = nullptr;
|
||
mIdentifierReverseMap = nullptr;
|
||
mUniformInfoMap = nullptr;
|
||
|
||
mAttribMaxNameLength = 0;
|
||
|
||
for (size_t i = 0; i < mAttachedShaders.Length(); i++)
|
||
mAttribMaxNameLength = std::max(mAttribMaxNameLength, mAttachedShaders[i]->mAttribMaxNameLength);
|
||
|
||
GLint attribCount;
|
||
mContext->gl->fGetProgramiv(mGLName, LOCAL_GL_ACTIVE_ATTRIBUTES, &attribCount);
|
||
|
||
if (!mAttribsInUse.SetLength(mContext->mGLMaxVertexAttribs)) {
|
||
mContext->ErrorOutOfMemory("updateInfo: out of memory to allocate %d attribs", mContext->mGLMaxVertexAttribs);
|
||
return false;
|
||
}
|
||
|
||
for (size_t i = 0; i < mAttribsInUse.Length(); i++)
|
||
mAttribsInUse[i] = false;
|
||
|
||
nsAutoArrayPtr<char> nameBuf(new char[mAttribMaxNameLength]);
|
||
|
||
for (int i = 0; i < attribCount; ++i) {
|
||
GLint attrnamelen;
|
||
GLint attrsize;
|
||
GLenum attrtype;
|
||
mContext->gl->fGetActiveAttrib(mGLName, i, mAttribMaxNameLength, &attrnamelen, &attrsize, &attrtype, nameBuf);
|
||
if (attrnamelen > 0) {
|
||
GLint loc = mContext->gl->fGetAttribLocation(mGLName, nameBuf);
|
||
MOZ_ASSERT(loc >= 0, "major oops in managing the attributes of a WebGL program");
|
||
if (loc < mContext->mGLMaxVertexAttribs) {
|
||
mAttribsInUse[loc] = true;
|
||
} else {
|
||
mContext->GenerateWarning("program exceeds MAX_VERTEX_ATTRIBS");
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!mUniformInfoMap) {
|
||
mUniformInfoMap = new CStringToUniformInfoMap;
|
||
for (size_t i = 0; i < mAttachedShaders.Length(); i++) {
|
||
for (size_t j = 0; j < mAttachedShaders[i]->mUniforms.Length(); j++) {
|
||
const WebGLMappedIdentifier& uniform = mAttachedShaders[i]->mUniforms[j];
|
||
const WebGLUniformInfo& info = mAttachedShaders[i]->mUniformInfos[j];
|
||
mUniformInfoMap->Put(uniform.mapped, info);
|
||
}
|
||
}
|
||
}
|
||
|
||
mActiveAttribMap.clear();
|
||
|
||
GLint numActiveAttrs = 0;
|
||
mContext->gl->fGetProgramiv(mGLName, LOCAL_GL_ACTIVE_ATTRIBUTES, &numActiveAttrs);
|
||
|
||
// Spec says the maximum attrib name length is 256 chars, so this is
|
||
// sufficient to hold any attrib name.
|
||
char attrName[257];
|
||
|
||
GLint dummySize;
|
||
GLenum dummyType;
|
||
for (GLint i = 0; i < numActiveAttrs; i++) {
|
||
mContext->gl->fGetActiveAttrib(mGLName, i, 257, nullptr, &dummySize,
|
||
&dummyType, attrName);
|
||
GLint attrLoc = mContext->gl->fGetAttribLocation(mGLName, attrName);
|
||
MOZ_ASSERT(attrLoc >= 0);
|
||
mActiveAttribMap.insert(std::make_pair(attrLoc, nsCString(attrName)));
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Return the simple base format for a given internal format.
|
||
*
|
||
* \return the corresponding \u base internal format (GL_ALPHA, GL_LUMINANCE,
|
||
* GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA), or GL_NONE if invalid enum.
|
||
*/
|
||
GLenum
|
||
WebGLContext::BaseTexFormat(GLenum internalFormat) const
|
||
{
|
||
if (internalFormat == LOCAL_GL_ALPHA ||
|
||
internalFormat == LOCAL_GL_LUMINANCE ||
|
||
internalFormat == LOCAL_GL_LUMINANCE_ALPHA ||
|
||
internalFormat == LOCAL_GL_RGB ||
|
||
internalFormat == LOCAL_GL_RGBA)
|
||
{
|
||
return internalFormat;
|
||
}
|
||
|
||
if (IsExtensionEnabled(WebGLExtensionID::EXT_sRGB)) {
|
||
if (internalFormat == LOCAL_GL_SRGB)
|
||
return LOCAL_GL_RGB;
|
||
|
||
if (internalFormat == LOCAL_GL_SRGB_ALPHA)
|
||
return LOCAL_GL_RGBA;
|
||
}
|
||
|
||
if (IsExtensionEnabled(WebGLExtensionID::WEBGL_compressed_texture_atc)) {
|
||
if (internalFormat == LOCAL_GL_ATC_RGB)
|
||
return LOCAL_GL_RGB;
|
||
|
||
if (internalFormat == LOCAL_GL_ATC_RGBA_EXPLICIT_ALPHA ||
|
||
internalFormat == LOCAL_GL_ATC_RGBA_INTERPOLATED_ALPHA)
|
||
{
|
||
return LOCAL_GL_RGBA;
|
||
}
|
||
}
|
||
|
||
if (IsExtensionEnabled(WebGLExtensionID::WEBGL_compressed_texture_etc1)) {
|
||
if (internalFormat == LOCAL_GL_ETC1_RGB8_OES)
|
||
return LOCAL_GL_RGB;
|
||
}
|
||
|
||
if (IsExtensionEnabled(WebGLExtensionID::WEBGL_compressed_texture_pvrtc)) {
|
||
if (internalFormat == LOCAL_GL_COMPRESSED_RGB_PVRTC_2BPPV1 ||
|
||
internalFormat == LOCAL_GL_COMPRESSED_RGB_PVRTC_4BPPV1)
|
||
{
|
||
return LOCAL_GL_RGB;
|
||
}
|
||
|
||
if (internalFormat == LOCAL_GL_COMPRESSED_RGBA_PVRTC_2BPPV1 ||
|
||
internalFormat == LOCAL_GL_COMPRESSED_RGBA_PVRTC_4BPPV1)
|
||
{
|
||
return LOCAL_GL_RGBA;
|
||
}
|
||
}
|
||
|
||
if (IsExtensionEnabled(WebGLExtensionID::WEBGL_compressed_texture_s3tc)) {
|
||
if (internalFormat == LOCAL_GL_COMPRESSED_RGB_S3TC_DXT1_EXT)
|
||
return LOCAL_GL_RGB;
|
||
|
||
if (internalFormat == LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT1_EXT ||
|
||
internalFormat == LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT ||
|
||
internalFormat == LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
|
||
{
|
||
return LOCAL_GL_RGBA;
|
||
}
|
||
}
|
||
|
||
if (IsExtensionEnabled(WebGLExtensionID::WEBGL_depth_texture)) {
|
||
if (internalFormat == LOCAL_GL_DEPTH_COMPONENT ||
|
||
internalFormat == LOCAL_GL_DEPTH_COMPONENT16 ||
|
||
internalFormat == LOCAL_GL_DEPTH_COMPONENT32)
|
||
{
|
||
return LOCAL_GL_DEPTH_COMPONENT;
|
||
}
|
||
|
||
if (internalFormat == LOCAL_GL_DEPTH_STENCIL ||
|
||
internalFormat == LOCAL_GL_DEPTH24_STENCIL8)
|
||
{
|
||
return LOCAL_GL_DEPTH_STENCIL;
|
||
}
|
||
}
|
||
|
||
MOZ_ASSERT(false, "Unhandled internalFormat");
|
||
return LOCAL_GL_NONE;
|
||
}
|
||
|
||
bool WebGLContext::ValidateBlendEquationEnum(GLenum mode, const char *info)
|
||
{
|
||
switch (mode) {
|
||
case LOCAL_GL_FUNC_ADD:
|
||
case LOCAL_GL_FUNC_SUBTRACT:
|
||
case LOCAL_GL_FUNC_REVERSE_SUBTRACT:
|
||
return true;
|
||
case LOCAL_GL_MIN:
|
||
case LOCAL_GL_MAX:
|
||
if (IsExtensionEnabled(WebGLExtensionID::EXT_blend_minmax)) {
|
||
return true;
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
ErrorInvalidEnumInfo(info, mode);
|
||
return false;
|
||
}
|
||
|
||
bool WebGLContext::ValidateBlendFuncDstEnum(GLenum factor, const char *info)
|
||
{
|
||
switch (factor) {
|
||
case LOCAL_GL_ZERO:
|
||
case LOCAL_GL_ONE:
|
||
case LOCAL_GL_SRC_COLOR:
|
||
case LOCAL_GL_ONE_MINUS_SRC_COLOR:
|
||
case LOCAL_GL_DST_COLOR:
|
||
case LOCAL_GL_ONE_MINUS_DST_COLOR:
|
||
case LOCAL_GL_SRC_ALPHA:
|
||
case LOCAL_GL_ONE_MINUS_SRC_ALPHA:
|
||
case LOCAL_GL_DST_ALPHA:
|
||
case LOCAL_GL_ONE_MINUS_DST_ALPHA:
|
||
case LOCAL_GL_CONSTANT_COLOR:
|
||
case LOCAL_GL_ONE_MINUS_CONSTANT_COLOR:
|
||
case LOCAL_GL_CONSTANT_ALPHA:
|
||
case LOCAL_GL_ONE_MINUS_CONSTANT_ALPHA:
|
||
return true;
|
||
default:
|
||
ErrorInvalidEnumInfo(info, factor);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool WebGLContext::ValidateBlendFuncSrcEnum(GLenum factor, const char *info)
|
||
{
|
||
if (factor == LOCAL_GL_SRC_ALPHA_SATURATE)
|
||
return true;
|
||
else
|
||
return ValidateBlendFuncDstEnum(factor, info);
|
||
}
|
||
|
||
bool WebGLContext::ValidateBlendFuncEnumsCompatibility(GLenum sfactor, GLenum dfactor, const char *info)
|
||
{
|
||
bool sfactorIsConstantColor = sfactor == LOCAL_GL_CONSTANT_COLOR ||
|
||
sfactor == LOCAL_GL_ONE_MINUS_CONSTANT_COLOR;
|
||
bool sfactorIsConstantAlpha = sfactor == LOCAL_GL_CONSTANT_ALPHA ||
|
||
sfactor == LOCAL_GL_ONE_MINUS_CONSTANT_ALPHA;
|
||
bool dfactorIsConstantColor = dfactor == LOCAL_GL_CONSTANT_COLOR ||
|
||
dfactor == LOCAL_GL_ONE_MINUS_CONSTANT_COLOR;
|
||
bool dfactorIsConstantAlpha = dfactor == LOCAL_GL_CONSTANT_ALPHA ||
|
||
dfactor == LOCAL_GL_ONE_MINUS_CONSTANT_ALPHA;
|
||
if ( (sfactorIsConstantColor && dfactorIsConstantAlpha) ||
|
||
(dfactorIsConstantColor && sfactorIsConstantAlpha) ) {
|
||
ErrorInvalidOperation("%s are mutually incompatible, see section 6.8 in the WebGL 1.0 spec", info);
|
||
return false;
|
||
} else {
|
||
return true;
|
||
}
|
||
}
|
||
|
||
bool WebGLContext::ValidateTextureTargetEnum(GLenum target, const char *info)
|
||
{
|
||
switch (target) {
|
||
case LOCAL_GL_TEXTURE_2D:
|
||
case LOCAL_GL_TEXTURE_CUBE_MAP:
|
||
return true;
|
||
default:
|
||
ErrorInvalidEnumInfo(info, target);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool WebGLContext::ValidateComparisonEnum(GLenum target, const char *info)
|
||
{
|
||
switch (target) {
|
||
case LOCAL_GL_NEVER:
|
||
case LOCAL_GL_LESS:
|
||
case LOCAL_GL_LEQUAL:
|
||
case LOCAL_GL_GREATER:
|
||
case LOCAL_GL_GEQUAL:
|
||
case LOCAL_GL_EQUAL:
|
||
case LOCAL_GL_NOTEQUAL:
|
||
case LOCAL_GL_ALWAYS:
|
||
return true;
|
||
default:
|
||
ErrorInvalidEnumInfo(info, target);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool WebGLContext::ValidateStencilOpEnum(GLenum action, const char *info)
|
||
{
|
||
switch (action) {
|
||
case LOCAL_GL_KEEP:
|
||
case LOCAL_GL_ZERO:
|
||
case LOCAL_GL_REPLACE:
|
||
case LOCAL_GL_INCR:
|
||
case LOCAL_GL_INCR_WRAP:
|
||
case LOCAL_GL_DECR:
|
||
case LOCAL_GL_DECR_WRAP:
|
||
case LOCAL_GL_INVERT:
|
||
return true;
|
||
default:
|
||
ErrorInvalidEnumInfo(info, action);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool WebGLContext::ValidateFaceEnum(GLenum face, const char *info)
|
||
{
|
||
switch (face) {
|
||
case LOCAL_GL_FRONT:
|
||
case LOCAL_GL_BACK:
|
||
case LOCAL_GL_FRONT_AND_BACK:
|
||
return true;
|
||
default:
|
||
ErrorInvalidEnumInfo(info, face);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool WebGLContext::ValidateDrawModeEnum(GLenum mode, const char *info)
|
||
{
|
||
switch (mode) {
|
||
case LOCAL_GL_TRIANGLES:
|
||
case LOCAL_GL_TRIANGLE_STRIP:
|
||
case LOCAL_GL_TRIANGLE_FAN:
|
||
case LOCAL_GL_POINTS:
|
||
case LOCAL_GL_LINE_STRIP:
|
||
case LOCAL_GL_LINE_LOOP:
|
||
case LOCAL_GL_LINES:
|
||
return true;
|
||
default:
|
||
ErrorInvalidEnumInfo(info, mode);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool WebGLContext::ValidateGLSLVariableName(const nsAString& name, const char *info)
|
||
{
|
||
if (name.IsEmpty())
|
||
return false;
|
||
|
||
const uint32_t maxSize = 256;
|
||
if (name.Length() > maxSize) {
|
||
ErrorInvalidValue("%s: identifier is %d characters long, exceeds the maximum allowed length of %d characters",
|
||
info, name.Length(), maxSize);
|
||
return false;
|
||
}
|
||
|
||
if (!ValidateGLSLString(name, info)) {
|
||
return false;
|
||
}
|
||
|
||
nsString prefix1 = NS_LITERAL_STRING("webgl_");
|
||
nsString prefix2 = NS_LITERAL_STRING("_webgl_");
|
||
|
||
if (Substring(name, 0, prefix1.Length()).Equals(prefix1) ||
|
||
Substring(name, 0, prefix2.Length()).Equals(prefix2))
|
||
{
|
||
ErrorInvalidOperation("%s: string contains a reserved GLSL prefix", info);
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool WebGLContext::ValidateGLSLString(const nsAString& string, const char *info)
|
||
{
|
||
for (uint32_t i = 0; i < string.Length(); ++i) {
|
||
if (!ValidateGLSLCharacter(string.CharAt(i))) {
|
||
ErrorInvalidValue("%s: string contains the illegal character '%d'", info, string.CharAt(i));
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Return true if format is a valid texture image format for source,
|
||
* taking into account enabled WebGL extensions.
|
||
*/
|
||
bool
|
||
WebGLContext::ValidateTexImageFormat(GLenum format, WebGLTexImageFunc func)
|
||
{
|
||
/* Core WebGL texture formats */
|
||
if (format == LOCAL_GL_ALPHA ||
|
||
format == LOCAL_GL_RGB ||
|
||
format == LOCAL_GL_RGBA ||
|
||
format == LOCAL_GL_LUMINANCE ||
|
||
format == LOCAL_GL_LUMINANCE_ALPHA)
|
||
{
|
||
return true;
|
||
}
|
||
|
||
/* Only core formats are valid for CopyTex(Sub)?Image */
|
||
// TODO: Revisit this once color_buffer_(half_)?float lands
|
||
if (IsCopyFunc(func)) {
|
||
ErrorInvalidEnumWithName(this, "invalid format", format, func);
|
||
return false;
|
||
}
|
||
|
||
/* WEBGL_depth_texture added formats */
|
||
if (format == LOCAL_GL_DEPTH_COMPONENT ||
|
||
format == LOCAL_GL_DEPTH_STENCIL)
|
||
{
|
||
bool validFormat = IsExtensionEnabled(WebGLExtensionID::WEBGL_depth_texture);
|
||
if (!validFormat)
|
||
ErrorInvalidEnum("%s: invalid format %s: need WEBGL_depth_texture enabled",
|
||
InfoFrom(func), WebGLContext::EnumName(format));
|
||
return validFormat;
|
||
}
|
||
|
||
/* EXT_sRGB added formats */
|
||
if (format == LOCAL_GL_SRGB ||
|
||
format == LOCAL_GL_SRGB_ALPHA)
|
||
{
|
||
bool validFormat = IsExtensionEnabled(WebGLExtensionID::EXT_sRGB);
|
||
if (!validFormat)
|
||
ErrorInvalidEnum("%s: invalid format %s: need EXT_sRGB enabled",
|
||
InfoFrom(func), WebGLContext::EnumName(format));
|
||
return validFormat;
|
||
}
|
||
|
||
/* WEBGL_compressed_texture_atc added formats */
|
||
if (format == LOCAL_GL_ATC_RGB ||
|
||
format == LOCAL_GL_ATC_RGBA_EXPLICIT_ALPHA ||
|
||
format == LOCAL_GL_ATC_RGBA_INTERPOLATED_ALPHA)
|
||
{
|
||
bool validFormat = IsExtensionEnabled(WebGLExtensionID::WEBGL_compressed_texture_atc);
|
||
if (!validFormat)
|
||
ErrorInvalidEnum("%s: invalid format %s: need WEBGL_compressed_texture_atc enabled",
|
||
InfoFrom(func), WebGLContext::EnumName(format));
|
||
return validFormat;
|
||
}
|
||
|
||
// WEBGL_compressed_texture_etc1
|
||
if (format == LOCAL_GL_ETC1_RGB8_OES) {
|
||
bool validFormat = IsExtensionEnabled(WebGLExtensionID::WEBGL_compressed_texture_etc1);
|
||
if (!validFormat)
|
||
ErrorInvalidEnum("%s: invalid format %s: need WEBGL_compressed_texture_etc1 enabled",
|
||
InfoFrom(func), WebGLContext::EnumName(format));
|
||
return validFormat;
|
||
}
|
||
|
||
|
||
if (format == LOCAL_GL_COMPRESSED_RGB_PVRTC_2BPPV1 ||
|
||
format == LOCAL_GL_COMPRESSED_RGB_PVRTC_4BPPV1 ||
|
||
format == LOCAL_GL_COMPRESSED_RGBA_PVRTC_2BPPV1 ||
|
||
format == LOCAL_GL_COMPRESSED_RGBA_PVRTC_4BPPV1)
|
||
{
|
||
bool validFormat = IsExtensionEnabled(WebGLExtensionID::WEBGL_compressed_texture_pvrtc);
|
||
if (!validFormat)
|
||
ErrorInvalidEnum("%s: invalid format %s: need WEBGL_compressed_texture_pvrtc enabled",
|
||
InfoFrom(func), WebGLContext::EnumName(format));
|
||
return validFormat;
|
||
}
|
||
|
||
|
||
if (format == LOCAL_GL_COMPRESSED_RGB_S3TC_DXT1_EXT ||
|
||
format == LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT1_EXT ||
|
||
format == LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT ||
|
||
format == LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
|
||
{
|
||
bool validFormat = IsExtensionEnabled(WebGLExtensionID::WEBGL_compressed_texture_s3tc);
|
||
if (!validFormat)
|
||
ErrorInvalidEnum("%s: invalid format %s: need WEBGL_compressed_texture_s3tc enabled",
|
||
InfoFrom(func), WebGLContext::EnumName(format));
|
||
return validFormat;
|
||
}
|
||
|
||
ErrorInvalidEnumWithName(this, "invalid format", format, func);
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Check if the given texture target is valid for TexImage.
|
||
*/
|
||
bool
|
||
WebGLContext::ValidateTexImageTarget(GLuint dims, GLenum target, WebGLTexImageFunc func)
|
||
{
|
||
switch (dims) {
|
||
case 2:
|
||
if (target == LOCAL_GL_TEXTURE_2D ||
|
||
IsTexImageCubemapTarget(target))
|
||
{
|
||
return true;
|
||
}
|
||
|
||
ErrorInvalidEnumWithName(this, "invalid target", target, func);
|
||
return false;
|
||
|
||
default:
|
||
MOZ_ASSERT(false, "ValidateTexImageTarget: Invalid dims");
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Return true if type is a valid texture image type for source,
|
||
* taking into account enabled WebGL extensions.
|
||
*/
|
||
bool
|
||
WebGLContext::ValidateTexImageType(GLenum type, WebGLTexImageFunc func)
|
||
{
|
||
/* Core WebGL texture types */
|
||
if (type == LOCAL_GL_UNSIGNED_BYTE ||
|
||
type == LOCAL_GL_UNSIGNED_SHORT_5_6_5 ||
|
||
type == LOCAL_GL_UNSIGNED_SHORT_4_4_4_4 ||
|
||
type == LOCAL_GL_UNSIGNED_SHORT_5_5_5_1)
|
||
{
|
||
return true;
|
||
}
|
||
|
||
/* OES_texture_float added types */
|
||
if (type == LOCAL_GL_FLOAT) {
|
||
bool validType = IsExtensionEnabled(WebGLExtensionID::OES_texture_float);
|
||
if (!validType)
|
||
ErrorInvalidEnum("%s: invalid type %s: need OES_texture_float enabled",
|
||
InfoFrom(func), WebGLContext::EnumName(type));
|
||
return validType;
|
||
}
|
||
|
||
/* OES_texture_half_float add types */
|
||
if (type == LOCAL_GL_HALF_FLOAT_OES) {
|
||
bool validType = IsExtensionEnabled(WebGLExtensionID::OES_texture_half_float);
|
||
if (!validType)
|
||
ErrorInvalidEnum("%s: invalid type %s: need OES_texture_half_float enabled",
|
||
InfoFrom(func), WebGLContext::EnumName(type));
|
||
return validType;
|
||
}
|
||
|
||
/* WEBGL_depth_texture added types */
|
||
if (type == LOCAL_GL_UNSIGNED_SHORT ||
|
||
type == LOCAL_GL_UNSIGNED_INT ||
|
||
type == LOCAL_GL_UNSIGNED_INT_24_8)
|
||
{
|
||
bool validType = IsExtensionEnabled(WebGLExtensionID::WEBGL_depth_texture);
|
||
if (!validType)
|
||
ErrorInvalidEnum("%s: invalid type %s: need WEBGL_depth_texture enabled",
|
||
InfoFrom(func), WebGLContext::EnumName(type));
|
||
return validType;
|
||
}
|
||
|
||
ErrorInvalidEnumWithName(this, "invalid type", type, func);
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Validate texture image sizing extra constraints for
|
||
* CompressedTex(Sub)?Image.
|
||
*/
|
||
// TODO: WebGL 2
|
||
bool
|
||
WebGLContext::ValidateCompTexImageSize(GLenum target, GLint level, GLenum format,
|
||
GLint xoffset, GLint yoffset,
|
||
GLsizei width, GLsizei height,
|
||
GLsizei levelWidth, GLsizei levelHeight,
|
||
WebGLTexImageFunc func)
|
||
{
|
||
// Negative parameters must already have been handled above
|
||
MOZ_ASSERT(xoffset >= 0 && yoffset >= 0 &&
|
||
width >= 0 && height >= 0);
|
||
|
||
if (xoffset + width > (GLint) levelWidth) {
|
||
ErrorInvalidValue("%s: xoffset + width must be <= levelWidth", InfoFrom(func));
|
||
return false;
|
||
}
|
||
|
||
if (yoffset + height > (GLint) levelHeight) {
|
||
ErrorInvalidValue("%s: yoffset + height must be <= levelHeight", InfoFrom(func));
|
||
return false;
|
||
}
|
||
|
||
GLint blockWidth = 1;
|
||
GLint blockHeight = 1;
|
||
BlockSizeFor(format, &blockWidth, &blockHeight);
|
||
|
||
/* If blockWidth || blockHeight != 1, then the compressed format
|
||
* had block-based constraints to be checked. (For example, PVRTC is compressed but
|
||
* isn't a block-based format)
|
||
*/
|
||
if (blockWidth != 1 || blockHeight != 1) {
|
||
/* offsets must be multiple of block size */
|
||
if (xoffset % blockWidth != 0) {
|
||
ErrorInvalidOperation("%s: xoffset must be multiple of %d",
|
||
InfoFrom(func), blockWidth);
|
||
return false;
|
||
}
|
||
|
||
if (yoffset % blockHeight != 0) {
|
||
ErrorInvalidOperation("%s: yoffset must be multiple of %d",
|
||
InfoFrom(func), blockHeight);
|
||
return false;
|
||
}
|
||
|
||
/* The size must be a multiple of blockWidth and blockHeight,
|
||
* or must be using offset+size that exactly hits the edge.
|
||
* Important for small mipmap levels.
|
||
*/
|
||
/* https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/
|
||
* "When level equals zero width and height must be a multiple of 4. When
|
||
* level is greater than 0 width and height must be 0, 1, 2 or a multiple of 4.
|
||
* If they are not an INVALID_OPERATION error is generated."
|
||
*/
|
||
if (level == 0) {
|
||
if (width % blockWidth != 0) {
|
||
ErrorInvalidOperation("%s: width of level 0 must be multple of %d",
|
||
InfoFrom(func), blockWidth);
|
||
return false;
|
||
}
|
||
|
||
if (height % blockHeight != 0) {
|
||
ErrorInvalidOperation("%s: height of level 0 must be multipel of %d",
|
||
InfoFrom(func), blockHeight);
|
||
return false;
|
||
}
|
||
}
|
||
else if (level > 0) {
|
||
if (width % blockWidth != 0 && width > 2) {
|
||
ErrorInvalidOperation("%s: width of level %d must be multiple"
|
||
" of %d or 0, 1, 2",
|
||
InfoFrom(func), level, blockWidth);
|
||
return false;
|
||
}
|
||
|
||
if (height % blockHeight != 0 && height > 2) {
|
||
ErrorInvalidOperation("%s: height of level %d must be multiple"
|
||
" of %d or 0, 1, 2",
|
||
InfoFrom(func), level, blockHeight);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
if (IsSubFunc(func)) {
|
||
if ((xoffset % blockWidth) != 0) {
|
||
ErrorInvalidOperation("%s: xoffset must be multiple of %d",
|
||
InfoFrom(func), blockWidth);
|
||
return false;
|
||
}
|
||
|
||
if (yoffset % blockHeight != 0) {
|
||
ErrorInvalidOperation("%s: yoffset must be multiple of %d",
|
||
InfoFrom(func), blockHeight);
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
|
||
switch (format) {
|
||
case LOCAL_GL_COMPRESSED_RGB_PVRTC_4BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGB_PVRTC_2BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGBA_PVRTC_4BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGBA_PVRTC_2BPPV1:
|
||
if (!is_pot_assuming_nonnegative(width) ||
|
||
!is_pot_assuming_nonnegative(height))
|
||
{
|
||
ErrorInvalidValue("%s: width and height must be powers of two",
|
||
InfoFrom(func));
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Return true if the enough data is present to satisfy compressed
|
||
* texture format constraints.
|
||
*/
|
||
bool
|
||
WebGLContext::ValidateCompTexImageDataSize(GLint level, GLenum format,
|
||
GLsizei width, GLsizei height,
|
||
uint32_t byteLength, WebGLTexImageFunc func)
|
||
{
|
||
// negative width and height must already have been handled above
|
||
MOZ_ASSERT(width >= 0 && height >= 0);
|
||
|
||
CheckedUint32 required_byteLength = 0;
|
||
|
||
switch (format) {
|
||
case LOCAL_GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||
case LOCAL_GL_ATC_RGB:
|
||
case LOCAL_GL_ETC1_RGB8_OES:
|
||
{
|
||
required_byteLength = ((CheckedUint32(width) + 3) / 4) * ((CheckedUint32(height) + 3) / 4) * 8;
|
||
break;
|
||
}
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||
case LOCAL_GL_ATC_RGBA_EXPLICIT_ALPHA:
|
||
case LOCAL_GL_ATC_RGBA_INTERPOLATED_ALPHA:
|
||
{
|
||
required_byteLength = ((CheckedUint32(width) + 3) / 4) * ((CheckedUint32(height) + 3) / 4) * 16;
|
||
break;
|
||
}
|
||
case LOCAL_GL_COMPRESSED_RGB_PVRTC_4BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGBA_PVRTC_4BPPV1:
|
||
{
|
||
required_byteLength = CheckedUint32(std::max(width, 8)) * CheckedUint32(std::max(height, 8)) / 2;
|
||
break;
|
||
}
|
||
case LOCAL_GL_COMPRESSED_RGB_PVRTC_2BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGBA_PVRTC_2BPPV1:
|
||
{
|
||
required_byteLength = CheckedUint32(std::max(width, 16)) * CheckedUint32(std::max(height, 8)) / 4;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!required_byteLength.isValid() || required_byteLength.value() != byteLength) {
|
||
ErrorInvalidValue("%s: data size does not match dimensions", InfoFrom(func));
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Validate the width, height, and depth of a texture image, \return
|
||
* true is valid, false otherwise.
|
||
* Used by all the (Compressed|Copy)?Tex(Sub)?Image functions.
|
||
* Target and level must have been validated before calling.
|
||
*/
|
||
bool
|
||
WebGLContext::ValidateTexImageSize(GLenum target, GLint level,
|
||
GLint width, GLint height, GLint depth,
|
||
WebGLTexImageFunc func)
|
||
{
|
||
MOZ_ASSERT(level >= 0, "level should already be validated");
|
||
|
||
/* Bug 966630: maxTextureSize >> level runs into "undefined"
|
||
* behaviour depending on ISA. For example, on Intel shifts
|
||
* amounts are mod 64 (in 64-bit mode on 64-bit dest) and mod 32
|
||
* otherwise. This means 16384 >> 0x10000001 == 8192 which isn't
|
||
* what would be expected. Make the required behaviour explicit by
|
||
* clamping to a shift of 31 bits if level is greater than that
|
||
* ammount. This will give 0 that if (!maxAllowedSize) is
|
||
* expecting.
|
||
*/
|
||
|
||
if (level > 31)
|
||
level = 31;
|
||
|
||
const GLuint maxTexImageSize = MaxTextureSizeForTarget(target) >> level;
|
||
const bool isCubemapTarget = IsTexImageCubemapTarget(target);
|
||
const bool isSub = IsSubFunc(func);
|
||
|
||
if (!isSub && isCubemapTarget && (width != height)) {
|
||
/* GL ES Version 2.0.25 - 3.7.1 Texture Image Specification
|
||
* "When the target parameter to TexImage2D is one of the
|
||
* six cube map two-dimensional image targets, the error
|
||
* INVALID_VALUE is generated if the width and height
|
||
* parameters are not equal."
|
||
*/
|
||
ErrorInvalidValue("%s: for cube map, width must equal height", InfoFrom(func));
|
||
return false;
|
||
}
|
||
|
||
if (target == LOCAL_GL_TEXTURE_2D || isCubemapTarget)
|
||
{
|
||
/* GL ES Version 2.0.25 - 3.7.1 Texture Image Specification
|
||
* "If wt and ht are the specified image width and height,
|
||
* and if either wt or ht are less than zero, then the error
|
||
* INVALID_VALUE is generated."
|
||
*/
|
||
if (width < 0) {
|
||
ErrorInvalidValue("%s: width must be >= 0", InfoFrom(func));
|
||
return false;
|
||
}
|
||
|
||
if (height < 0) {
|
||
ErrorInvalidValue("%s: height must be >= 0", InfoFrom(func));
|
||
return false;
|
||
}
|
||
|
||
/* GL ES Version 2.0.25 - 3.7.1 Texture Image Specification
|
||
* "The maximum allowable width and height of a
|
||
* two-dimensional texture image must be at least 2**(k−lod)
|
||
* for image arrays of level zero through k, where k is the
|
||
* log base 2 of MAX_TEXTURE_SIZE. and lod is the
|
||
* level-of-detail of the image array. It may be zero for
|
||
* image arrays of any level-of-detail greater than k. The
|
||
* error INVALID_VALUE is generated if the specified image
|
||
* is too large to be stored under any conditions.
|
||
*/
|
||
if (width > (int) maxTexImageSize) {
|
||
ErrorInvalidValue("%s: the maximum width for level %d is %u",
|
||
InfoFrom(func), level, maxTexImageSize);
|
||
return false;
|
||
}
|
||
|
||
if (height > (int) maxTexImageSize) {
|
||
ErrorInvalidValue("%s: tex maximum height for level %d is %u",
|
||
InfoFrom(func), level, maxTexImageSize);
|
||
return false;
|
||
}
|
||
|
||
/* GL ES Version 2.0.25 - 3.7.1 Texture Image Specification
|
||
* "If level is greater than zero, and either width or
|
||
* height is not a power-of-two, the error INVALID_VALUE is
|
||
* generated."
|
||
*/
|
||
if (level > 0) {
|
||
if (!is_pot_assuming_nonnegative(width)) {
|
||
ErrorInvalidValue("%s: level >= 0, width of %d must be a power of two.",
|
||
InfoFrom(func), width);
|
||
return false;
|
||
}
|
||
|
||
if (!is_pot_assuming_nonnegative(height)) {
|
||
ErrorInvalidValue("%s: level >= 0, height of %d must be a power of two.",
|
||
InfoFrom(func), height);
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
|
||
// TODO: WebGL 2
|
||
if (target == LOCAL_GL_TEXTURE_3D) {
|
||
if (depth < 0) {
|
||
ErrorInvalidValue("%s: depth must be >= 0", InfoFrom(func));
|
||
return false;
|
||
}
|
||
|
||
if (!is_pot_assuming_nonnegative(depth)) {
|
||
ErrorInvalidValue("%s: level >= 0, depth of %d must be a power of two.",
|
||
InfoFrom(func), depth);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Validate texture image sizing for Tex(Sub)?Image variants.
|
||
*/
|
||
// TODO: WebGL 2. Update this to handle 3D textures.
|
||
bool
|
||
WebGLContext::ValidateTexSubImageSize(GLint xoffset, GLint yoffset, GLint /*zoffset*/,
|
||
GLsizei width, GLsizei height, GLsizei /*depth*/,
|
||
GLsizei baseWidth, GLsizei baseHeight, GLsizei /*baseDepth*/,
|
||
WebGLTexImageFunc func)
|
||
{
|
||
/* GL ES Version 2.0.25 - 3.7.1 Texture Image Specification
|
||
* "Taking wt and ht to be the specified width and height of the
|
||
* texture array, and taking x, y, w, and h to be the xoffset,
|
||
* yoffset, width, and height argument values, any of the
|
||
* following relationships generates the error INVALID_VALUE:
|
||
* x < 0
|
||
* x + w > wt
|
||
* y < 0
|
||
* y + h > ht"
|
||
*/
|
||
|
||
if (xoffset < 0) {
|
||
ErrorInvalidValue("%s: xoffset must be >= 0", InfoFrom(func));
|
||
return false;
|
||
}
|
||
|
||
if (yoffset < 0) {
|
||
ErrorInvalidValue("%s: yoffset must be >= 0", InfoFrom(func));
|
||
return false;
|
||
}
|
||
|
||
if (!CanvasUtils::CheckSaneSubrectSize(xoffset, yoffset, width, height, baseWidth, baseHeight)) {
|
||
ErrorInvalidValue("%s: subtexture rectangle out-of-bounds", InfoFrom(func));
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Return the bits per texel for format & type combination.
|
||
* Assumes that format & type are a valid combination as checked with
|
||
* ValidateTexImageFormatAndType().
|
||
*/
|
||
uint32_t
|
||
WebGLContext::GetBitsPerTexel(GLenum format, GLenum type)
|
||
{
|
||
// If there is no defined format or type, we're not taking up any memory
|
||
if (!format || !type) {
|
||
return 0;
|
||
}
|
||
|
||
/* Known fixed-sized types */
|
||
if (type == LOCAL_GL_UNSIGNED_SHORT_4_4_4_4 ||
|
||
type == LOCAL_GL_UNSIGNED_SHORT_5_5_5_1 ||
|
||
type == LOCAL_GL_UNSIGNED_SHORT_5_6_5)
|
||
{
|
||
return 16;
|
||
}
|
||
|
||
if (type == LOCAL_GL_UNSIGNED_INT_24_8)
|
||
return 32;
|
||
|
||
int bitsPerComponent = 0;
|
||
switch (type) {
|
||
case LOCAL_GL_UNSIGNED_BYTE:
|
||
bitsPerComponent = 8;
|
||
break;
|
||
|
||
case LOCAL_GL_HALF_FLOAT:
|
||
case LOCAL_GL_HALF_FLOAT_OES:
|
||
case LOCAL_GL_UNSIGNED_SHORT:
|
||
bitsPerComponent = 16;
|
||
break;
|
||
|
||
case LOCAL_GL_FLOAT:
|
||
case LOCAL_GL_UNSIGNED_INT:
|
||
bitsPerComponent = 32;
|
||
break;
|
||
|
||
default:
|
||
MOZ_ASSERT(false, "Unhandled type.");
|
||
break;
|
||
}
|
||
|
||
switch (format) {
|
||
// Uncompressed formats
|
||
case LOCAL_GL_ALPHA:
|
||
case LOCAL_GL_LUMINANCE:
|
||
case LOCAL_GL_DEPTH_COMPONENT:
|
||
case LOCAL_GL_DEPTH_STENCIL:
|
||
return 1 * bitsPerComponent;
|
||
|
||
case LOCAL_GL_LUMINANCE_ALPHA:
|
||
return 2 * bitsPerComponent;
|
||
|
||
case LOCAL_GL_RGB:
|
||
case LOCAL_GL_RGB32F:
|
||
case LOCAL_GL_SRGB_EXT:
|
||
return 3 * bitsPerComponent;
|
||
|
||
case LOCAL_GL_RGBA:
|
||
case LOCAL_GL_RGBA32F:
|
||
case LOCAL_GL_SRGB_ALPHA_EXT:
|
||
return 4 * bitsPerComponent;
|
||
|
||
// Compressed formats
|
||
case LOCAL_GL_COMPRESSED_RGB_PVRTC_2BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGBA_PVRTC_2BPPV1:
|
||
return 2;
|
||
|
||
case LOCAL_GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||
case LOCAL_GL_ATC_RGB:
|
||
case LOCAL_GL_COMPRESSED_RGB_PVRTC_4BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGBA_PVRTC_4BPPV1:
|
||
case LOCAL_GL_ETC1_RGB8_OES:
|
||
return 4;
|
||
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||
case LOCAL_GL_ATC_RGBA_EXPLICIT_ALPHA:
|
||
case LOCAL_GL_ATC_RGBA_INTERPOLATED_ALPHA:
|
||
return 8;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
MOZ_ASSERT(false, "Unhandled format+type combo.");
|
||
return 0;
|
||
}
|
||
|
||
/**
|
||
* Perform validation of format/type combinations for TexImage variants.
|
||
* Returns true if the format/type is a valid combination, false otherwise.
|
||
*/
|
||
bool
|
||
WebGLContext::ValidateTexImageFormatAndType(GLenum format, GLenum type, WebGLTexImageFunc func)
|
||
{
|
||
if (!ValidateTexImageFormat(format, func) ||
|
||
!ValidateTexImageType(type, func))
|
||
{
|
||
return false;
|
||
}
|
||
|
||
bool validCombo = false;
|
||
|
||
switch (format) {
|
||
case LOCAL_GL_ALPHA:
|
||
case LOCAL_GL_LUMINANCE:
|
||
case LOCAL_GL_LUMINANCE_ALPHA:
|
||
validCombo = (type == LOCAL_GL_UNSIGNED_BYTE ||
|
||
type == LOCAL_GL_HALF_FLOAT ||
|
||
type == LOCAL_GL_HALF_FLOAT_OES ||
|
||
type == LOCAL_GL_FLOAT);
|
||
break;
|
||
|
||
case LOCAL_GL_RGB:
|
||
case LOCAL_GL_SRGB:
|
||
validCombo = (type == LOCAL_GL_UNSIGNED_BYTE ||
|
||
type == LOCAL_GL_UNSIGNED_SHORT_5_6_5 ||
|
||
type == LOCAL_GL_HALF_FLOAT ||
|
||
type == LOCAL_GL_HALF_FLOAT_OES ||
|
||
type == LOCAL_GL_FLOAT);
|
||
break;
|
||
|
||
case LOCAL_GL_RGBA:
|
||
case LOCAL_GL_SRGB_ALPHA:
|
||
validCombo = (type == LOCAL_GL_UNSIGNED_BYTE ||
|
||
type == LOCAL_GL_UNSIGNED_SHORT_4_4_4_4 ||
|
||
type == LOCAL_GL_UNSIGNED_SHORT_5_5_5_1 ||
|
||
type == LOCAL_GL_HALF_FLOAT ||
|
||
type == LOCAL_GL_HALF_FLOAT_OES ||
|
||
type == LOCAL_GL_FLOAT);
|
||
break;
|
||
|
||
case LOCAL_GL_DEPTH_COMPONENT:
|
||
validCombo = (type == LOCAL_GL_UNSIGNED_SHORT ||
|
||
type == LOCAL_GL_UNSIGNED_INT);
|
||
break;
|
||
|
||
case LOCAL_GL_DEPTH_STENCIL:
|
||
validCombo = (type == LOCAL_GL_UNSIGNED_INT_24_8);
|
||
break;
|
||
|
||
case LOCAL_GL_ATC_RGB:
|
||
case LOCAL_GL_ATC_RGBA_EXPLICIT_ALPHA:
|
||
case LOCAL_GL_ATC_RGBA_INTERPOLATED_ALPHA:
|
||
case LOCAL_GL_ETC1_RGB8_OES:
|
||
case LOCAL_GL_COMPRESSED_RGB_PVRTC_2BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGB_PVRTC_4BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGBA_PVRTC_2BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGBA_PVRTC_4BPPV1:
|
||
case LOCAL_GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||
case LOCAL_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||
validCombo = (type == LOCAL_GL_UNSIGNED_BYTE);
|
||
break;
|
||
|
||
default:
|
||
// Only valid formats should be passed to the switch stmt.
|
||
MOZ_ASSERT(false, "Unexpected format and type combo. How'd this happen?");
|
||
validCombo = false;
|
||
// Fall through to return an InvalidOperations. This will alert us to the
|
||
// unexpected case that needs fixing in builds without asserts.
|
||
}
|
||
|
||
if (!validCombo)
|
||
ErrorInvalidOperation("%s: invalid combination of format %s and type %s",
|
||
InfoFrom(func), WebGLContext::EnumName(format), WebGLContext::EnumName(type));
|
||
|
||
return validCombo;
|
||
}
|
||
|
||
/**
|
||
* Return true if format, type and jsArrayType are a valid combination.
|
||
* Also returns the size for texel of format and type (in bytes) via
|
||
* \a texelSize.
|
||
*
|
||
* It is assumed that type has previously been validated.
|
||
*/
|
||
bool
|
||
WebGLContext::ValidateTexInputData(GLenum type, int jsArrayType, WebGLTexImageFunc func)
|
||
{
|
||
bool validInput = false;
|
||
const char invalidTypedArray[] = "%s: invalid typed array type for given texture data type";
|
||
|
||
// First, we check for packed types
|
||
switch (type) {
|
||
case LOCAL_GL_UNSIGNED_BYTE:
|
||
validInput = (jsArrayType == -1 || jsArrayType == js::Scalar::Uint8);
|
||
break;
|
||
|
||
case LOCAL_GL_HALF_FLOAT:
|
||
case LOCAL_GL_HALF_FLOAT_OES:
|
||
case LOCAL_GL_UNSIGNED_SHORT:
|
||
case LOCAL_GL_UNSIGNED_SHORT_4_4_4_4:
|
||
case LOCAL_GL_UNSIGNED_SHORT_5_5_5_1:
|
||
case LOCAL_GL_UNSIGNED_SHORT_5_6_5:
|
||
validInput = (jsArrayType == -1 || jsArrayType == js::Scalar::Uint16);
|
||
break;
|
||
|
||
case LOCAL_GL_UNSIGNED_INT:
|
||
case LOCAL_GL_UNSIGNED_INT_24_8:
|
||
validInput = (jsArrayType == -1 || jsArrayType == js::Scalar::Uint32);
|
||
break;
|
||
|
||
case LOCAL_GL_FLOAT:
|
||
validInput = (jsArrayType == -1 || jsArrayType == js::Scalar::Float32);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
if (!validInput)
|
||
ErrorInvalidOperation(invalidTypedArray, InfoFrom(func));
|
||
|
||
return validInput;
|
||
}
|
||
|
||
/**
|
||
* Test the gl(Copy|Compressed)?Tex[Sub]?Image[23]() parameters for errors.
|
||
* Verifies each of the parameters against the WebGL standard and enabled extensions.
|
||
*/
|
||
// TODO: Texture dims is here for future expansion in WebGL 2.0
|
||
bool
|
||
WebGLContext::ValidateTexImage(GLuint dims, GLenum target,
|
||
GLint level, GLint internalFormat,
|
||
GLint xoffset, GLint yoffset, GLint zoffset,
|
||
GLint width, GLint height, GLint depth,
|
||
GLint border, GLenum format, GLenum type,
|
||
WebGLTexImageFunc func)
|
||
{
|
||
const char* info = InfoFrom(func);
|
||
|
||
/* Check target */
|
||
if (!ValidateTexImageTarget(dims, target, func))
|
||
return false;
|
||
|
||
/* Check level */
|
||
if (level < 0) {
|
||
ErrorInvalidValue("%s: level must be >= 0", info);
|
||
return false;
|
||
}
|
||
|
||
/* Check border */
|
||
if (border != 0) {
|
||
ErrorInvalidValue("%s: border must be 0", info);
|
||
return false;
|
||
}
|
||
|
||
/* Check incoming image format and type */
|
||
if (!ValidateTexImageFormatAndType(format, type, func))
|
||
return false;
|
||
|
||
/* WebGL and OpenGL ES 2.0 impose additional restrictions on the
|
||
* combinations of format, internalFormat, and type that can be
|
||
* used. Formats and types that require additional extensions
|
||
* (e.g., GL_FLOAT requires GL_OES_texture_float) are filtered
|
||
* elsewhere.
|
||
*/
|
||
if ((GLint) format != internalFormat) {
|
||
ErrorInvalidOperation("%s: format does not match internalformat", info);
|
||
return false;
|
||
}
|
||
|
||
/* check internalFormat */
|
||
// TODO: Not sure if this is a bit of over kill.
|
||
if (BaseTexFormat(internalFormat) == LOCAL_GL_NONE) {
|
||
MOZ_ASSERT(false);
|
||
ErrorInvalidValue("%s:", info);
|
||
return false;
|
||
}
|
||
|
||
/* Check texture image size */
|
||
if (!ValidateTexImageSize(target, level, width, height, 0, func))
|
||
return false;
|
||
|
||
/* 5.14.8 Texture objects - WebGL Spec.
|
||
* "If an attempt is made to call these functions with no
|
||
* WebGLTexture bound (see above), an INVALID_OPERATION error
|
||
* is generated."
|
||
*/
|
||
WebGLTexture* tex = activeBoundTextureForTarget(target);
|
||
if (!tex) {
|
||
ErrorInvalidOperation("%s: no texture is bound to target %s",
|
||
info, WebGLContext::EnumName(target));
|
||
return false;
|
||
}
|
||
|
||
if (IsSubFunc(func)) {
|
||
if (!tex->HasImageInfoAt(target, level)) {
|
||
ErrorInvalidOperation("%s: no texture image previously defined for target %s at level %d",
|
||
info, WebGLContext::EnumName(target), level);
|
||
return false;
|
||
}
|
||
|
||
const WebGLTexture::ImageInfo& imageInfo = tex->ImageInfoAt(target, level);
|
||
if (!ValidateTexSubImageSize(xoffset, yoffset, zoffset,
|
||
width, height, depth,
|
||
imageInfo.Width(), imageInfo.Height(), 0,
|
||
func))
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/* Require the format and type to match that of the existing
|
||
* texture as created
|
||
*/
|
||
if (imageInfo.WebGLFormat() != format ||
|
||
imageInfo.WebGLType() != type)
|
||
{
|
||
ErrorInvalidOperation("%s: format or type doesn't match the existing texture",
|
||
info);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/* Additional checks for depth textures */
|
||
if (target != LOCAL_GL_TEXTURE_2D &&
|
||
(format == LOCAL_GL_DEPTH_COMPONENT ||
|
||
format == LOCAL_GL_DEPTH_STENCIL))
|
||
{
|
||
ErrorInvalidOperation("%s: with format of %s target must be TEXTURE_2D",
|
||
info, WebGLContext::EnumName(format));
|
||
return false;
|
||
}
|
||
|
||
/* Additional checks for compressed textures */
|
||
if (!IsAllowedFromSource(format, func)) {
|
||
ErrorInvalidOperation("%s: Invalid format %s for this operation",
|
||
info, WebGLContext::EnumName(format));
|
||
return false;
|
||
}
|
||
|
||
/* Parameters are OK */
|
||
return true;
|
||
}
|
||
|
||
bool
|
||
WebGLContext::ValidateUniformLocation(const char* info, WebGLUniformLocation *location_object)
|
||
{
|
||
if (!ValidateObjectAllowNull(info, location_object))
|
||
return false;
|
||
if (!location_object)
|
||
return false;
|
||
/* the need to check specifically for !mCurrentProgram here is explained in bug 657556 */
|
||
if (!mCurrentProgram) {
|
||
ErrorInvalidOperation("%s: no program is currently bound", info);
|
||
return false;
|
||
}
|
||
if (mCurrentProgram != location_object->Program()) {
|
||
ErrorInvalidOperation("%s: this uniform location doesn't correspond to the current program", info);
|
||
return false;
|
||
}
|
||
if (mCurrentProgram->Generation() != location_object->ProgramGeneration()) {
|
||
ErrorInvalidOperation("%s: This uniform location is obsolete since the program has been relinked", info);
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool
|
||
WebGLContext::ValidateSamplerUniformSetter(const char* info, WebGLUniformLocation *location, GLint value)
|
||
{
|
||
if (location->Info().type != SH_SAMPLER_2D &&
|
||
location->Info().type != SH_SAMPLER_CUBE)
|
||
{
|
||
return true;
|
||
}
|
||
|
||
if (value >= 0 && value < mGLMaxTextureUnits)
|
||
return true;
|
||
|
||
ErrorInvalidValue("%s: this uniform location is a sampler, but %d is not a valid texture unit",
|
||
info, value);
|
||
return false;
|
||
}
|
||
|
||
bool
|
||
WebGLContext::ValidateAttribArraySetter(const char* name, uint32_t cnt, uint32_t arrayLength)
|
||
{
|
||
if (IsContextLost()) {
|
||
return false;
|
||
}
|
||
if (arrayLength < cnt) {
|
||
ErrorInvalidOperation("%s: array must be >= %d elements", name, cnt);
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool
|
||
WebGLContext::ValidateUniformArraySetter(const char* name, uint32_t expectedElemSize, WebGLUniformLocation *location_object,
|
||
GLint& location, uint32_t& numElementsToUpload, uint32_t arrayLength)
|
||
{
|
||
if (IsContextLost())
|
||
return false;
|
||
if (!ValidateUniformLocation(name, location_object))
|
||
return false;
|
||
location = location_object->Location();
|
||
uint32_t uniformElemSize = location_object->ElementSize();
|
||
if (expectedElemSize != uniformElemSize) {
|
||
ErrorInvalidOperation("%s: this function expected a uniform of element size %d,"
|
||
" got a uniform of element size %d", name,
|
||
expectedElemSize,
|
||
uniformElemSize);
|
||
return false;
|
||
}
|
||
if (arrayLength == 0 ||
|
||
arrayLength % expectedElemSize)
|
||
{
|
||
ErrorInvalidValue("%s: expected an array of length a multiple"
|
||
" of %d, got an array of length %d", name,
|
||
expectedElemSize,
|
||
arrayLength);
|
||
return false;
|
||
}
|
||
const WebGLUniformInfo& info = location_object->Info();
|
||
if (!info.isArray &&
|
||
arrayLength != expectedElemSize) {
|
||
ErrorInvalidOperation("%s: expected an array of length exactly"
|
||
" %d (since this uniform is not an array"
|
||
" uniform), got an array of length %d", name,
|
||
expectedElemSize,
|
||
arrayLength);
|
||
return false;
|
||
}
|
||
numElementsToUpload =
|
||
std::min(info.arraySize, arrayLength / expectedElemSize);
|
||
return true;
|
||
}
|
||
|
||
bool
|
||
WebGLContext::ValidateUniformMatrixArraySetter(const char* name, int dim, WebGLUniformLocation *location_object,
|
||
GLint& location, uint32_t& numElementsToUpload, uint32_t arrayLength,
|
||
WebGLboolean aTranspose)
|
||
{
|
||
uint32_t expectedElemSize = (dim)*(dim);
|
||
if (IsContextLost())
|
||
return false;
|
||
if (!ValidateUniformLocation(name, location_object))
|
||
return false;
|
||
location = location_object->Location();
|
||
uint32_t uniformElemSize = location_object->ElementSize();
|
||
if (expectedElemSize != uniformElemSize) {
|
||
ErrorInvalidOperation("%s: this function expected a uniform of element size %d,"
|
||
" got a uniform of element size %d", name,
|
||
expectedElemSize,
|
||
uniformElemSize);
|
||
return false;
|
||
}
|
||
if (arrayLength == 0 ||
|
||
arrayLength % expectedElemSize)
|
||
{
|
||
ErrorInvalidValue("%s: expected an array of length a multiple"
|
||
" of %d, got an array of length %d", name,
|
||
expectedElemSize,
|
||
arrayLength);
|
||
return false;
|
||
}
|
||
const WebGLUniformInfo& info = location_object->Info();
|
||
if (!info.isArray &&
|
||
arrayLength != expectedElemSize) {
|
||
ErrorInvalidOperation("%s: expected an array of length exactly"
|
||
" %d (since this uniform is not an array"
|
||
" uniform), got an array of length %d", name,
|
||
expectedElemSize,
|
||
arrayLength);
|
||
return false;
|
||
}
|
||
if (aTranspose) {
|
||
ErrorInvalidValue("%s: transpose must be FALSE as per the "
|
||
"OpenGL ES 2.0 spec", name);
|
||
return false;
|
||
}
|
||
numElementsToUpload =
|
||
std::min(info.arraySize, arrayLength / (expectedElemSize));
|
||
return true;
|
||
}
|
||
|
||
bool
|
||
WebGLContext::ValidateUniformSetter(const char* name, WebGLUniformLocation *location_object, GLint& location)
|
||
{
|
||
if (IsContextLost())
|
||
return false;
|
||
if (!ValidateUniformLocation(name, location_object))
|
||
return false;
|
||
location = location_object->Location();
|
||
return true;
|
||
}
|
||
|
||
bool WebGLContext::ValidateAttribIndex(GLuint index, const char *info)
|
||
{
|
||
return mBoundVertexArray->EnsureAttrib(index, info);
|
||
}
|
||
|
||
bool WebGLContext::ValidateStencilParamsForDrawCall()
|
||
{
|
||
const char *msg = "%s set different front and back stencil %s. Drawing in this configuration is not allowed.";
|
||
if (mStencilRefFront != mStencilRefBack) {
|
||
ErrorInvalidOperation(msg, "stencilFuncSeparate", "reference values");
|
||
return false;
|
||
}
|
||
if (mStencilValueMaskFront != mStencilValueMaskBack) {
|
||
ErrorInvalidOperation(msg, "stencilFuncSeparate", "value masks");
|
||
return false;
|
||
}
|
||
if (mStencilWriteMaskFront != mStencilWriteMaskBack) {
|
||
ErrorInvalidOperation(msg, "stencilMaskSeparate", "write masks");
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
static inline int32_t floorPOT(int32_t x)
|
||
{
|
||
MOZ_ASSERT(x > 0);
|
||
int32_t pot = 1;
|
||
while (pot < 0x40000000) {
|
||
if (x < pot*2)
|
||
break;
|
||
pot *= 2;
|
||
}
|
||
return pot;
|
||
}
|
||
|
||
bool
|
||
WebGLContext::InitAndValidateGL()
|
||
{
|
||
if (!gl) return false;
|
||
|
||
GLenum error = gl->fGetError();
|
||
if (error != LOCAL_GL_NO_ERROR) {
|
||
GenerateWarning("GL error 0x%x occurred during OpenGL context initialization, before WebGL initialization!", error);
|
||
return false;
|
||
}
|
||
|
||
mMinCapability = Preferences::GetBool("webgl.min_capability_mode", false);
|
||
mDisableExtensions = Preferences::GetBool("webgl.disable-extensions", false);
|
||
mLoseContextOnMemoryPressure = Preferences::GetBool("webgl.lose-context-on-memory-preasure", false);
|
||
mCanLoseContextInForeground = Preferences::GetBool("webgl.can-lose-context-in-foreground", true);
|
||
mRestoreWhenVisible = Preferences::GetBool("webgl.restore-context-when-visible", true);
|
||
|
||
if (MinCapabilityMode()) {
|
||
mDisableFragHighP = true;
|
||
}
|
||
|
||
// These are the default values, see 6.2 State tables in the
|
||
// OpenGL ES 2.0.25 spec.
|
||
mColorWriteMask[0] = 1;
|
||
mColorWriteMask[1] = 1;
|
||
mColorWriteMask[2] = 1;
|
||
mColorWriteMask[3] = 1;
|
||
mDepthWriteMask = 1;
|
||
mColorClearValue[0] = 0.f;
|
||
mColorClearValue[1] = 0.f;
|
||
mColorClearValue[2] = 0.f;
|
||
mColorClearValue[3] = 0.f;
|
||
mDepthClearValue = 1.f;
|
||
mStencilClearValue = 0;
|
||
mStencilRefFront = 0;
|
||
mStencilRefBack = 0;
|
||
|
||
/*
|
||
// Technically, we should be setting mStencil[...] values to
|
||
// `allOnes`, but either ANGLE breaks or the SGX540s on Try break.
|
||
GLuint stencilBits = 0;
|
||
gl->GetUIntegerv(LOCAL_GL_STENCIL_BITS, &stencilBits);
|
||
GLuint allOnes = ~(UINT32_MAX << stencilBits);
|
||
mStencilValueMaskFront = allOnes;
|
||
mStencilValueMaskBack = allOnes;
|
||
mStencilWriteMaskFront = allOnes;
|
||
mStencilWriteMaskBack = allOnes;
|
||
*/
|
||
|
||
gl->GetUIntegerv(LOCAL_GL_STENCIL_VALUE_MASK, &mStencilValueMaskFront);
|
||
gl->GetUIntegerv(LOCAL_GL_STENCIL_BACK_VALUE_MASK, &mStencilValueMaskBack);
|
||
gl->GetUIntegerv(LOCAL_GL_STENCIL_WRITEMASK, &mStencilWriteMaskFront);
|
||
gl->GetUIntegerv(LOCAL_GL_STENCIL_BACK_WRITEMASK, &mStencilWriteMaskBack);
|
||
|
||
AssertUintParamCorrect(gl, LOCAL_GL_STENCIL_VALUE_MASK, mStencilValueMaskFront);
|
||
AssertUintParamCorrect(gl, LOCAL_GL_STENCIL_BACK_VALUE_MASK, mStencilValueMaskBack);
|
||
AssertUintParamCorrect(gl, LOCAL_GL_STENCIL_WRITEMASK, mStencilWriteMaskFront);
|
||
AssertUintParamCorrect(gl, LOCAL_GL_STENCIL_BACK_WRITEMASK, mStencilWriteMaskBack);
|
||
|
||
mDitherEnabled = true;
|
||
mRasterizerDiscardEnabled = false;
|
||
mScissorTestEnabled = false;
|
||
|
||
// Bindings, etc.
|
||
mActiveTexture = 0;
|
||
mEmitContextLostErrorOnce = true;
|
||
mWebGLError = LOCAL_GL_NO_ERROR;
|
||
mUnderlyingGLError = LOCAL_GL_NO_ERROR;
|
||
|
||
mBound2DTextures.Clear();
|
||
mBoundCubeMapTextures.Clear();
|
||
|
||
mBoundArrayBuffer = nullptr;
|
||
mBoundTransformFeedbackBuffer = nullptr;
|
||
mCurrentProgram = nullptr;
|
||
|
||
mBoundFramebuffer = nullptr;
|
||
mBoundRenderbuffer = nullptr;
|
||
|
||
MakeContextCurrent();
|
||
|
||
// on desktop OpenGL, we always keep vertex attrib 0 array enabled
|
||
if (!gl->IsGLES()) {
|
||
gl->fEnableVertexAttribArray(0);
|
||
}
|
||
|
||
if (MinCapabilityMode()) {
|
||
mGLMaxVertexAttribs = MINVALUE_GL_MAX_VERTEX_ATTRIBS;
|
||
} else {
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_VERTEX_ATTRIBS, &mGLMaxVertexAttribs);
|
||
}
|
||
if (mGLMaxVertexAttribs < 8) {
|
||
GenerateWarning("GL_MAX_VERTEX_ATTRIBS: %d is < 8!", mGLMaxVertexAttribs);
|
||
return false;
|
||
}
|
||
|
||
// Note: GL_MAX_TEXTURE_UNITS is fixed at 4 for most desktop hardware,
|
||
// even though the hardware supports much more. The
|
||
// GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS value is the accurate value.
|
||
if (MinCapabilityMode()) {
|
||
mGLMaxTextureUnits = MINVALUE_GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS;
|
||
} else {
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &mGLMaxTextureUnits);
|
||
}
|
||
if (mGLMaxTextureUnits < 8) {
|
||
GenerateWarning("GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: %d is < 8!", mGLMaxTextureUnits);
|
||
return false;
|
||
}
|
||
|
||
mBound2DTextures.SetLength(mGLMaxTextureUnits);
|
||
mBoundCubeMapTextures.SetLength(mGLMaxTextureUnits);
|
||
|
||
if (MinCapabilityMode()) {
|
||
mGLMaxTextureSize = MINVALUE_GL_MAX_TEXTURE_SIZE;
|
||
mGLMaxCubeMapTextureSize = MINVALUE_GL_MAX_CUBE_MAP_TEXTURE_SIZE;
|
||
mGLMaxRenderbufferSize = MINVALUE_GL_MAX_RENDERBUFFER_SIZE;
|
||
mGLMaxTextureImageUnits = MINVALUE_GL_MAX_TEXTURE_IMAGE_UNITS;
|
||
mGLMaxVertexTextureImageUnits = MINVALUE_GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS;
|
||
} else {
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_TEXTURE_SIZE, &mGLMaxTextureSize);
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_CUBE_MAP_TEXTURE_SIZE, &mGLMaxCubeMapTextureSize);
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_RENDERBUFFER_SIZE, &mGLMaxRenderbufferSize);
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_TEXTURE_IMAGE_UNITS, &mGLMaxTextureImageUnits);
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &mGLMaxVertexTextureImageUnits);
|
||
}
|
||
|
||
mGLMaxTextureSize = floorPOT(mGLMaxTextureSize);
|
||
mGLMaxRenderbufferSize = floorPOT(mGLMaxRenderbufferSize);
|
||
|
||
if (MinCapabilityMode()) {
|
||
mGLMaxFragmentUniformVectors = MINVALUE_GL_MAX_FRAGMENT_UNIFORM_VECTORS;
|
||
mGLMaxVertexUniformVectors = MINVALUE_GL_MAX_VERTEX_UNIFORM_VECTORS;
|
||
mGLMaxVaryingVectors = MINVALUE_GL_MAX_VARYING_VECTORS;
|
||
} else {
|
||
if (gl->IsSupported(gl::GLFeature::ES2_compatibility)) {
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_FRAGMENT_UNIFORM_VECTORS, &mGLMaxFragmentUniformVectors);
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_VERTEX_UNIFORM_VECTORS, &mGLMaxVertexUniformVectors);
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_VARYING_VECTORS, &mGLMaxVaryingVectors);
|
||
} else {
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, &mGLMaxFragmentUniformVectors);
|
||
mGLMaxFragmentUniformVectors /= 4;
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_VERTEX_UNIFORM_COMPONENTS, &mGLMaxVertexUniformVectors);
|
||
mGLMaxVertexUniformVectors /= 4;
|
||
|
||
// we are now going to try to read GL_MAX_VERTEX_OUTPUT_COMPONENTS and GL_MAX_FRAGMENT_INPUT_COMPONENTS,
|
||
// however these constants only entered the OpenGL standard at OpenGL 3.2. So we will try reading,
|
||
// and check OpenGL error for INVALID_ENUM.
|
||
|
||
// before we start, we check that no error already occurred, to prevent hiding it in our subsequent error handling
|
||
error = gl->GetAndClearError();
|
||
if (error != LOCAL_GL_NO_ERROR) {
|
||
GenerateWarning("GL error 0x%x occurred during WebGL context initialization!", error);
|
||
return false;
|
||
}
|
||
|
||
// On the public_webgl list, "problematic GetParameter pnames" thread, the following formula was given:
|
||
// mGLMaxVaryingVectors = min (GL_MAX_VERTEX_OUTPUT_COMPONENTS, GL_MAX_FRAGMENT_INPUT_COMPONENTS) / 4
|
||
GLint maxVertexOutputComponents,
|
||
minFragmentInputComponents;
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_VERTEX_OUTPUT_COMPONENTS, &maxVertexOutputComponents);
|
||
gl->fGetIntegerv(LOCAL_GL_MAX_FRAGMENT_INPUT_COMPONENTS, &minFragmentInputComponents);
|
||
|
||
error = gl->GetAndClearError();
|
||
switch (error) {
|
||
case LOCAL_GL_NO_ERROR:
|
||
mGLMaxVaryingVectors = std::min(maxVertexOutputComponents, minFragmentInputComponents) / 4;
|
||
break;
|
||
case LOCAL_GL_INVALID_ENUM:
|
||
mGLMaxVaryingVectors = 16; // = 64/4, 64 is the min value for maxVertexOutputComponents in OpenGL 3.2 spec
|
||
break;
|
||
default:
|
||
GenerateWarning("GL error 0x%x occurred during WebGL context initialization!", error);
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Always 1 for GLES2
|
||
mMaxFramebufferColorAttachments = 1;
|
||
|
||
if (!gl->IsGLES()) {
|
||
// gl_PointSize is always available in ES2 GLSL, but has to be
|
||
// specifically enabled on desktop GLSL.
|
||
gl->fEnable(LOCAL_GL_VERTEX_PROGRAM_POINT_SIZE);
|
||
|
||
// gl_PointCoord is always available in ES2 GLSL and in newer desktop GLSL versions, but apparently
|
||
// not in OpenGL 2 and apparently not (due to a driver bug) on certain NVIDIA setups. See:
|
||
// http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=261472
|
||
// Note that this used to cause crashes on old ATI drivers... hopefully not a significant
|
||
// problem anymore. See bug 602183.
|
||
gl->fEnable(LOCAL_GL_POINT_SPRITE);
|
||
}
|
||
|
||
#ifdef XP_MACOSX
|
||
if (gl->WorkAroundDriverBugs() &&
|
||
gl->Vendor() == gl::GLVendor::ATI) {
|
||
// The Mac ATI driver, in all known OSX version up to and including 10.8,
|
||
// renders points sprites upside-down. Apple bug 11778921
|
||
gl->fPointParameterf(LOCAL_GL_POINT_SPRITE_COORD_ORIGIN, LOCAL_GL_LOWER_LEFT);
|
||
}
|
||
#endif
|
||
|
||
// Check the shader validator pref
|
||
NS_ENSURE_TRUE(Preferences::GetRootBranch(), false);
|
||
|
||
mShaderValidation =
|
||
Preferences::GetBool("webgl.shader_validator", mShaderValidation);
|
||
|
||
// initialize shader translator
|
||
if (mShaderValidation) {
|
||
if (!ShInitialize()) {
|
||
GenerateWarning("GLSL translator initialization failed!");
|
||
return false;
|
||
}
|
||
}
|
||
|
||
// Mesa can only be detected with the GL_VERSION string, of the form "2.1 Mesa 7.11.0"
|
||
mIsMesa = strstr((const char *)(gl->fGetString(LOCAL_GL_VERSION)), "Mesa");
|
||
|
||
// notice that the point of calling GetAndClearError here is not only to check for error,
|
||
// it is also to reset the error flags so that a subsequent WebGL getError call will give the correct result.
|
||
error = gl->GetAndClearError();
|
||
if (error != LOCAL_GL_NO_ERROR) {
|
||
GenerateWarning("GL error 0x%x occurred during WebGL context initialization!", error);
|
||
return false;
|
||
}
|
||
|
||
if (IsWebGL2() &&
|
||
!InitWebGL2())
|
||
{
|
||
// Todo: Bug 898404: Only allow WebGL2 on GL>=3.0 on desktop GL.
|
||
return false;
|
||
}
|
||
|
||
// Default value for all disabled vertex attributes is [0, 0, 0, 1]
|
||
for (int32_t index = 0; index < mGLMaxVertexAttribs; ++index) {
|
||
VertexAttrib4f(index, 0, 0, 0, 1);
|
||
}
|
||
|
||
mDefaultVertexArray = WebGLVertexArray::Create(this);
|
||
mDefaultVertexArray->mAttribs.SetLength(mGLMaxVertexAttribs);
|
||
mBoundVertexArray = mDefaultVertexArray;
|
||
|
||
if (mLoseContextOnMemoryPressure) {
|
||
mContextObserver->RegisterMemoryPressureEvent();
|
||
}
|
||
|
||
return true;
|
||
}
|