2022-01-14  Kyle Piddington  <kpiddington@apple.com>

        ANGLE: Supports32BitFloatFiltering is not supported on TVOS
        https://bugs.webkit.org/show_bug.cgi?id=235239
        
        Reviewed by Darin Adler.

        <rdar://86457081>
        Broke an internal build. Caused by https://trac.webkit.org/changeset/286323/webkit

        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::supports32BitFloatFiltering const):

2022-01-12  Chris Lord  <clord@igalia.com>

        [WPE] Enable WebGL ANGLE support
        https://bugs.webkit.org/show_bug.cgi?id=235064

        Reviewed by Alejandro G. Castro.

        Enable building on WPE (mostly copying the GTK build file).

        * PlatformWPE.cmake:

2022-01-11  Kyle Piddington  <kpiddington@apple.com>

        ANGLE: ASTC-HDR is not available on TVOS
        https://bugs.webkit.org/show_bug.cgi?id=235076

        Reviewed by Dean Jackson.

        <rdar://87384038>
        This is a follow on patch to https://bugs.webkit.org/show_bug.cgi?id=234164,
        ASTC-HDR is only available on macOS and iOS, not tvOS or watchOS	
	This patch fixes an internal build.

        * scripts/code_generation_hashes/Metal_format_table.json:
        * src/libANGLE/renderer/metal/gen_mtl_format_table.py:
        (gen_image_map_switch_astc_case_tv_watchos):
        (gen_image_map_switch_string):
        (gen_image_mtl_to_angle_switch_string):
        (gen_image_map_switch_astc_case_watchos): Deleted.
        (gen_image_map_switch_astc_case_watchos.gen_format_assign_code): Deleted.
        * src/libANGLE/renderer/metal/mtl_format_table_autogen.mm:
        (rx::mtl::Format::MetalToAngleFormatID):
        (rx::mtl::Format::init):

2022-01-10  Alex Christensen  <achristensen@webkit.org>

        Start using C++20
        https://bugs.webkit.org/show_bug.cgi?id=233963

        Reviewed by Yusuke Suzuki.

        * Configurations/Base.xcconfig:

2022-01-09  Sam Weinig  <weinig@apple.com>

        Remove support for Direct2D
        https://bugs.webkit.org/show_bug.cgi?id=234999

        Reviewed by Darin Adler.

        Direct2D and FTW have not been building for over a year. It is
        time to remove them.

        * PlatformFTW.cmake: Removed.

2022-01-07  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r287698.

        Broke an internal build

        Reverted changeset:

        "Start using C++20"
        https://bugs.webkit.org/show_bug.cgi?id=233963
        https://commits.webkit.org/r287698

2022-01-06  Alex Christensen  <achristensen@webkit.org>

        Start using C++20
        https://bugs.webkit.org/show_bug.cgi?id=233963

        Reviewed by Yusuke Suzuki.

        * Configurations/Base.xcconfig:

2022-01-05  Kyle Piddington  <kpiddington@apple.com>

        Roll ANGLE to aabfe8747d 12-17-2021
        https://bugs.webkit.org/show_bug.cgi?id=234523

        Reviewed by Kenneth Russell.

        The changelog has been removed to improve readability.
        The following ANGLE commits were merged: 

        aabfe8747 Metal: Use the context device to Texture::resize
        34ea81111 Reland "Vulkan: Don't expose MSRTT on SwiftShader"
        624e3c3d5 Fix dangerous use of AutoObjCPtr after ownership identity change
        4a148e9d9 Revert "Vulkan: Suppress VUID-vkCmdDraw-blendEnable"
        ede0b8b71 Avoid ANGLE_MTL_AUTORELEASE inside ASSERT, it leaks on Release
        cb4f441c8 Roll vulkan-deps from 39f3a18bdfbe to 5568048d205e (8 revisions)
        2f78b48db Roll Chromium from 14ca75d254a5 to 81decb7250e1 (191 revisions)
        001221f0e Metal: upstream fix from WebKit for texture leak.
        dca434bdc Roll Chromium from 3f6c88f5581a to 14ca75d254a5 (401 revisions)
        b9f2d9cc1 Use text expectations to skip a test
        6c894e829 Vulkan: Replace BufferVk::getBufferAndOffset() with getBuffer()
        f2736f6dc Tests: Add My Talking Tom Friends trace.
        a93a3930b Vulkan: Track enabled in VertexArray
        83a670ab0 Vulkan: Implement BufferPool using VMA's virtual allocator
        836797166 Vulkan: Dirty vertex buffers if default attrib values changed
        543f5750f (origin/chromium/4771) Vulkan: Disable protected memory for ARM
        c7446ac42 Add support for GL_MESA_framebuffer_flip_y 1/*
        60383b41e Tests: Add Dota Underlords trace.
        f26687a03 Tests: Add My Talking Tom 2 trace.
        438de17ee Roll vulkan-deps from a8221eed5970 to 39f3a18bdfbe (5 revisions)
        e7413adff system_utils_posix: Check for SEGV_MAPERR si_code.
        6e5fd8165 Support more ImageLayout in ConvertImageLayoutToGLImageLayout
        b26bb13ab Metal: Remove references to xfbActiveUnpaused uniform
        bb5bab031 Roll Chromium from 2dae07eeb163 to 3f6c88f5581a (414 revisions)
        c4d434b91 Metal: Enable OES_fbo_render_mipmap
        670679918 Metal: Fix Webkit warnings in ANGLE build
        bda493258 Add guards for 64 bit types on 32bit systems
        e7c9dbb88 Skip SimpleStateChangeTestES3.OutOfBoundsByteAttribute on Pixel4 GLES
        89e11878b Vulkan: Fix the UAF issue with BufferData
        ee1d3cf74 Metal: Integrate Metal Binary Shader generation
        3e7e2758f Metal: Fix macOS ANGLE build on Catalina (10.15) SDK
        05a44dd24 Vulkan: Set content undefined on eglSwapBuffers
        26fa0fe68 Tests: Add Asphalt 9 trace
        5275f487e Vulkan: Disable async command queue with Vulkan SCBs
        feb599ad8 Invalidate EGL handles during eglTerminate
        32e23bb9d Expand WebGLCompressedTextureAvailabilityTest
        d6b9a2597 end2end_tests: Add SwS + AsyncQueue testing.
        a0eb6146c Update warning message for invalid include
        cac81f077 Return full error info when opening a library with dlopen
        90c3038e5 Vulkan: Fix desc set updates with Vulkan SCBs
        8419f4fcd Roll vulkan-deps from c03890076954 to a8221eed5970 (2 revisions)
        db367bd71 Roll Chromium from 0c0a3654694f to 2dae07eeb163 (450 revisions)
        bfc7f09ae Revert "Upgrade restricted traces to new trace format."
        800c6971c Modified buffer fallback format to smaller storage format
        709d87278 Revert "Trace Tests: Remove auto-generated code."
        3da54250b Skip MultithreadingTest.MultiContextDrawWithSwapBuffers
        7f1a0f89b Switch to non-deprecated bbagent, remove defunct experiments.
        9d49d8438 Add WebGLCompressedTextureAvailabilityTest
	
2022-01-05  Michael Saboff  <msaboff@apple.com>

        REGRESSION (r287382): libANGLE is built into a wrong location on iOS
        https://bugs.webkit.org/show_bug.cgi?id=234857

        Reviewed by Saam Barati.

        Reverted to the prior logic to compute INSTALL_PATH.  Then added an optional prefix
        for the alternate root framework location.

        * Configurations/ANGLE-dynamic.xcconfig:

2021-12-22  Michael Saboff  <msaboff@apple.com>

        Fix WebKit Build issues when using system content path
        https://bugs.webkit.org/show_bug.cgi?id=234624

        Reviewed by Filip Pizlo.

        Changed INSTALL_PATH on macOS builds to use a fully qualified .../WebCore.framework/Versions/A/Frameworks.
        Deleted unused create-symlink-to-altroot.sh script.

        * Configurations/ANGLE-dynamic.xcconfig:
        * scripts/create-symlink-to-altroot.sh: Removed.

2021-12-21  Michael Saboff  <msaboff@apple.com>

        Fix symlinks for alternate root framework locations
        https://bugs.webkit.org/show_bug.cgi?id=234567

        Reviewed by Filip Pizlo.

        Eliminated the creation of symlinks for ANGLE as it is under WebCore.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE-dynamic.xcconfig:

2021-12-21  Arcady Goldmints-Orlov  <agoldmints@igalia.com>

        [GTK] build fails with undefined symbol in ANGLE if USE_ANGLE_WEBGL is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=234239

        Reviewed by Kenneth Russell.

        Add a new linux.cmake file that defines angle_dma_buf_sources.
        This list gets appended it into ANGLE_SOURCES in PlatformGTK.cmake.

        * linux.cmake: Added. Manual translation of src/common/linux/BUILD.gn.
        * PlatformGTK.cmake:

2021-12-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        [ANGLE] "WARN: driver_utils.cpp:169 (rx::GetVendorString):! Unimplemented: rx::GetVendorString" on WinCairo debug testing bot
        https://bugs.webkit.org/show_bug.cgi?id=234371

        Reviewed by Kenneth Russell.

        After r286603 updated ANGLE, WinCairo debug testing bot was
        observing annoying warning message for all WebGL tessts.
        > WARN: driver_utils.cpp:169 (rx::GetVendorString): 	! Unimplemented: rx::GetVendorString(..\..\Source\ThirdParty\ANGLE\src\libANGLE\renderer\driver_utils.cpp:169)

        The vendor ID was 0x1414 (Microsoft).
        <https://pcisig.com/membership/member-companies>

        * src/libANGLE/renderer/driver_utils.cpp:
        (rx::GetVendorString): Added more vendor strings for vendor IDs.
        * src/libANGLE/renderer/driver_utils.h: Added VENDOR_ID_MICROSOFT.

2021-12-17  Kimmo Kinnunen  <kkinnunen@apple.com>

        REGRESSION (r287068): [macOS arm64] TestWebKitAPI.GraphicsContextGLCocoaTest.UnrecycledDisplayBuffersNoLeaks is failing
        https://bugs.webkit.org/show_bug.cgi?id=234356
        <rdar://problem/86533892>

        Reviewed by Antti Koivisto.

        Avoid leaking MTLTexture instances for render targets. Leak would happen through
        temporary render pass descriptor that would ref the render target texture.
        The descriptor was created without autoreleasepool in call stack.
        Also fixes the error string leaks.

        UnrecycledDisplayBuffersNoLeaks would report leaks of iosurface-backed
        GraphicsContextGL default framebuffer bound textures if glClear was called.

        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::getRenderPassCommandEncoder):

2021-12-16  John Cunningham  <johncunningham@apple.com>

        Add support to attribute ownership of ANGLE Metal's resources
        https://bugs.webkit.org/show_bug.cgi?id=233941

        Reviewed by Kimmo Kinnunen.

        Add SPI to mtl_resource_spi.h to attribute memory to another task.

        * Configurations/ANGLE-dynamic.xcconfig:
        * Configurations/ANGLE-static.xcconfig:
        * src/libANGLE/renderer/metal/mtl_resource_spi.h:
        (rx::mtl::setOwnerWithIdentity):

2021-12-16  Michael Saboff  <msaboff@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=234173
        Update Install Paths for build system changes

        Reviewed by Filip Pizlo.

        Added build variables and build step to create symlinks pointing to the alternate
        build locations from the current framework install location.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE-dynamic.xcconfig:
        * scripts/create-symlink-to-altroot.sh: Added.

2021-12-15  Dean Jackson  <dino@apple.com>

        [ANGLE] clang with -Wunknown-warning-option will fail on -Wweak-template-vtables
        https://bugs.webkit.org/show_bug.cgi?id=233837
        <rdar://problem/86335819>

        Reviewed by Antoine Quint.

        Turn off unknown-warning-option on Apple builds. This shouldn't need to be
        upstreamed - the Xcode configurations for ANGLE are specific to WebKit.

        * Configurations/Base.xcconfig:

2021-12-15  Chris Lord  <clord@igalia.com>

        [GTK] Use libgbm and the ANGLE gbm backend to fix initialisation
        https://bugs.webkit.org/show_bug.cgi?id=234293

        Reviewed by Don Olmstead.

        Use GBM backend for GTK platform.

        * CMakeLists.txt:
        * GL.cmake:
        * PlatformGTK.cmake:

2021-12-15  Kyle Piddington  <kpiddington@apple.com>

        [ANGLE] Roll ANGLE to 12-14-2021 (5ee7dfbd5a3)
        https://bugs.webkit.org/show_bug.cgi?id=234317

        Reviewed by Kenneth Russell.

        Roll ANGLE to 12-14-2021 to include new memory-attribution
        Metal device, merge up fixes, EAC/ ASTC support on M1

        The changelog has been removed to promote readability       

2021-12-13  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Fix ANGLE compilation
        https://bugs.webkit.org/show_bug.cgi?id=233327

        Reviewed by Kenneth Russell.

        There is a define with a typo in the name and activating EGL and
        X11 does not work at the same time.

        * PlatformGTK.cmake:

2021-12-13  Kyle Piddington  <kpiddington@apple.com>

        [MacCatalyst] fix iOSMac after refactor in r286899
        https://bugs.webkit.org/show_bug.cgi?id=234250

        Reviewed by Dean Jackson.

        Also includes a longer term fix for 
        https://bugs.webkit.org/show_bug.cgi?id=233977

        Tested builds on mac, iOS, TV SDKs, plus iOSMac

        * src/common/platform.h:
        * src/libANGLE/renderer/metal/gen_mtl_format_table.py:
        (gen_image_map_switch_string):
        * src/libANGLE/renderer/metal/mtl_format_table_autogen.mm:
        (rx::mtl::Format::init):

2021-12-13  Kimmo Kinnunen  <kkinnunen@apple.com>

        REGRESSION(Safari 15, BigSur): Poor video texture upload performance with MacBook M1, ANGLE OpenGL backend 
        https://bugs.webkit.org/show_bug.cgi?id=232235
        <rdar://problem/84878815>
        Reviewed by Dean Jackson.

        Remove validation for IOSurface element size when a IOSurface is bound
        to a pbuffer. The IOSurfaceGetBytesPerElementOfPlane is not valid for some internal formats
        that might be compressed.

        Will add a WebKit level test in subsequent fix.
        Will add an ANGLE level test during upstreaming of the patch.

        Same as "Textures Fail to Render in WebGL from HLS Stream on iPhone 12 [iOS 14.2]"
        but this time for CGL.
        https://webkit.org/b/218637  rdar://problem/71102126

        Remove incorrect validation that IOSurface pixel format matches
        the pixel format of the texture image being specified.

        The "Element" in IOSurface is a block of pixels, while the validation assumed
        it means one pixel. The validation failed for a compressed format.

        Currently we map non-public YUV formats, to which there is no elequent way
        of implementing the validation.


        * src/libANGLE/renderer/gl/cgl/IOSurfaceSurfaceCGL.cpp:
        (rx::IOSurfaceSurfaceCGL::validateAttributes):

2021-12-10  Kyle Piddington  <kpiddington@apple.com>

        [ANGLE] ASTC-HDR is unavailable on some platforms
        https://bugs.webkit.org/show_bug.cgi?id=234164

        Reviewed by Kenneth Russell.

        Update autogenerated format table to avoid using ASTC_HDR on
        platforms that don't have the enum. 

        * src/libANGLE/renderer/metal/gen_mtl_format_table.py:
        (gen_image_map_switch_astc_case_iosmac):
        (gen_image_map_switch_astc_case_tvos):
        (gen_image_map_switch_astc_case_tvos.gen_format_assign_code):
        (gen_image_map_switch_string):
        (gen_image_mtl_to_angle_switch_string):
        (gen_mtl_format_caps_init_string):
        (gen_image_map_switch_astc_case): Deleted.
        (gen_image_map_switch_astc_case.gen_format_assign_code): Deleted.
        * src/libANGLE/renderer/metal/mtl_format_map.json:
        * src/libANGLE/renderer/metal/mtl_format_table_autogen.mm:
        (rx::mtl::Format::MetalToAngleFormatID):
        (rx::mtl::Format::init):
        (rx::mtl::FormatTable::initNativeFormatCapsAutogen):

2021-12-10  Michael Saboff  <msaboff@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=234173
        Update Install Paths for build system changes

        Reviewed by Yusuke Suzuki.

        Updated install paths for changes in the build system that use a system path prefix.

        * Configurations/ANGLE-dynamic.xcconfig:

2021-12-09  Dean Jackson  <dino@apple.com>

        [ANGLE] Code generation happens on each build and produces SCM diffs
        https://bugs.webkit.org/show_bug.cgi?id=234025

        Reviewed by Kimmo Kinnunen.

        Temporarily remove the build phase that generates the
        mtl_default_shaders_src_autogen files because they are producing
        diffs.

        We either need to generate these manually, or fix the Xcode project
        to generate them into Derived Sources so they don't appear in our
        repository.

        * ANGLE.xcodeproj/project.pbxproj:

2021-12-08  Kyle Piddington  <kpiddington@apple.com>

        Update ANGLE changes.diff with new roll.
        https://bugs.webkit.org/show_bug.cgi?id=233952

        Reviewed by Kenneth Russell.

        * changes.diff:

2021-12-08  Adrian Perez de Castro  <aperez@igalia.com>

        Avoid noisy Wcomment warnings after ANGLE update in r286603
        https://bugs.webkit.org/show_bug.cgi?id=233964
        <rdar://problem/86186455>

        Reviewed by Michael Catanzaro.

        * CMakeLists.txt: Pass also -Wno-comment when building with GCC or Clang; arrange to
        set compiler flags for any of the ANGLE library targets instead of only for libANGLE.
        * src/compiler/translator/tree_util/IntermTraverse.h: Revert change from 233964 to
        avoid having differences with the upstream version of the file.

2021-12-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [MacCatalyst] Fix build after r286603
        https://bugs.webkit.org/show_bug.cgi?id=233977

        Unreviewed.

        Previously, TARGET_OS_IOS and TARGET_OS_MACCATALYST were never on at the same time.
        Now, they're on at the same time, and ANGLE doesn't expect that. This patch turns
        off TARGET_OS_IOS when TARGET_OS_MACCATALYST is on, just to get ANGLE to build.
        The long-term fix is to either update all the sites to use correct macros, or to
        use the ANGLE_PLATFORM_* defines instead.

        * src/common/platform.h:

2021-12-07  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, these files are modified after building ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=220896
        <rdar://problem/73539682>

        * src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc:
        * src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.metal:

2021-12-07  Lauro Moura  <lmoura@igalia.com>

        Avoid noisy Wcomment warnings after ANGLE update in r286603
        https://bugs.webkit.org/show_bug.cgi?id=233964

        Unreviewed warning removal.

        * src/compiler/translator/tree_util/IntermTraverse.h:

2021-12-07  Kyle Piddington  <kpiddington@apple.com>
        
        Roll ANGLE to include upstreamed Metal backend
        https://bugs.webkit.org/show_bug.cgi?id=220896
        <rdar://problem/73539682>

        Reviewed by Ken Russell and Dean Jackson.

        Update ANGLE to ce854632690e505551414f80d01d864df6118882
        
        The changelog has been intentionally deleted to preserve
        readability
       
        The following additional changes were made in the mergeup.

        Update ShaderMtl get debug info to return translated source.
        
        Fix crashes in webgl/2.0.y/conformance/extensions/webgl-compressed-texture-s3tc-srgb.html
        Fix angle-instanced-arrays-out-of-bounds.html
        Skip additional validation when primitive count in drawArraysInstanced is zero


        Fix Clear-Invalidate-Render bug for multisample attachments. 
        Clearing a multisample texture, and then invalidating the render pass would lead
        to the next pass not loading the cleared texture.

        Fix exports and includes for egl_autogen.h files.

        Fix webgl/2.0.0/deqp/functional/gles3/fboinvalidate/default.html 
        Add synchronization when reading pixels back from shared framebuffers

2021-11-30  Kyle Piddington  <kpiddington@apple.com>

        Hardware PCF filtering does not work on iOS 15 when using WebGL2
        https://bugs.webkit.org/show_bug.cgi?id=232071

	Lower restrictions on sampling D32F formats, and allow filtering
	of Depth16F on iOS hardware, as it was previously restricted.
	
        Reviewed by Kenneth Russell.

        * include/platform/FeaturesMtl.h:
        * src/libANGLE/renderer/metal/DisplayMtl.h:
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::initializeFeatures):
        (rx::DisplayMtl::supports32BitFloatFiltering const):
        (rx::DisplayMtl::supportsDepth24Stencil8PixelFormat const):
        * src/libANGLE/renderer/metal/TextureMtl.mm:
        (rx::TextureMtl::ensureSamplerStateCreated):
        * src/libANGLE/renderer/metal/mtl_format_map.json:
        * src/libANGLE/renderer/metal/mtl_format_table_autogen.mm:
        (rx::mtl::FormatTable::initNativeFormatCapsAutogen):

2021-11-17  Dean Jackson  <dino@apple.com>

        ANGLE build failure - sprintf is deprecated
        https://bugs.webkit.org/show_bug.cgi?id=233279

        Reviewed by Wenson Hsieh.

        Replace sprintf with snprintf.

        * src/compiler/translator/TranslatorMetalDirect/IdGen.cpp:
        (IdGen::createNewName):
        * src/compiler/translator/TranslatorMetalDirect/ModifyStruct.cpp:
        * src/compiler/translator/TranslatorMetalDirect/SymbolEnv.cpp:
        (SymbolEnv::TemplateName::fullName const):

2021-11-06  David Kilzer  <ddkilzer@apple.com>

        Remove empty directories from from svn.webkit.org repository as of r285357
        <https://webkit.org/b/232773>

        Unreviewed clean up.

        * src/id: Removed.
        * src/libANGLE/renderer/metal/shaders/compiled: Removed.
        * src/tests/perf_tests/restricted_traces: Removed.

2021-11-03  Kyle Piddington  <kpiddington@apple.com>

        REGRESSION (iOS 15): Tab crashes when trying to render Projector stories
        https://bugs.webkit.org/show_bug.cgi?id=231607

	Rework vertex buffer caching to allow us to reuse parts
	of converted buffers. This dramatically drops the memory usage 
	of this tab from 4.5 gb to roughly 1.3gb

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/BufferMtl.mm:
        (rx::BufferMtl::getVertexConversionBuffer):
        * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
        (rx::VertexArrayMtl::convertVertexBuffer):
        (rx::VertexArrayMtl::convertVertexBufferCPU):
        (rx::VertexArrayMtl::convertVertexBufferGPU):

2021-11-01  David Kilzer  <ddkilzer@apple.com>

        [ANGLE] Enable -Wformat=2 warnings
        <https://webkit.org/b/232358>
        <rdar://problem/84568935>

        Reviewed by Kimmo Kinnunen.

        * Configurations/Base.xcconfig:
        (WARNING_CFLAGS):
        - Add -Wformat=2 switch, which includes -Wformat-nonliteral.
        * src/common/angleutils.h:
        (FormatStringIntoVector):
        - Move below definition of ANGLE_FORMAT_PRINTF() and add macro
          to the function declaration to fix -Wformat-nonliteral
          warning.
        * src/compiler/translator/Common.h:
        (sh::str):
        - Make `formatStr` a constexpr to fix -Wformat-nonliteral
          warning.

2021-10-27  Kimmo Kinnunen  <kkinnunen@apple.com>

        REGRESSION (Safari 15): Poor WebGL performance on https://downloads.scirra.com/labs/particles
        https://bugs.webkit.org/show_bug.cgi?id=230749
        <rdar://problem/83576271>

        Reviewed by Kenneth Russell.

        The site would draw indexed per frame with each frame increasing the size of the draw.
        This would cause index buffer range cache update for each draw.
        Range computation needs to look inside the index buffer.
        Mapping the index buffer for read would cause command buffer flush for each computation,
        since previous frame would have used the index buffer for reading. This would cause
        performance degradation for the duration where the range cache would need update.

        Since the buffer is read by the draw but not written, the map should be a no-op.
        Consult the "CPU memory needs synchronizing" flag of the mtl::Resource when
        mapping. Only synchronize with GPU if the memory needs synchronizing.

        * src/libANGLE/renderer/metal/mtl_resources.mm:
        (rx::mtl::Buffer::mapWithOpt):

2021-10-25  Kyle Piddington  <kpiddington@apple.com>

        REGRESSION (iOS 15), safari604.1: Could not link the shader program
        https://bugs.webkit.org/show_bug.cgi?id=231475

        Renaming regex incorrectly substituted an attribute. 
        Update to require exact attribute match

        Reviewed by Dean Jackson

        * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
        (rx::mtl::updateShaderAttributes):

2021-10-15  Ross Kirsling  <ross.kirsling@sony.com>

        Realize Mac CMake build of WebCore and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=231749

        Reviewed by Alex Christensen.

        * Compiler.cmake:

2021-10-15  Kyle Piddington  <kpiddington@apple.com>

        REGRESSION (r283667): webgl/2.0.0/deqp/functional/gles3/lifetime.html fails
        https://bugs.webkit.org/show_bug.cgi?id=231682

        Transform feedback should avoid appending _u for 
        builtin output variables.

        Reviewed by Kimmo Kinnunen.

        * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
        (rx::mtl::GenerateTransformFeedbackVaryingOutput):

2021-10-14  Kyle Piddington  <kpiddington@apple.com>

        https://tankionline.com/play/ html5 engine not working: crashes. (Metal shader not working)
        https://bugs.webkit.org/show_bug.cgi?id=231490

        Add argument to RemoveInactiveInterfaceVariables to keep
        output fragment variables, even if they are
        Add a new test to  verify that this problem is fixed. 

        Reviewed by Kenneth Russell.

        * src/compiler/translator/TranslatorMetalDirect.cpp:
        (sh::TranslatorMetalDirect::translateImpl):
        * src/compiler/translator/TranslatorVulkan.cpp:
        (sh::TranslatorVulkan::translateImpl):
        * src/compiler/translator/tree_ops/RemoveInactiveInterfaceVariables.cpp:
        (sh::RemoveInactiveInterfaceVariables):
        * src/compiler/translator/tree_ops/RemoveInactiveInterfaceVariables.h:

2021-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        All the SDKVariant.xcconfig files should match
        https://bugs.webkit.org/show_bug.cgi?id=231663

        Reviewed by Youenn Fablet.

        * Configurations/SDKVariant.xcconfig:

2021-10-13  Kyle Piddington  <kpiddington@apple.com>

        Upstream ANGLE: PrimitiveRestart tests fail due to incorrect draw commands
        https://bugs.webkit.org/show_bug.cgi?id=231626
        <rdar:/problem/84167241>
   
        Primitive restart draw commands were being encoded
        incorrectly. Single element ranges were being disregarded,
        and a maximum draw size was not being enforced when the
        index buffer was aliased / reused.

        Cherry-pick from upstream anglebug.com/6535
    
        Reviewed by Kenneth Russell.

        * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
        (rx::VertexArrayMtl::getDrawIndices):

2021-10-12  Alexey Proskuryakov  <ap@apple.com>

        Invoke ThirdParty build scripts with python3 explicitly
        https://bugs.webkit.org/show_bug.cgi?id=231605

        Reviewed by Dean Jackson.

        * ANGLE.xcodeproj/project.pbxproj:
        * adjust-angle-include-paths.py:
        * src/libANGLE/renderer/metal/shaders/create_mtl_internal_shaders.py:

2021-10-06  Kyle Piddington  <kpiddington@apple.com>

        Shadertoy "truchet district" fails to compile with error: Internal error compiling shader with Metal backend"
        https://bugs.webkit.org/show_bug.cgi?id=229378
        <rdar://problem/82299053>

        Reviewed by Kenneth Russell.

        Change TranslatorMetalDirect to prefix '_u' to all user defined variables.
        Clean up builtins like samplers and ANGLE structs that were being
        accidently promoted to userDefined variables.

        * src/compiler/translator/TranslatorMetalDirect.cpp:
        (sh::GetMslKeywords):
        * src/compiler/translator/TranslatorMetalDirect/Name.cpp:
        (Name::emit const):
        * src/compiler/translator/TranslatorMetalDirect/SymbolEnv.cpp:
        (SymbolEnv::getTextureEnv):
        (SymbolEnv::getSamplerStruct):
        (sh::GetTextureTypeName):
        * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
        (rx::mtl::GenerateTransformFeedbackVaryingOutput):

2021-09-28  Alex Christensen  <achristensen@webkit.org>

        Mostly fix Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=230868

        Reviewed by Don Olmstead.

        * Compiler.cmake:
        * Metal.cmake:

2021-09-23  Kyle Piddington  <kpiddington@apple.com>

        [WebGL2, Safari 15 - iOS15] Problems with drawElements in some conditions
        https://bugs.webkit.org/show_bug.cgi?id=230107

        Index buffer rewrite was dispatching too many threads. 
        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/ProvokingVertexHelper.mm:
        (rx::ProvokingVertexHelper::preconditionIndexBuffer):

2021-09-20  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal: single-component swizzles do not compile
        https://bugs.webkit.org/show_bug.cgi?id=230472
        <rdar://problem/83310780>

        Reviewed by Dean Jackson.

        Fix metal compiler compile errors when using 
        single value swizles (glslvariable.r) in position where lvalues would
        be needed. Use the variable instead of single element array 
        (copy-paste typo).

        * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp:

2021-09-16  Kyle Piddington  <kpiddington@apple.com>

        webgl/2.0.y/conformance/extensions/webgl-compressed-texture-s3tc-srgb.html fails on Intel+AMD Metal
        https://bugs.webkit.org/show_bug.cgi?id=229941

        Zero-initialize compressed textures explicitly, as they aren't implicitly initalized in Metal.
        Reviewed by Kenneth Russell <kbr@chromium.org>.

        * src/libANGLE/renderer/metal/mtl_utils.h:
        * src/libANGLE/renderer/metal/mtl_utils.mm:
        (rx::mtl::GetCompressedBufferForTextureWithFormat):
        (rx::mtl::InitializeCompressedTextureContents):
        (rx::mtl::InitializeTextureContents):

2021-08-31  Kimmo Kinnunen  <kkinnunen@apple.com>

        webgl/1.0.x/conformance/glsl/misc/fragcolor-fragdata-invariant.html fails
        https://bugs.webkit.org/show_bug.cgi?id=223317
        <rdar://problem/75772659>

        Reviewed by Kenneth Russell.

        The parser maintains invariance metadata for each input and output
        with the help of the symbol table, during parsing.

        Use this metadata through the collection phase done by CollectVariables
        section of shader compilation.

        Remove the manual tree rewrite section that collected the invariance
        information. The implementation had following problems:
        1) It would declare the variables present. This would fail the test case
        fixed here, due to the test case using invariant declarations to both
        FragColor and FragData, which would cause both to be present as outputs
        to the MSL.
        2) It would operate on rewritten variables. For example, FragCoord would
        be replaced with different variable, causing the invariance be marked
        based on the rewritten name but the later lookup intended to be done
        with the original name.

        Remove logic to mark FragCoord as invariant, as MSL specification explicitly
        says that only the vertex [[position]] output can be marked as [[invariant]].
        As noted above, this never worked.

        Fix cases where the tree rewriters assume that all variable references are
        done within functions. The global qualifier declarations are now left
        in the tree and as such can refer to variables but do not belong to any
        function.

        Fixes:
        webgl/1.0.x/conformance/glsl/misc/fragcolor-fragdata-invariant.html
        webgl/2.0.y/conformance/glsl/misc/fragcolor-fragdata-invariant.html

        * ANGLE.xcodeproj/project.pbxproj:
        * src/compiler/translator/TranslatorMetalDirect.cpp:
        (sh::TranslatorMetalDirect::translateImpl):
        * src/compiler/translator/TranslatorMetalDirect/DiscoverDependentFunctions.cpp:
        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GenMetalTraverser::GenMetalTraverser):
        (GenMetalTraverser::emitPostQualifier):
        (GenMetalTraverser::visitGlobalQualifierDeclaration):
        (sh::EmitMetal):
        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.h:
        * src/compiler/translator/TranslatorMetalDirect/RewriteGlobalQualifierDecls.cpp: Removed.
        * src/compiler/translator/TranslatorMetalDirect/RewriteGlobalQualifierDecls.h: Removed.
        * src/compiler/translator/TranslatorMetalDirect/RewritePipelines.cpp:
        (sh::IsVariableInvariant):
        (sh::GeneratePipelineStruct::Exec):
        (sh::GeneratePipelineStruct::GeneratePipelineStruct):
        (sh::GeneratePipelineStruct::createInternalPipelineStruct):
        (sh::UpdatePipelineSymbols):
        (sh::RewritePipeline):
        (sh::RewritePipelines):
        * src/compiler/translator/TranslatorMetalDirect/RewritePipelines.h:
        * src/compiler/translator/TranslatorMetalDirect/SeparateCompoundExpressions.cpp:

2021-08-25  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal index buffer restart range cache is could be maintained more consistently
        https://bugs.webkit.org/show_bug.cgi?id=227451

        Reviewed by Kenneth Russell.

        * src/libANGLE/renderer/metal/BufferMtl.h:
        (rx::BufferMtl::RestartRangeCache::RestartRangeCache):
        Add optional<RestartRangeCache> which contains the ranges and
        the index type used to build the ranges.

        * src/libANGLE/renderer/metal/BufferMtl.mm:
        (rx::BufferMtl::markConversionBuffersDirty):
        (rx::BufferMtl::clearConversionBuffers):
        Invalidate the range cache when clearing conversion buffers.
        Otherwise the cache would be left in inconsistent state vs.
        the contents of the index buffer in cases of code like:
        BufferMtl::setDataImpl() ...
           if (...) {
               markConversionBufferDirty();
           } else {
               clearConversionBuffers();
           }
        (rx::BufferMtl::getRestartIndices):

2021-08-24  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal infinities and NaNs generated with incorrect syntax
        https://bugs.webkit.org/show_bug.cgi?id=229439
        <rdar://81033366>

        Reviewed by Dean Jackson.

        Generate NaN and infinity constant values correctly.
        An else was missing from if-block, causing double processing.

        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GenMetalTraverser::emitSingleConstant):
        * src/libANGLE/renderer/metal/mtl_utils.mm:
        (rx::mtl::CreateShaderLibrary):

2021-08-17  David Kilzer  <ddkilzer@apple.com>

        [Metal ANGLE] Fix over-autorelease of rx::DisplayMtl::getMetalDeviceMatchingAttribute() and various Objective-C leaks
        <https://webkit.org/b/229128>
        <rdar://problem/81964007>

        Reviewed by Alex Christensen.

        * src/libANGLE/renderer/metal/DisplayMtl.h:
        (rx::DisplayMtl::getMetalDeviceMatchingAttribute):
        - Change to return mtl::AutoObjCPtr<> to make ownership clear.
        (rx::DisplayMtl::mMetalDevice):
        - No need to initialize to nil.

        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::initializeImpl):
        - Update for changes to getMetalDeviceMatchingAttribute().
        (rx::DisplayMtl::getMetalDeviceMatchingAttribute):
        - Change to return mtl::AutoObjCPtr<> to make ownership clear.
        - Fix leak of `deviceList`, `externalGPUs`, `integratedGPUs`, and
          `discreteGPUs`.
        - Use mtl::adoptObjCObj<>() to prevent leak of
          MTLCreateSystemDefaultDevice().

        * src/libANGLE/renderer/metal/IOSurfaceSurfaceMtl.mm:
        - Fix leak of `captureDescriptor` in two different if blocks.

        * src/libANGLE/renderer/metal/ProgramMtl.mm:
        - Fix leak of `funcConstants` in early return on error path.

        * src/libANGLE/renderer/metal/ProvokingVertexHelper.mm:
        (rx::ProvokingVertexHelper::getSpecializedShader):
        - Fix leak of `fcValues`.

        * src/libANGLE/renderer/metal/SurfaceMtl.mm:
        - Fix leak of `captureDescriptor` in two different if blocks.

        * src/libANGLE/renderer/metal/mtl_common.h:
        (rx::mtl::WrappedObject::retainAssign):
        - Move statement inside #if/#endif that isn't needed for ARC.
        (rx::mtl::WrappedObject::unretainAssign): Add.
        (rx::mtl::AutoObjCPtr::AutoObjCPtr): Add.
        (rx::mtl::adoptObjCObj): Add.
        - Add a helper method to adopt an Objective-C object to
          eliminate the need to autorelease a +1 retained object before
          an mtl::AutoObjCPtr<> object wraps it.  Modeled after
          WTF::RetainPtr<> in WebKit.

        * src/libANGLE/renderer/metal/mtl_state_cache.mm:
        (rx::mtl::RenderPipelineCache::createRenderPipelineState):
        (rx::mtl::ProvokingVertexComputePipelineCache::createComputePipelineState):
        - Use adoptObjCObj<>() to fix potential leak on the early return
          path since these methods return an mtl::AutoObjCPtr<>.

2021-08-16  David Kilzer  <ddkilzer@apple.com>

        "make analyze" should run clang static analyzer in deep mode
        <https://webkit.org/b/229127>
        <rdar://problem/81960587>

        Reviewed by Alexey Proskuryakov.

        * ANGLE.xcodeproj/project.pbxproj:
        - Treat "analyze" the same as "build" for "ACTION" environment
          variable.

2021-08-12  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Cocoa compiles contents of ContextEAGL on mac
        https://bugs.webkit.org/show_bug.cgi?id=228987

        Reviewed by Kenneth Russell.

        Add include guards that are consistent with other EAGL files.

        * src/libANGLE/renderer/gl/eagl/ContextEAGL.cpp:

2021-08-12  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Cocoa compiles parts of HLSL translator, vulkan translator, libgl api, capture redundantly
        https://bugs.webkit.org/show_bug.cgi?id=228986

        Reviewed by Kenneth Russell.

        Remove following from ANGLE (dynamic) target:
        - HLSL translator and tree ops used only by it
        - Vulkan translator output
        - libgl API validation implementation
        - API trace capture implementation (was only partially compiled)

        The features are not part of Cocoa use of ANGLE, and should
        not be compiled as such.
        Does not affect the binary size more than few kilobytes.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE-dynamic.xcconfig:

2021-08-11  Kyle Piddington  <kpiddington@apple.com>

        Avoid infinite recursion when command buffer creation fails
        https://bugs.webkit.org/show_bug.cgi?id=228978
        <rdar://79224824>
 
        Reviewed by Kenneth Russell.
 
        In cases where the MTLCommandBuffer is not a valid metal object,
        we can end up in an infinite recursive loop during draw call setup. Refactor setupDraw to take no more than two attempts through the setup function. 

        Testing: Ran WebGL tests, use case samples. Set up synthetic 
        repro forcing bail out path, saw WebGL content fail to render 
        instead of a web process crash.

        * src/libANGLE/renderer/metal/ContextMtl.h:
        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::setupDraw):
        (rx::ContextMtl::setupDrawImpl):

2021-08-11  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cherry-pick ANGLE: Revise WebGL's shaderSource validation
        https://bugs.webkit.org/show_bug.cgi?id=228951

        Reviewed by Kenneth Russell.

        Cherry-pick ANGLE commit: b4fd46288aa65d61dc9c7140c7d1cdba3f4cdf9a
        From: Kenneth Russell <kbr@chromium.org>
        Date: Wed, 27 Jan 2021 15:56:58 -0800
        Revise WebGL's shaderSource validation.

        Per discussion in the WebGL working group, shaderSource no longer
        generates INVALID_VALUE for sources containing characters outside the
        ESSL character set. Compilation and/or linking is still specified to
        fail when illegal constructs are used.

        With this change, https://github.com/KhronosGroup/WebGL/pull/3206
        passes with the passthrough command decoder.

        Revise WebGL compatibility tests to follow the new rules.

        * src/libANGLE/validationES2.cpp:
        (gl::ValidateShaderSource):
        * src/tests/gl_tests/WebGLCompatibilityTest.cpp:

2021-07-23  Dean Jackson  <dino@apple.com>

        3.5 MB system-wide footprint impact due to thread-locals in libANGLE
        https://bugs.webkit.org/show_bug.cgi?id=228240
        rdar://79504783

        Reviewed by Ken Russell and Geoff Garen.

        Apple's dyld has a bug where thread_local variables are dirtied on
        process launch, causing a memory regression. Work around this
        temporarily in ANGLE by using pthread thread local storage.

        I don't expect this to be upstreamed to ANGLE unless they
        want it. If it isn't, this patch will have to be applied until
        the dyld bug is fixed.

        * src/libANGLE/Context.cpp: Implement some methods to get/set what was
        the global variable gCurrentValidContext.
        (gl::GetCurrentValidContextTLSIndex):
        (gl::GetCurrentValidContextTLS):
        (gl::SetCurrentValidContextTLS):
        (gl::Context::setContextLost):
        * src/libANGLE/Context.h:
        * src/libGLESv2/global_state.cpp: Ditto, but for gCurrentThread.
        (egl::GetCurrentThreadTLSIndex):
        (egl::GetCurrentThreadTLS):
        (egl::SetCurrentThreadTLS):
        (egl::GetCurrentThread):
        (egl::SetContextCurrent):
        * src/libGLESv2/global_state.h:
        (gl::GetGlobalContext):
        (gl::GetValidGlobalContext):

2021-07-16  Kyle Piddington  <kpiddington@apple.com>

        Build Default Metal library offline
        https://bugs.webkit.org/show_bug.cgi?id=227333

        <rdar://79923371>

        This patch compiles and creates a Metal library at build time, storing
        the library as a compiled binary file. This library is baked into the dylib,
        and is loaded at context creation time.

        Unlike the previous version of this patch, this patch does not save or store the .metallib on disk, but rather
        bakes it into a binary.

        Fixed internal build breaks by skipping Metallib bake script.

        Reviewed by Kenneth Russell.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE-dynamic.xcconfig:
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::initializeShaderLibrary):
        * src/libANGLE/renderer/metal/mtl_utils.h:

2021-07-16  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r279980.

        Broke Internal Builds

        Reverted changeset:

        "Build Default Metal library offline"
        https://bugs.webkit.org/show_bug.cgi?id=227333
        https://commits.webkit.org/r279980

2021-07-16  Kyle Piddington  <kpiddington@apple.com>

        Build Default Metal library offline
        https://bugs.webkit.org/show_bug.cgi?id=227333

        <rdar://79923371>

        This patch compiles and creates a Metal library at build time, storing
        the library as a compiled binary file. This library is baked into the dylib, 
        and is loaded at context creation time.

        Unlike the previous version of this patch, this patch does not save or store the .metallib on disk, but rather
        bakes it into a binary.
        
        Reviewed by Kenneth Russell.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE-dynamic.xcconfig:
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::initializeShaderLibrary):
        * src/libANGLE/renderer/metal/mtl_utils.h:

2021-07-15  Kyle Piddington  <kpiddington@apple.com>

        WebGL2 demo doesn't work due to failing compilation to metal backend
        https://bugs.webkit.org/show_bug.cgi?id=226865
	
        Fix translation of struct-arrays to contain the array type as well.
        Reviewed by Dean Jackson.

        * src/compiler/translator/TranslatorMetalDirect/SeparateCompoundStructDeclarations.cpp:

2021-07-13  Kyle Piddington  <kpiddington@apple.com>

        rAF driven WebGL submits excessive amount of GPU work when frames are slow
        https://bugs.webkit.org/show_bug.cgi?id=227059

        Reviewed by Dean Jackson.

        Advertise GL_ARB_sync for the Metal backend.
    Since GL_ARB_sync is core in OpenGL ES 3.0 and the Metal backend advertises OpenGL ES 3.0,
    the API must be working already.

        Limit in-flight WebGL frames to three frames. Do not continue preparation for display
    until the commands for the oldest frame have been executed by the GPU.

        This limits the impact slow frames have, especially in the
    case where the compositor skip frames and WebKit would issue a new slow frame
    on top of the skipped frame.

	An additional change ensures that Nvidia configs, which do not support MTLEvents
	to a level of conformance required (See http://crbug.com/1136673), continue to run. The more powerful eGPUs will not experience throttling to the same level as integrated GPUS.
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::initializeExtensions const):

2021-07-07  Kyle Piddington  <kpiddington@apple.com>

        WebGL shader link error in iOS 15 beta: "Internal error compiling shader with Metal backend"
        https://bugs.webkit.org/show_bug.cgi?id=227723

        The sequence operator can be used to combine statements. Our initial
        logic did not account for this. 
        Reviewed by Dean Jackson.

        * src/compiler/translator/TranslatorMetalDirect/SeparateCompoundExpressions.cpp:
        (sh::Separator::isStandaloneExpr):

2021-07-06  Kyle Piddington  <kpiddington@apple.com>

        REGRESSION (r279466):  [Big Sur] webgl/1.0.3/conformance & webgl/2.0.0/conformance are failing
        https://bugs.webkit.org/show_bug.cgi?id=227596
        Provide Intel workaround for Big Sur systems. Atan and invariant have 
        issues on older systems, and require us to disable fastmath to produce correct results. 

        Reviewed by Kenneth Russell.

        * include/platform/FeaturesMtl.h:
        * src/compiler/translator/TranslatorMetalDirect.h:
        (sh::TranslatorMetalReflection::reset):
        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GenMetalTraverser::emitPostQualifier):
        (GenMetalTraverser::visitUnary):
        (GenMetalTraverser::visitAggregate):
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::initializeFeatures):
        * src/libANGLE/renderer/metal/ProgramMtl.h:
        (rx::ProgramMtl::getTranslatedShaderInfo const):
        * src/libANGLE/renderer/metal/ProgramMtl.mm:
        * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.h:
        * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
        (rx::mtl::GlslangGetMSL):
        * src/libANGLE/renderer/metal/mtl_render_utils.h:
        * src/libANGLE/renderer/metal/mtl_render_utils.mm:
        (rx::mtl::TransformFeedbackUtils::createMslXfbLibrary):
        (rx::mtl::TransformFeedbackUtils::getTransformFeedbackRenderPipeline):
        * src/libANGLE/renderer/metal/mtl_utils.h:
        * src/libANGLE/renderer/metal/mtl_utils.mm:
        (rx::mtl::CreateShaderLibrary):

2021-07-01  Ben Nham  <nham@apple.com>

        Unreviewed, reverting r279172.

        Broke WebGL context construction on some devices.

        Reverted changeset:

        "rAF driven WebGL submits excessive amount of GPU work when frames are slow"
        https://bugs.webkit.org/show_bug.cgi?id=227059
        https://commits.webkit.org/r279172

2021-07-01  Kyle Piddington  <kpiddington@apple.com>

        BabylonJS Under water demo is slower than it should be on Intel
        https://bugs.webkit.org/show_bug.cgi?id=227226

        Remove fastMath restriction on Intel
        Removing fastmath in all scenarios leads to unacceptable performance on integrated graphics
        Currently, webgl conformance tests and the Safari tests don't have any invariance tests that show invariance issues. deQP tests are similarly passing.
        In Metal-ANGLE, gl_position and gl_fragcoord are valid attributes to be marked as invariant. All others will be ignored.

        Reviewed by Kenneth Russell.

        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GenMetalTraverser::emitPostQualifier):
        * src/libANGLE/renderer/metal/mtl_utils.mm:
        (rx::mtl::CreateShaderLibrary):

2021-06-30  Kimmo Kinnunen  <kkinnunen@apple.com>

        ASSERT in  webgl/1.0.x/conformance/glsl/misc/uninitialized-local-global-variables.html   IdGen ASSERT(*base != '_');
        https://bugs.webkit.org/show_bug.cgi?id=227482

        Reviewed by Kenneth Russell.

        Give unnamed structs normal "_<number>" name.
        The original code thought it gave "ANGLE__unnamed<number>", but in reality it
        gave "__unnamed<number>".
        Since other constructs already create names of form "_<number>", it is unwarranted to
        special case this particular case to give "_unnamed<number>" or "ANGLE_unnamed<number" or
        "ANGLE_<number>".

        * src/compiler/translator/TranslatorMetalDirect/SeparateCompoundStructDeclarations.cpp:
        * src/tests/compiler_tests/MSLOutput_test.cpp:
        (TEST_F):

2021-06-29  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal primitive restart range computation could index with size_t
        https://bugs.webkit.org/show_bug.cgi?id=227449

        Reviewed by Kenneth Russell.

        Make the `calculateRestartRanges()` a bit simpler in order
        for it to be easier to understand.

        * src/libANGLE/renderer/metal/BufferMtl.h:
        (rx::IndexRange::IndexRange):
        Add documentation what the mtl::IndexRange is.
        Add constructor so that `std::vector::emplace_back()` works.

        * src/libANGLE/renderer/metal/BufferMtl.mm:
        (rx::calculateRestartRanges):
        Index with size_t to make it simpler to understand if the index
        overflows or not.
        Use reinterpret_cast in order to not accidentally cast away
        const from `mtl::BufferRef::mapReadOnly()`.
        Skip the non-marker elements with `continue` to avoid deep nesting.
        Give a name to the restart range marker value.
        Remove intermediate variable `value = bufferData[i]` as it is never
        used more than once. This simplifies the code as the do-while loop
        does not need to check the if condition as the loop ending condition
        already checks.
        Make the array a returned result instead of out variable.

        (rx::BufferMtl::getRestartIndices):

2021-06-29  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal primitive restart range computation should not be done unless primitive restart is enabled
        https://bugs.webkit.org/show_bug.cgi?id=227452

        Reviewed by Kenneth Russell.

        Primitive restart needs to scan the whole index buffer for values.
        This should not be done unless needed.

        * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
        (rx::VertexArrayMtl::getDrawIndices):
        First check for primitive restart enabledness.
        Compute the primitive restart values after this.
        The algoritm should succeed when the count of primitive
        restart ranges is zero, and it does not do much of work.
        Use the restart range vector as reference, so that no copy
        would be done.
        Add spaces the if statements, comments and references.
        Move the else arm of the if statement with return statement
        to body of the function to reduce nesting.

2021-06-28  Kimmo Kinnunen  <kkinnunen@apple.com>

        iPhone 6S - iOS 15.0 - unable to retrieve WebGL2 context
        https://bugs.webkit.org/show_bug.cgi?id=226975
        rdar://78966563

        Reviewed by Kenneth Russell.

        Limit the OpenGL ES 3.0 contexts to iOS GPU Family 3, not
        4.

        The limit was most likely added to guard sample_compare
        lod_options properties .lod and .gradient. However, these
        are always supported on iOS.

        Currently there is already ES 3.0 features implemented
        in ANGLE that are guarded by iOS GPU Family 3.

        Fixes WebGL 2.0 to work on iPhone6s and similar
        devices  (A9, A9X).

        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::getMaxSupportedESVersion const):

2021-06-28  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal index buffer left mapped when building primitive restart ranges
        https://bugs.webkit.org/show_bug.cgi?id=227371

        Reviewed by Kenneth Russell.

        * src/libANGLE/renderer/metal/BufferMtl.mm:
        (rx::calculateRestartRanges):
        Add unmap.

2021-06-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] WebGL content is unable to use the discrete GPU
        https://bugs.webkit.org/show_bug.cgi?id=227408
        <rdar://problem/79216506>

        Reviewed by Dean Jackson.

        There appears to be a key collision:

        Source/ThirdParty/ANGLE/include/platform/PlatformMethods.h:#define EGL_PLATFORM_ANGLE_PLATFORM_METHODS_ANGLEX 0x3482
        Source/ThirdParty/ANGLE/include/EGL/eglext_angle.h:#define EGL_POWER_PREFERENCE_ANGLE 0x3482

        Both these keys seem to be accepted by EGL_GetPlatformDisplayEXT().

        This patch just changes the value of one of them to a value I picked out of a hat, just so they don't conflict.
        We should work with upstream to either:
        A) Find a better solution (maybe disambiguate these values based on which function is accepting them), or
        B) Make a robust way to make sure keys don't collide in the future.

        * include/platform/PlatformMethods.h:

2021-06-24  John Cunningham  <johncunningham@apple.com>

        [ANGLE Metal] - Set barriers on transform feedback buffers only up to the in use buffer count
        https://bugs.webkit.org/show_bug.cgi?id=227272
        <rdar://79587861>

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::onEndTransformFeedback):

2021-06-23  Kyle Piddington  <kpiddington@apple.com>

        Fix incorrect indexing / out of bounds access in getRestartIndices
        https://bugs.webkit.org/show_bug.cgi?id=227274
        <rdar://79244789>

        In the case where a restart index is present in the last element of an index array, we can accidently
        access out of bounds. Fix this by checking boundaries, and fixing other indexing errors

        Tests: Ran deqp/functional/gles3/primitiverestart suite. Passed 8 tests.

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/BufferMtl.mm:
        (rx::calculateRestartRanges):

2021-06-23  Kyle Piddington  <kpiddington@apple.com>

        Guard against compile failures of the default libraries
        https://bugs.webkit.org/show_bug.cgi?id=227239
        <rdar://79037623>

        Under certain events (High memory usage), the MTLCompilerService can fail when creating the default library.
        Guard against nil pipelines by failing GL calls instead, if this happens. While this can create rendering artifacts
        due to missing blits / conversions, this can at least avoid crashing the process.

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/mtl_render_utils.h:
        * src/libANGLE/renderer/metal/mtl_render_utils.mm:
        (rx::mtl::ClearUtils::setupClearWithDraw):
        (rx::mtl::ClearUtils::clearWithDraw):
        (rx::mtl::ColorBlitUtils::setupColorBlitWithDraw):
        (rx::mtl::ColorBlitUtils::blitColorWithDraw):
        (rx::mtl::DepthStencilBlitUtils::setupDepthStencilBlitWithDraw):
        (rx::mtl::DepthStencilBlitUtils::blitDepthStencilWithDraw):
        (rx::mtl::VertexFormatConversionUtils::setupCommonConvertVertexFormatToFloat):
        (rx::mtl::VertexFormatConversionUtils::expandVertexFormatComponentsVS):
        (rx::mtl::VertexFormatConversionUtils::setupCommonExpandVertexFormatComponents):

2021-06-23  Kimmo Kinnunen  <kkinnunen@apple.com>

        rAF driven WebGL submits excessive amount of GPU work when frames are slow
        https://bugs.webkit.org/show_bug.cgi?id=227059
        <rdar://problem/79385858>

        Reviewed by Kenneth Russell.

        Advertise GL_ARB_sync for the Metal backend.
        Since GL_ARB_sync is core in OpenGL ES 3.0 and the Metal backend advertises OpenGL ES 3.0,
        the API must be working already.

        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::initializeExtensions const):

2021-06-22  Dean Jackson  <dino@apple.com>

        [ANGLE] Support importing external MTLTextures
        https://bugs.webkit.org/show_bug.cgi?id=226690

        Reviewed by Tim Horton.

        Support MTLTextures as GL textures.
        Merge https://chromium-review.googlesource.com/c/angle/angle/+/2820178

        * ANGLE.xcodeproj/project.pbxproj:
        * extensions/EGL_ANGLE_metal_texture_client_buffer.txt: Added.
        * include/EGL/eglext_angle.h:
        * src/common/utilities.cpp:
        (egl::IsExternalImageTarget):
        * src/libANGLE/Caps.cpp:
        (egl::DisplayExtensions::getStrings const):
        * src/libANGLE/Caps.h:
        * src/libANGLE/renderer/metal/BUILD.gn:
        * src/libANGLE/renderer/metal/DisplayMtl.h:
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::createImage):
        (rx::DisplayMtl::createExternalImageSibling):
        (rx::DisplayMtl::generateExtensions const):
        (rx::DisplayMtl::validateImageClientBuffer const):
        (rx::DisplayMtl::initializeExtensions const):
        * src/libANGLE/renderer/metal/ImageMtl.h: Added.
        (rx::TextureImageSiblingMtl::getTexture const):
        (rx::TextureImageSiblingMtl::getFormatMtl const):
        (rx::ImageMtl::getTexture const):
        (rx::ImageMtl::getImageTextureType const):
        (rx::ImageMtl::getImageLevel const):
        (rx::ImageMtl::getImageLayer const):
        * src/libANGLE/renderer/metal/ImageMtl.mm: Added.
        (rx::TextureImageSiblingMtl::TextureImageSiblingMtl):
        (rx::TextureImageSiblingMtl::~TextureImageSiblingMtl):
        (rx::TextureImageSiblingMtl::ValidateClientBuffer):
        (rx::TextureImageSiblingMtl::initialize):
        (rx::TextureImageSiblingMtl::initImpl):
        (rx::TextureImageSiblingMtl::onDestroy):
        (rx::TextureImageSiblingMtl::getFormat const):
        (rx::TextureImageSiblingMtl::isRenderable const):
        (rx::TextureImageSiblingMtl::isTexturable const):
        (rx::TextureImageSiblingMtl::getSize const):
        (rx::TextureImageSiblingMtl::getSamples const):
        (rx::ImageMtl::ImageMtl):
        (rx::ImageMtl::~ImageMtl):
        (rx::ImageMtl::onDestroy):
        (rx::ImageMtl::initialize):
        (rx::ImageMtl::orphan):
        * src/libANGLE/renderer/metal/RenderBufferMtl.mm:
        (rx::RenderbufferMtl::setStorageEGLImageTarget):
        * src/libANGLE/renderer/metal/TextureMtl.mm:
        (rx::TextureMtl::setEGLImageTarget):
        * src/libANGLE/renderer/metal/gen_mtl_format_table.py:
        (gen_image_map_switch_mac_case.gen_format_assign_code):
        (gen_image_mtl_to_angle_switch_string):
        (main):
        * src/libANGLE/renderer/metal/mtl_common.h:
        * src/libANGLE/renderer/metal/mtl_format_table_autogen.mm:
        (rx::mtl::Format::MetalToAngleFormatID):
        * src/libANGLE/renderer/metal/mtl_format_utils.h:
        * src/libANGLE/validationEGL.cpp:
        (egl::ValidateCreateImage):
        * src/tests/BUILD.gn:
        * src/tests/gl_tests/ImageTest.cpp:
        (angle::TEST_P):
        * src/tests/gl_tests/ImageTestMetal.mm: Added.
        (angle::ScopeMetalTextureRef::ScopeMetalTextureRef):
        (angle::ScopeMetalTextureRef::~ScopeMetalTextureRef):
        (angle::ScopeMetalTextureRef::get const):
        (angle::ScopeMetalTextureRef::operator id<MTLTexture> const):
        (angle::ScopeMetalTextureRef::operator=):
        (angle::ScopeMetalTextureRef::release):
        (angle::CreateMetalTexture2D):
        (angle::ImageTestMetal::ImageTestMetal):
        (angle::ImageTestMetal::getMtlDevice):
        (angle::ImageTestMetal::createMtlTexture2D):
        (angle::ImageTestMetal::verifyResultsTexture):
        (angle::ImageTestMetal::verifyResults2D):
        (angle::ImageTestMetal::reinterpretHelper):
        (angle::ImageTestMetal::hasImageNativeMetalTextureExt const):
        (angle::ImageTestMetal::hasOESExt const):
        (angle::ImageTestMetal::hasBaseExt const):
        (angle::ImageTestMetal::sourceMetalTarget2D_helper):
        (angle::TEST_P):

2021-06-17  Kyle Piddington  <kpiddington@apple.com>

        [Metal ANGLE] Shaders with reserved metal keywords do not translate, nor do shaders with struct and variable names that are the same except prefixed by an underscore
        https://bugs.webkit.org/show_bug.cgi?id=226660

        Fix keyword translation problem by correcting symbol space. This avoids renaming structs unnecessarily 

        Reviewed by Dean Jackson.

        * src/compiler/translator/TranslatorMetalDirect/RewriteKeywords.cpp:
        (sh::Rewriter::createRenamed):

2021-06-16  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal gl sync objects do not work in case of listener being needed
        https://bugs.webkit.org/show_bug.cgi?id=227024

        Reviewed by Per Arne Vollan.

        Add an assert to notice when MTLSharedEventListener instantiation
        fails. Without this, the fence implementation would not signal
        the completion until the timeout would pass.

        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::getOrCreateSharedEventListener):

2021-06-16  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal AutoObjCPtr == nullptr comparison is inverted
        https://bugs.webkit.org/show_bug.cgi?id=227026

        Reviewed by Anders Carlsson.

        Make it more correct and add != nullptr variant for
        consistency.

        Use std::nullptr_t instead of const std::nullptr_t &
        in all functions for consistency.

        * src/libANGLE/renderer/metal/mtl_common.h:
        (rx::mtl::AutoObjCPtr::operator== const):
        (rx::mtl::AutoObjCPtr::operator!= const):

2021-06-15  Kyle Piddington  <kpiddington@apple.com>

        Tensorflow.js Broken in Safari 15
        https://bugs.webkit.org/show_bug.cgi?id=226953

        Tensorflow shaders use a 'NAN' uniform. This is a reserved keyword
        in metal. Add NAN to the reserved list.

        'inf' constants need to be replaced with INFINITY, much like nan constants need to be replaced with NAN
        Reviewed by Kenneth Russell.

        * src/compiler/translator/TranslatorMetalDirect.cpp:
        (sh::GetMslKeywords):

2021-06-15  Alex Christensen  <achristensen@webkit.org>

        Fix typo in r276318
        https://bugs.webkit.org/show_bug.cgi?id=227041
        <rdar://76284889>

        Reviewed by Chris Dumez.

        @ uses the string @(DYLIB_INSTALL_NAME_BASE)
        $ uses the value of the environment variable.
        This turns out to be an important difference.

        * Configurations/ANGLE-dynamic.xcconfig:

2021-06-11  Eleni Maria Stea  <estea@igalia.com>

        ANGLE EGL and GLES libraries should link with lib dl.
        https://bugs.webkit.org/show_bug.cgi?id=226920

        Reviewed by Kenneth Russell.

        GLES and EGL that are generated from ANGLE should link
        with libdl because they use dlsym and dlopen. Also,
        with the updated CMakeLists.txt we can safely link with libEGL
        when USE_ANGLE_WEBGL is set because the symbols of EGL are now
        found.

        * CMakeLists.txt:

2021-06-10  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make ANGLE library types configurable
        https://bugs.webkit.org/show_bug.cgi?id=226840

        Reviewed by Kenneth Russell.

        The type for ANGLE's libraries was being hard coded. Now the libraries can be set by
        specifying the _LIBRARY_TYPE which defaults to STATIC. Windows platforms override this
        and use SHARED libraries.

        Additionally make compiling ANGLE's EGL library contingent on USE_ANGLE_EGL being enabled
        since its not used otherwise.

        * CMakeLists.txt:
        * PlatformFTW.cmake:
        * PlatformWin.cmake:

2021-06-02  Kyle Piddington  <kpiddington@apple.com>

        Add 'mix' override with bool-vectors to MSL translator
        https://bugs.webkit.org/show_bug.cgi?id=226366

        Reviewed by Dean Jackson.

        Add in 'mix' overrides, and logic for selecting mix with bool when necessary.

        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GetOperatorString):
        (GenMetalTraverser::visitAggregate):
        * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp:

2021-06-01  Kyle Piddington  <kpiddington@apple.com>

        [Metal ANGLE] transformFeedback samples on webglsamples.org do not render correctly
        https://bugs.webkit.org/show_bug.cgi?id=226285
        <rdar://78524773>

        Reviewed by Dean Jackson.

        Metal ANGLE does not render these samples correctly, for a number of reasons. 
        For transform_feedback_interleaved and seperated, We need to start a new renderEncoder to get the results from the transform feedback. 
        for transform_feedback-seperated_2, we need to invalidate the current render pass descriptor in order to switch to the rasterizer-enabled version of the shader.
        Testing: Ran all transform feedback tests from deqp suite to ensure no regressions are present.

        * src/libANGLE/renderer/metal/ContextMtl.h:
        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::drawTriFanArraysWithBaseVertex):
        (rx::ContextMtl::drawArraysImpl):
        (rx::ContextMtl::drawTriFanElements):
        (rx::ContextMtl::prepareForTransformFeedbackPassTwo):
        (rx::ContextMtl::drawLineLoopElements):
        (rx::ContextMtl::drawElementsImpl):
        (rx::ContextMtl::onEndTransformFeedback):
        * src/libANGLE/renderer/metal/TransformFeedbackMtl.mm:
        (rx::TransformFeedbackMtl::end):

2021-06-01  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal translator pre-rotation code is unused and it asserts when used
        https://bugs.webkit.org/show_bug.cgi?id=226262

        Reviewed by Dean Jackson.

        Remove the pre-rotation code. It is Android specific and most likely it is useful
        only when ANGLE is used as the drawing mechanism for the primary app window picture.
        Thus most likely it is not useful in WebKit on Cocoa platforms where the window
        server does the compositing.

        * src/compiler/translator/TranslatorMetalDirect.cpp:
        (sh::TranslatorMetalDirect::translateImpl):
        * src/compiler/translator/TranslatorMetalDirect.h:
        * src/libANGLE/renderer/metal/ContextMtl.h:
        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::handleDirtyDriverUniforms):

2021-05-31  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cherry-pick ANGLE: Add array bounds checks for WebGL shaders
        https://bugs.webkit.org/show_bug.cgi?id=226397

        Reviewed by Dean Jackson.

        Cherry-pick ANGLE commit b0d39ba2aba218402ff2f32f6e16f18cf4975ff4
        At the moment does not affect any WebKit client.
        Makes the code consistent with OpenGL.
        Makes it easier to understand same change in Metal backend.

        Upstream description:
        Add array bounds checks for WebGL shaders
        WebGL shaders may contain OOB array accesses which in turn
        cause undefined behavior, which may result in security
        issues. This was detected as an UNKNOWN READ by UBSAN while
        testing with SwANGLE.

        * src/libANGLE/renderer/vulkan/ShaderVk.cpp:
        (rx::ShaderVk::compile):

2021-05-28  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal translator should always collect variables
        https://bugs.webkit.org/show_bug.cgi?id=226261

        Reviewed by Dean Jackson.

        Always collect the variables when translating GLSL to Metal.
        This way tests that invoke translation without SH_VARIABLES still
        work.

        * src/compiler/translator/TranslatorMetalDirect.cpp:
        (sh::TranslatorMetalDirect::translateImpl):
        * src/compiler/translator/TranslatorMetalDirect.h:

2021-05-27  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE could be compiled with "aggressive uninitialised variable" setting
        https://bugs.webkit.org/show_bug.cgi?id=226260

        Reviewed by Alexey Proskuryakov.

        Turn on compiler flag to warn about uninitialized variables that might be
        conditionally uninitialized. This is the same flag as upstream ANGLE uses.
        Fix a spurious warning produced by this flag.
        This helps in scenarios where custom targets compile ANGLE sources and
        this flag set, such as tests.

        * Configurations/Base.xcconfig:
        * src/compiler/translator/TranslatorMetalDirect/FixTypeConstructors.cpp:

2021-05-27  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cherry-pick ANGLE: D3D11: Skip blits if there is no intersection of dest areas
        https://bugs.webkit.org/show_bug.cgi?id=225190
        <rdar://77084155>

        Reviewed by David Kilzer.

        Cherry-pick ANGLE commit b574643ef28c92fcea5122dd7a72acb42a514eed
        Fixes a security issue on D3D11.
        Potential a correctness issue on some OpenGL drivers.
        No effect on Metal, but the nodiscard part is still useful.

        Upstream description:
        D3D11: Skip blits if there is no intersection of dest areas

        Blit11 would clip the destination rectangle with the destination size
        but ignore the result. gl::ClipRectangle returns false when the
        rectangles do not intersect at all, indicating the blit can be skipped.

        This could lead to an out-of-bounds write to the GPU memory for the
        destination texture.

        Mark ClipRectangle as nodiscard to prevent future issues.
        * src/libANGLE/angletypes.h:
        * src/libANGLE/renderer/d3d/d3d11/Blit11.cpp:
        * src/libANGLE/renderer/gl/FramebufferGL.cpp:
        (rx::FramebufferGL::clipSrcRegion):
        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::updateScissor):
        * src/libANGLE/renderer/vulkan/ContextVk.cpp:
        (rx::ContextVk::updateScissor):
        * src/tests/gl_tests/BlitFramebufferANGLETest.cpp:
        (TEST_P):

2021-05-26  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Support USE_ANGLE_EGL on additional platforms
        https://bugs.webkit.org/show_bug.cgi?id=224888
        <rdar://problem/77280211>

        Reviewed by Ken Russell.

        Support ANGLE using the OpenGL backend for GTK. Support ANGLE using Metal
        backend for Mac. Add the generated sources for these two backends.

        Clean up the CMake and introduce additional targets.

        * CMakeLists.txt:
        * Compiler.cmake:
        * GL.cmake: Added.
        * Metal.cmake: Added.
        * PlatformFTW.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWin.cmake:

2021-05-20  Kyle Piddington  <kpiddington@apple.com>

        [Metal ANGLE] Handle NAN constant folding correctly
        https://bugs.webkit.org/show_bug.cgi?id=226052

        NAN values (0.0f/0.0f) were being handled incorrectly. MSL was being emitted as lowercase 'nanf', instead of NAN
        Check for an unlikely NAN case, and emit correct MSL

        Reviewed by Dean Jackson.

        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GenMetalTraverser::emitSingleConstant):

2021-05-20  Kyle Piddington  <kpiddington@apple.com>

        Red flashes zooming on Google Maps when using external monitor on multi-gpu systems
        https://bugs.webkit.org/show_bug.cgi?id=225956
        <rdar://77024179>        

        Reviewed by Dean Jackson.
        IOSurface presentation swaps require that a command buffer is queued for execution before
        swapping. Otherwise, we're liable to drop frames, or present old IOSurface buffers. 
        Ensure work flushed via glFlush completes before presenation by waiting for it to enqueue before 
        swapping a surface.

        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::flush):
        * src/libANGLE/renderer/metal/mtl_command_buffer.h:
        * src/libANGLE/renderer/metal/mtl_command_buffer.mm:
        (rx::mtl::CommandBuffer::waitUntilScheduled):
        (rx::mtl::CommandBuffer::commitImpl):

2021-05-19  Kyle Piddington  <kpiddington@apple.com>

        ASSERT(!toType.isArray()) failure in sh::CoerceSimple due to vector array dereference
        https://bugs.webkit.org/show_bug.cgi?id=225864
        <rdar://77968214> 

        Reviewed by Dean Jackson.

        Fixed program translation error, additional issues with transform feedback shaders

        * src/compiler/translator/TranslatorMetalDirect/AddExplicitTypeCasts.cpp:
        * src/libANGLE/renderer/metal/ProgramMtl.mm:
        (rx::ProgramMtl::reset):

2021-05-19  Kyle Piddington  <kpiddington@apple.com>

        [ANGLE Metal] Support Provoking Vertex Emulation, Pass Fragment Output test suite.
        https://bugs.webkit.org/show_bug.cgi?id=225842

        Reviewed by Dean Jackson.

        Add support for provoking vertex emulation. Metal only supports using the first vertex
        of a primitive as a provoking vertex. To adapt, rewrite the index buffer on the fly when provoking vertex support is required. This method does not rewrite any primitives that would be 
        culled by primitive restart, such as simple triangles and lines. Triangle and line strips are re-written to line and triangle buffers. Tri fans and line loops are not supported for this
        rewrite as of this patch.

        * ANGLE.xcodeproj/project.pbxproj:
        * src/libANGLE/renderer/metal/ContextMtl.h:
        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::ContextMtl):
        (rx::ContextMtl::initialize):
        (rx::ContextMtl::onDestroy):
        (rx::ContextMtl::drawElementsImpl):
        (rx::ContextMtl::flushCommandBufer):
        (rx::ContextMtl::present):
        (rx::ContextMtl::ensureCommandBufferReady):
        (rx::ContextMtl::requiresIndexRewrite):
        * src/libANGLE/renderer/metal/ProgramMtl.h:
        * src/libANGLE/renderer/metal/ProgramMtl.mm:
        (rx::ProgramMtl::ProgramMtl):
        (rx::ProgramMtl::programHasFlatAttributes const):
        (rx::ProgramMtl::linkImpl):
        * src/libANGLE/renderer/metal/ProvokingVertexHelper.h: Added.
        * src/libANGLE/renderer/metal/ProvokingVertexHelper.mm: Added.
        (rx::primCountForIndexCount):
        (rx::ProvokingVertexHelper::ProvokingVertexHelper):
        (rx::ProvokingVertexHelper::onDestroy):
        (rx::ProvokingVertexHelper::commitPreconditionCommandBuffer):
        (rx::ProvokingVertexHelper::getComputeCommandEncoder):
        (rx::ProvokingVertexHelper::ensureCommandBufferReady):
        (rx::buildIndexBufferKey):
        (rx::ProvokingVertexHelper::getSpecializedShader):
        (rx::ProvokingVertexHelper::hasSpecializedShader):
        (rx::ProvokingVertexHelper::prepareCommandEncoderForDescriptor):
        (rx::ProvokingVertexHelper::preconditionIndexBuffer):
        * src/libANGLE/renderer/metal/mtl_state_cache.h:
        (std::hash<rx::mtl::ProvokingVertexComputePipelineDesc>::operator() const):
        * src/libANGLE/renderer/metal/mtl_state_cache.mm:
        (rx::mtl::ProvokingVertexComputePipelineDesc::ProvokingVertexComputePipelineDesc):
        (rx::mtl::ProvokingVertexComputePipelineDesc::operator=):
        (rx::mtl::ProvokingVertexComputePipelineDesc::operator== const):
        (rx::mtl::ProvokingVertexComputePipelineDesc::operator!= const):
        (rx::mtl::ProvokingVertexComputePipelineDesc::hash const):
        (rx::mtl::ProvokingVertexComputePipelineCache::ProvokingVertexComputePipelineCache):
        (rx::mtl::ProvokingVertexComputePipelineCache::setComputeShader):
        (rx::mtl::ProvokingVertexComputePipelineCache::clearPipelineStates):
        (rx::mtl::ProvokingVertexComputePipelineCache::clear):
        (rx::mtl::ProvokingVertexComputePipelineCache::getComputePipelineState):
        (rx::mtl::ProvokingVertexComputePipelineCache::insertComputePipelineState):
        (rx::mtl::ProvokingVertexComputePipelineCache::recreatePipelineStates):
        (rx::mtl::ProvokingVertexComputePipelineCache::createComputePipelineState):
        (rx::mtl::ProvokingVertexComputePipelineCache::~ProvokingVertexComputePipelineCache):
        * src/libANGLE/renderer/metal/mtl_utils.h:
        * src/libANGLE/renderer/metal/mtl_utils.mm:
        (rx::mtl::CreateMslShader):
        * src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc:
        * src/libANGLE/renderer/metal/shaders/rewrite_indices.metal: Added.
        * src/libANGLE/renderer/metal/shaders/rewrite_indices_shared.h: Added.

2021-05-18  Alex Christensen  <achristensen@webkit.org>

        Stop compiling ANGLE metal files twice
        https://bugs.webkit.org/show_bug.cgi?id=225919
        <rdar://78013511>

        Reviewed by Dean Jackson.

        ANGLE currently generates an unused default.metallib that conflicts with other default.metallibs being built.
        Since it is unused, remove it.
        What we currently do is put all the source bytes into gDefaultMetallibSrc and compile it at runtime.
        This could be optimized to do it at compile time and use newLibraryWithData instead of newLibraryWithSource,
        but that should be done separately.

        * ANGLE.xcodeproj/project.pbxproj:

2021-05-12  Kyle Piddington  <kpiddington@apple.com>

        [Angle METAL] Remove thread qualifiers and pass-by-reference qualifiers for cast functions
        https://bugs.webkit.org/show_bug.cgi?id=225702
        <rdar://76799461>

        Cast functions fail to compile when casting from user uniforms. Update cast functions to remove pass-by-reference
        qualifiers. 

        Reviewed by Dean Jackson.

        * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp:

2021-05-08  Basuke Suzuki  <basuke.suzuki@sony.com>

        [WinCairo] Remove linker warning on ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=225501

        Reviewed by Darin Adler.

        libANGLE is statically linked to libGLESv2.dll so that __declspec(dllimport) is not required here.

        * include/platform/PlatformMethods.h:

2021-05-06  Kyle Piddington  <kpiddington@apple.com>

        [Metal ANGLE] Only clear dirty state bits after all state has been successfully set
        https://bugs.webkit.org/show_bug.cgi?id=225468
        <rdar://77066752>

        When running in release, if any ANGLE calls fail, we eventually return to this part of the code.
        We can be left with an incomplete state, where we have an incomplete program or attachment, 
        but a 'clean' state. This can lead to errors such as setting nil render pipeline states, leading to
        crashes.

        To mitigate this, hold off on setting state bits until we've completly set up a program.

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::setupDraw):
        * src/libANGLE/renderer/metal/ProgramMtl.mm:

2021-05-03  Kyle Piddington  <kpiddington@apple.com>

        [Metal ANGLE]: Fix conversions tests and remove failing test expectations
        https://bugs.webkit.org/show_bug.cgi?id=225261
        <rdar://77349615>
                  
        bool conversion workaround was being applied to all shaders. Correct shader translation to generate
        better conversion code on platforms that don't need a workaround. 

        Conversions for basic types like vec2, ivec2, uvec2 were only using the first components when workaround
        was active. Correct swizzle logic to get all components when doing a conversion.

        Reviewed by Dean Jackson.

        * src/compiler/translator/TranslatorMetalDirect/AddExplicitTypeCasts.cpp:
        * src/compiler/translator/TranslatorMetalDirect/AstHelpers.cpp:
        (sh::CoerceSimple):
        * src/compiler/translator/TranslatorMetalDirect/AstHelpers.h:

2021-04-30  Kyle Piddington  <kpiddington@apple.com>

        [Metal ANGLE]: fix webgl/2.0.0/deqp/functional/gles3/negativebufferapi 
        https://bugs.webkit.org/show_bug.cgi?id=225222
        <rdar://77349908>

        Arbitrary alignments are not allowed in Metal. Update UBO alignment to 
        a platform-dependant offset to match specifications.
        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::ensureCapsInitialized const):

2021-04-29  Kyle Piddington  <kpiddington@apple.com>

        Metal-ANGLE: Shared memory texture tests failing in iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=222685
        <rdar://75001722>

        Using replaceRegion to perform texture uploads on simulator causes issues on some workflows.
        As a workaround, use a GPU-driven upload instead of a CPU driven upload. 
        Reviewed by Kenneth Russell.

        * src/libANGLE/renderer/metal/TextureMtl.mm:

2021-04-29  Kyle Piddington  <kpiddington@apple.com>

        [ANGLE-Metal] Fix 17 textureshadow tests
        https://bugs.webkit.org/show_bug.cgi?id=224965
        <rdar://77053085> 

        Depth24Stencil8 copies were being incorrectly managed when dealing with D24S8 emulation.
        Fix conversion functions 

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/mtl_format_utils.h:
        * src/libANGLE/renderer/metal/mtl_format_utils.mm:
        (rx::mtl::priv::OffsetDataPointer):
        (rx::mtl::LoadS8D24S8ToD32FX24S8):
        (rx::mtl::DEPTH24_STENCIL8_to_D32_FLOAT_X24S8_UINT):
        (rx::mtl::GetLoadFunctionsMap):
        (rx::mtl::FormatTable::initialize):
        (): Deleted.

2021-04-28  Alex Christensen  <achristensen@webkit.org>

        Stop building libANGLE.a
        https://bugs.webkit.org/show_bug.cgi?id=225162
        <rdar://problem/57349384>

        Reviewed by Alexey Proskuryakov.

        Now that everyone's linking against the dylib, we don't need to build the static library any more.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE-dynamic.xcconfig:
        * src/empty.cpp: Removed.

2021-04-28  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE should be compiled with thread-safe statics
        https://bugs.webkit.org/show_bug.cgi?id=224854

        Reviewed by Kenneth Russell.

        Compile ANGLE with normal thread-safe c++ local statics.
        No known threading failures. Based on ad-hoc risk vs benefit
        evaluation of today and after future merges, it appears
        better to err in the side of caution.

        * Configurations/Base.xcconfig:

2021-04-26  Alex Christensen  <achristensen@webkit.org>

        Update Mac-specific CMake files
        https://bugs.webkit.org/show_bug.cgi?id=225064

        Rubber-stamped by Tim Horton.

        * PlatformMac.cmake:

2021-04-25  Kyle Piddington  <kpiddington@apple.com>

        [Metal ANGLE] support primitive restart behavior with simple data types
        https://bugs.webkit.org/show_bug.cgi?id=225011

        Primitive restart behavior for simple data types is not defined in Metal. Add a pre-draw pass to 
        create a set of restart indices, rather than re-write the index buffer. This pass avoids 
        storing more copies of the index buffer: instead, we cache the location of restart indices, and
        use them to build draw lists.
 
        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/BufferMtl.h:
        * src/libANGLE/renderer/metal/BufferMtl.mm:
        (rx::IndexConversionBufferMtl::IndexConversionBufferMtl):
        (rx::BufferMtl::markConversionBuffersDirty):
        (rx::calculateRestartRanges):
        (rx::BufferMtl::getRestartIndices):
        * src/libANGLE/renderer/metal/ContextMtl.h:
        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::drawLineLoopElements):
        (rx::ContextMtl::drawElementsImpl):
        (rx::ContextMtl::drawElementsSimpleTypesPrimitiveRestart): Deleted.
        * src/libANGLE/renderer/metal/VertexArrayMtl.h:
        * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
        (rx::VertexArrayMtl::getIndexBuffer):
        (rx::VertexArrayMtl::getDrawIndices):
        (rx::VertexArrayMtl::convertIndexBuffer):
        (rx::VertexArrayMtl::streamIndexBufferFromClient):

2021-04-25  John Cunningham  <johncunningham@apple.com>

        [Metal ANGLE] Temporarily remove AST validation even for debug builds
        https://bugs.webkit.org/show_bug.cgi?id=224991
        rdar://76299178
 
        Reviewed by Kenneth Russell.

        * src/libANGLE/renderer/metal/ShaderMtl.mm:
        (rx::ShaderMtl::compileImplMtl):

2021-04-25  Kyle Piddington  <kpiddington@apple.com>

        [Metal ANGLE] Select proper IOSurface backing format for WebGL environment
        https://bugs.webkit.org/show_bug.cgi?id=224948
        <rdar://76284889>

        Depending on the architecture, WebCore expects different 
        IOSurface texture targets for the main buffer. When running catalyst on 
        Arm64 devices, Metal-ANGLE needs to select the TEXTURE_2D texture target for our
        IOSurface/Pbuffer bind point, rather than TEXTURE_RECTANGLE.

	Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/DisplayMtl.h:
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::needsEAGLOnMac):
        (rx::DisplayMtl::EGLDrawingBufferTextureTarget):
        (rx::DisplayMtl::generateConfigs):

2021-04-23  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r276190.

        broke a test internally.

        Reverted changeset:

        "Metal-ANGLE: Shared memory texture tests failing in iOS
        Simulator"
        https://bugs.webkit.org/show_bug.cgi?id=222685
        https://commits.webkit.org/r276190

2021-04-22  Lauro Moura  <lmoura@igalia.com>

        [CMake][ANGLE] Silence -Wreturn-type for gcc and clang
        https://bugs.webkit.org/show_bug.cgi?id=224949

        Reviewed by Don Olmstead.

        Avoid "control reaches end of non-void function" in
        sh::TIntermRebuild::traverseChildren(...)

        * CMakeLists.txt:

2021-04-22  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE build fix after r276390

        Fix namespacing issues in nullptr_t invocations.

        * src/compiler/translator/tree_util/IntermRebuild.cpp:
        (sh::TIntermRebuild::BaseResult::BaseResult):
        (sh::PreResult::PreResult):
        (sh::PostResult::PostResult):
        * src/compiler/translator/tree_util/IntermRebuild.h:

2021-04-21  Don Olmstead  <don.olmstead@sony.com>

        [Python 3] Update gni-to-cmake.py
        https://bugs.webkit.org/show_bug.cgi?id=224880

        Reviewed by Kenneth Russell.

        Update gni-to-cmake.py to run on Python 3. Added ArgumentParser support to be able to run
        the script on Windows since the script assumed it would be called through a UNIX style
        shell.

        Ran the .gni files through the converter to verify output. It appears that the
        Compiler.cmake file wasn't generated in the last update to ANGLE so it has many changes.

        * Compiler.cmake:
        * D3D.cmake:
        * gni-to-cmake.py:

2021-04-21  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add OpenGLES2 targets
        https://bugs.webkit.org/show_bug.cgi?id=224786

        Reviewed by Adrian Perez de Castro.

        Add an ALIAS target mapping ANGLE's GLESv2 target to OpenGL::GLES if the target is not
        already present. This is the case for Windows which uses ANGLE as its sole OpenGL ES
        implementation.

        * CMakeLists.txt:

2021-04-20  Alex Christensen  <achristensen@webkit.org>

        MacCatalyst ANGLE is linked with @loader_path/../../../libANGLE-shared.dylib
        https://bugs.webkit.org/show_bug.cgi?id=224602

        Reviewed by Alexey Proskuryakov.

        * Configurations/ANGLE-dynamic.xcconfig:

2021-04-19  Alex Christensen  <achristensen@webkit.org>

        Build ANGLE dylib into WK_OVERRIDE_FRAMEWORKS_DIR in builds that use it
        https://bugs.webkit.org/show_bug.cgi?id=224785
        <rdar://76641662>

        Reviewed by Alexey Proskuryakov.

        * Configurations/ANGLE-dynamic.xcconfig:

2021-04-16  Kyle Piddington  <kpiddington@apple.com>

        Metal-ANGLE: Shared memory texture tests failing in iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=222685

        Reviewed by Dean Jackson.

        Simulator-only path drives filling textures via Blit encoders instead of mapped memory.
        This workaround fixes dropped texture writes when using replaceRegion

        * src/libANGLE/renderer/metal/TextureMtl.mm:
        * src/libANGLE/renderer/metal/mtl_utils.mm:
        (rx::mtl::InitializeTextureContents):

2021-04-15  Alex Christensen  <achristensen@webkit.org>

        Use kIOMainPortDefault where available
        https://bugs.webkit.org/show_bug.cgi?id=224632

        Reviewed by Alexey Proskuryakov.

        In ANGLE we don't include WTF headers, so we can't use the HAVE macro like we do elsewhere in WebKit,
        but this is pretty close.

        * src/gpu_info_util/SystemInfo_macos.mm:
        (angle::GetVendorIDFromMetalDeviceRegistryID):

2021-04-15  Alex Christensen  <achristensen@webkit.org>

        Add deprecation macros
        https://bugs.webkit.org/show_bug.cgi?id=224624

        * src/gpu_info_util/SystemInfo_macos.mm:
        (angle::GetVendorIDFromMetalDeviceRegistryID):

2021-04-12  Dean Jackson  <dino@apple.com>

        REGRESSION (Metal ANGLE): [Catalina] 6 consistent WebGL failures / timeouts
        https://bugs.webkit.org/show_bug.cgi?id=224016
        <rdar://problem/76070325>

        Patch by John Cunningham <johncunnigham@apple.com>
        Reviewed by Dean Jackson.

        Implement a workaround for Intel GPUs where we explicitly type cast floating
        point values to booleans. This is only needed for Catalina systems.

        * include/GLSLANG/ShaderLang.h:
        * include/platform/FeaturesMtl.h:
        * src/compiler/translator/TranslatorMetalDirect.cpp:
        (sh::TranslatorMetalDirect::translateImpl):
        * src/compiler/translator/TranslatorMetalDirect/AddExplicitTypeCasts.cpp:
        (sh::Rewriter::Rewriter):
        (sh::AddExplicitTypeCasts):
        * src/compiler/translator/TranslatorMetalDirect/AddExplicitTypeCasts.h:
        * src/compiler/translator/TranslatorMetalDirect/AstHelpers.cpp:
        (sh::SubVector):
        (sh::CoerceSimple):
        * src/compiler/translator/TranslatorMetalDirect/AstHelpers.h:
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::initializeFeatures):
        * src/libANGLE/renderer/metal/ShaderMtl.mm:
        (rx::ShaderMtl::compile):

2021-04-12  Kyle Piddington  <kpiddington@apple.com>

        Crash in webgl/2.0.y/conformance/glsl/misc/uninitialized-local-global-variables.html ANGLE+METAL
        https://bugs.webkit.org/show_bug.cgi?id=223923
	
        Anonymous structs require a name in MSL, add a default name ANGLE__unnamed$id to any structs.
        Also add a unit test to ensure this works.
        Reviewed by Kenneth Russell.

        * src/compiler/translator/TranslatorMetalDirect.cpp:
        (sh::TranslatorMetalDirect::translateImpl):
        * src/compiler/translator/TranslatorMetalDirect/SeparateCompoundStructDeclarations.cpp:
        (sh::Separator::Separator):
        (sh::SeparateCompoundStructDeclarations):
        * src/compiler/translator/TranslatorMetalDirect/SeparateCompoundStructDeclarations.h:
        * src/tests/BUILD.gn:
        * src/tests/angle_unittests.gni:
        * src/tests/compiler_tests/MSLOutput_Test.cpp:

2021-04-08  Kyle Piddington  <kpiddington@apple.com>

        [Metal-ANGLE] Support GPU power preferences, select low-power GPU by default.
        Respond to GPU power preference flags, expose extension, and avoid creating a high-powered GPU by default.
        https://bugs.webkit.org/show_bug.cgi?id=224337

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/DisplayMtl.h:
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::initializeImpl):
        (rx::DisplayMtl::getMetalDeviceMatchingAttribute):
        (rx::DisplayMtl::generateExtensions const):

2021-04-07  Kyle Piddington  <kpiddington@apple.com>

        Crash in conformance2/textures/misc/compressed-tex-image.html with ANGLE+METAL
        Handle uploading a compressed texture with a non-aligned offset. Path requires that we still fill the entire level of a 
        compressed texture.
        https://bugs.webkit.org/show_bug.cgi?id=223925

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/TextureMtl.mm:
        (rx::TextureMtl::convertAndSetPerSliceSubImage):

2021-04-07  John Cunningham  <johncunnigham@apple.com>

        [METAL ANGLE] Interface block declerations need to have children marked as struct accesses. Add implicit backing textures for multisample render targets
        https://bugs.webkit.org/show_bug.cgi?id=224265

        Reviewed by Dean Jackson.

        * src/compiler/translator/TranslatorMetalDirect/ReduceInterfaceBlocks.cpp:
        * src/libANGLE/renderer/metal/FrameBufferMtl.h:
        * src/libANGLE/renderer/metal/FrameBufferMtl.mm:
        (rx::FramebufferMtl::setLoadStoreActionOnRenderPassFirstStart):
        (rx::FramebufferMtl::onStartedDrawingToFrameBuffer):
        * src/libANGLE/renderer/metal/RenderBufferMtl.mm:
        (rx::RenderbufferMtl::setStorageImpl):

2021-04-05  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=224084

        Reviewed by Tim Horton.

        * PlatformMac.cmake: Added.

2021-04-05  John Cunningham  <johncunnigham@apple.com>

        [METAL ANGLE] Stencil only formats being used as the depth attachment.
        https://bugs.webkit.org/show_bug.cgi?id=224183

        Reviewed by Jon Lee.

        * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp:
        * src/compiler/translator/TranslatorMetalDirect/RewriteOutArgs.cpp:
        (sh::Rewriter::argAlreadyProcessed):
        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::setupDraw):
        * src/libANGLE/renderer/metal/mtl_command_buffer.h:
        * src/libANGLE/renderer/metal/mtl_command_buffer.mm:
        (rx::mtl::RenderCommandEncoder::reset):
        (rx::mtl::RenderCommandEncoder::setRenderPipelineState):
        (rx::mtl::RenderCommandEncoder::draw):
        (rx::mtl::RenderCommandEncoder::drawInstanced):
        (rx::mtl::RenderCommandEncoder::drawIndexed):
        (rx::mtl::RenderCommandEncoder::drawIndexedInstanced):
        (rx::mtl::RenderCommandEncoder::drawIndexedInstancedBaseVertex):
        * src/libANGLE/renderer/metal/mtl_utils.mm:
        (rx::mtl::InitializeDepthStencilTextureContentsGPU):

2021-03-30  Kyle Piddington  <kpiddington@apple.com>

        Enable sample_compare operations in Metal ANGLE
        Sample_compare operations, and shadow sampling was accidently switched off when initially
        setting up ANGLE_Metal. Enabling shadow sampling fixes most of the 
        webgl/2.0.0/deqp/functional/gles3/textureshadow/ test suite, which is currently failing.

        https://bugs.webkit.org/show_bug.cgi?id=223833

        Reviewed by Jon Lee.

        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::initializeFeatures):

2021-03-26  Jessie Berlin  <jberlin@webkit.org>

        Update the BEFORE/SINCE, SYSTEM_VERSION_PREFIX, and MACOSX_DEPLOYMENT_TARGET flags
        https://bugs.webkit.org/show_bug.cgi?id=223779

        Reviewed by Tim Horton.

        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2021-03-25  Kyle Piddington  <kpiddington@apple.com>

        ANGLE Metal crash ASAN webgl/1.0.3/conformance/misc/object-deletion-behaviour.html
        https://bugs.webkit.org/show_bug.cgi?id=223739

        Reviewed by Dean Jackson.

        Previously, ANGLE would try to read color attachments off of the
        cached render targets. However, since validation happens before
        state sync, the cached render targets may be out of date.

        For non-surface backed render targets, we instead get a fresh copy
        of the render target when determening the native pixel format.

        * src/libANGLE/renderer/metal/FrameBufferMtl.h:
        * src/libANGLE/renderer/metal/FrameBufferMtl.mm:
        (rx::FramebufferMtl::getImplementationColorReadFormat const):
        (rx::FramebufferMtl::getColorReadRenderTargetNoCache const):


2021-03-25  Kyle Piddington  <kpiddington@apple.com>

        [Metal ANGLE] Add CPU mipmap generation for workaround on Intel devices.
        https://bugs.webkit.org/show_bug.cgi?id=223778

        Reviewed by Dean Jackson.

        Mipmap generation on Intel does not reliably work for textures with
        width less than four. To reliably pass webGL conformance, we need
        to switch to CPU mipmap generation when generating mipmaps in this
        specific circumstance.

        This patch fixes the following four tests on Intel
        webgl/1.0.3/conformance/limits/gl-max-texture-dimensions.html
        webgl/1.0.3/conformance/textures/texture-size.html
        webgl/2.0.0/conformance/limits/gl-max-texture-dimensions.html
        webgl/2.0.0/conformance/textures/misc/texture-size.html

        * include/platform/Feature.h:
        (angle::FeatureCategoryToString):
        * include/platform/FeaturesMtl.h:
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::initializeFeatures):
        * src/libANGLE/renderer/metal/TextureMtl.mm:
        (rx::TextureMtl::generateMipmap):

2021-03-25  Jessie Berlin  <jberlin@webkit.org>

        Remove 10.13 DEPLOYMENT_TARGETs and SYSTEM_VERSION_PREFIXs
        https://bugs.webkit.org/show_bug.cgi?id=223765

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:

2021-03-24  Kyle Piddington  <kpiddington@apple.com>

        Metal ANGLE non-blockers: Fix webgl/1.0.3/conformance/uniforms/uniform-default-values.html, Stencil debug layer assertions
        https://bugs.webkit.org/show_bug.cgi?id=223667

        https://bugs.webkit.org/show_bug.cgi?id=223667

        On Release, uniformDefaultValues was resetting program memory
        either early, or oddly. Since program reflection should be constant
        per Shader anyway, drop the 'reset' after assigning reflection data.

        In addition, clamp stencil rectangle to always be within framebuffer bounds. Code taken from upstream ANGLE.


        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/ProgramMtl.mm:
        (rx::ProgramMtl::linkImplDirect):
        * src/libANGLE/renderer/metal/mtl_command_buffer.mm:
        (rx::mtl::RenderCommandEncoder::initAttachmentWriteDependencyAndScissorRect):
        (rx::mtl::RenderCommandEncoder::restart):
        (rx::mtl::RenderCommandEncoder::setScissorRect):
        * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
        (rx::mtl::TranslatedShaderInfo::reset):
        (rx::mtl::GlslangGetMSL):

2021-03-24  Kyle Piddington  <kpiddington@apple.com>

        Metal ANGLE crashes LayoutTests/inspector/canvas/updateShader-webgl.html
        Rather than rely on an instance variable in a C++ class, just query the dictionary constant when needed.

        https://bugs.webkit.org/show_bug.cgi?id=223695

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/ProgramMtl.h:
        * src/libANGLE/renderer/metal/ProgramMtl.mm:
        (rx::ProgramMtl::ProgramMtl):
        (rx::ProgramMtl::linkImplSpirv):
        (rx::ProgramMtl::linkImplDirect):
        (rx::ProgramMtl::linkTranslatedShaders):

2021-03-23  Kyle Piddington  <kpiddington@apple.com>

        ANGLE Metal fixes for program generation bugs
        https://bugs.webkit.org/show_bug.cgi?id=223627

        Reviewed by Dean Jackson.

           webgl/2.0.0/conformance2/glsl3/texture-offset-uniform-texture-coordinate.html is fixed by dropping 'thread' qualifiers on pregenerated functions
           webgl/2.0.0/conformance/glsl/bugs/compound-assignment-type-combination.html is fixed by introducing new operators for matrix +/- scalars
           webgl/2.0.0/conformance/glsl/bugs/complex-glsl-does-not-crash.html is fixed by adding a pre-pass to rename any reserved keywords, such as 'vertex'

        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (BuildExternalAttributeIndexMap):
        * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp:
        * src/compiler/translator/TranslatorMetalDirect/RewriteKeywords.cpp:
        (sh::Rewriter::maybeCreateNewName):
        (sh::Rewriter::visitSymbolPost):
        (sh::Rewriter::predefineName):
        (sh::RewriteKeywords):

2021-03-23  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE is missing the explicit context headers
        https://bugs.webkit.org/show_bug.cgi?id=223470

        Reviewed by Alexey Proskuryakov.

        Add the autogenerated .inc files for explicit context
        API into the ANGLE public headers.

        * ANGLE.xcodeproj/project.pbxproj:
        * adjust-angle-include-paths.py:
        (replace):

2021-03-19  Kyle Piddington  <kpiddington@apple.com>

        Metal-Angle on Simulator does not support D24S8 correctly
        https://bugs.webkit.org/show_bug.cgi?id=223494

        Reviewed by Dean Jackson.

        Re-ran autogen script for format table to add the missing format
        Corrected texture swizzle support. Swizzle is unsupported on simulator.

        * src/libANGLE/renderer/metal/mtl_format_table_autogen.mm:
        (rx::mtl::Format::init):

2021-03-19  Alex Christensen  <achristensen@webkit.org>

        libANGLE-shared.dylib needs INSTALL_PATH when building Catalyst roots
        https://bugs.webkit.org/show_bug.cgi?id=223499

        Reviewed by Dean Jackson.

        INSTALL_PATH was empty, so no dylib was being included in the root.
        This is needed to fix the Catalyst build after bug 218539

        * Configurations/ANGLE-dynamic.xcconfig:

2021-03-06  Dean Jackson  <dino@apple.com>

        Metal-ANGLE can ASSERT because MTL signal event code is compiled out
        https://bugs.webkit.org/show_bug.cgi?id=222859
        <rdar://problem/75132180>

        Reviewed by Ken Russell.

        With the Metal backend enabled, the test
        webgl/2.0.0/conformance2/state/gl-object-get-calls.html will
        occasionally crash in mtl_command_buffer when it hits unreachable
        code because ANGLE_MTL_EVENT_AVAILABLE hasn't been defined. This is
        available on macOS 10.14 and above, so should be enabled.

        At the same time, it doesn't make sense to call the method that has
        unreachable code, so guard against that in mtl_command_buffer.

        * src/libANGLE/renderer/metal/mtl_command_buffer.mm:
        (rx::mtl::CommandBuffer::setPendingEvents):
        * src/libANGLE/renderer/metal/mtl_common.h: Define ANGLE_MTL_EVENT_AVAILABLE.

2021-03-18  Kyle Piddington  <kpiddington@apple.com>

        'MTLLanguageVersion1_0' is unavailable on Catalyst
        https://bugs.webkit.org/show_bug.cgi?id=223392

        Reviewed by Jon Lee.

        Disable switch case in catalyst builds

        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GetOperatorString):
        * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp:
        * src/libANGLE/renderer/metal/FrameBufferMtl.mm:
        (rx::FramebufferMtl::readPixels):
        * src/libANGLE/renderer/metal/mtl_utils.mm:
        (rx::mtl::GetUserSetOrHighestMSLVersion):

2021-03-17  Kyle Piddington  <kpiddington@apple.com>

        ANGLE Metal fixups for program generation, readPixels
        https://bugs.webkit.org/show_bug.cgi?id=223260

        Reviewed by Dean Jackson.

        This diff fixes the following tests:
        webgl/2.0.0/conformance2/glsl3/texture-offset-uniform-texture-coordinate.html Is fixed by dropping 'thread' qualifiers on our intermediate texture sampling helper functions. Previously, any uniforms used in sampling textures would have had issues with their namespace.
        webgl/2.0.0/conformance2/reading/read-pixels-pack-parameters.html is fixed by correcting an issue with reading from outside the framebuffer. ANGLE Metal was previously reading to the start of the output array, rather than a proper offset.
        webgl/2.0.0/conformance2/glsl3/array-equality.html is fixed by adding additional equality functions for handling arrays of structs.

        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GetOperatorString):
        * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp:
        * src/libANGLE/renderer/metal/FrameBufferMtl.mm:
        (rx::FramebufferMtl::readPixels):

2021-03-16  Kyle Piddington  <kpiddington@apple.com>

        Regressions from ANGLE Metal enablement
        https://bugs.webkit.org/show_bug.cgi?id=222239
        
        This patch addressed several large bits of funcitonality that was missing from the original patch.
        1) Introduce support for UBO's. This patch adds a DEQP-conformant implementation for UBO structs. This includes changes to the translator,
and the frontend.
        2) Introduce support for Transform feedback to the translator. We use a series of substitution macros at program link time to produce a transform-feedback varient shader, and use a vertex pre-pass to emulate transform feedback.
        3) Various fixes to handle a few webgl2 asserts, such as large uniform buffers. This change  (in ProgramMtl.mm) will reserve a uniform buffer of twice the normal size (4kb) if the program uniforms exceed that limit. (Fixes webgl/2.0.0/conformance/glsl/bugs/complex-glsl-does-not-crash.html webgl/2.0.0/conformance/glsl/misc/shader-with-too-many-uniforms.html webgl/2.0.0/conformance/uniforms/gl-uniform-arrays.html)

        Reviewed by Jon Lee.

        * ANGLE.xcodeproj/project.pbxproj:
        * include/platform/FeaturesMtl.h:
        * src/compiler.gni:
        * src/compiler/translator/BaseTypes.h:
        (sh::getQualifierString):
        * src/compiler/translator/TranslatorMetalDirect.cpp:
        (sh::TranslatorMetalDirect::insertSampleMaskWritingLogic):
        (sh::metalShaderTypeFromGLSL):
        (sh::TranslatorMetalDirect::translateImpl):
        (sh::TranslatorMetalDirect::translate):
        * src/compiler/translator/TranslatorMetalDirect.h:
        (sh::TranslatorMetalReflection::TranslatorMetalReflection):
        (sh::TranslatorMetalReflection::addUserUniformBufferBinding):
        (sh::TranslatorMetalReflection::addUniformBufferBinding):
        (sh::TranslatorMetalReflection::getUserUniformBufferBindings const):
        (sh::TranslatorMetalReflection::getUserUniformBufferBinding const):
        (sh::TranslatorMetalReflection::getUniformBufferBinding const):
        (sh::TranslatorMetalReflection::reset):
        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GenMetalTraverser::~GenMetalTraverser):
        (GenMetalTraverser::emitOpeningPointerParen):
        (GenMetalTraverser::emitClosingPointerParen):
        (GetOperatorString):
        (GenMetalTraverser::emitPostQualifier):
        (GenMetalTraverser::emitType):
        (GenMetalTraverser::emitFieldDeclaration):
        (GenMetalTraverser::emitAttributeDeclaration):
        (GenMetalTraverser::emitUniformBufferDeclaration):
        (GenMetalTraverser::emitStructDeclaration):
        (GenMetalTraverser::emitOrdinaryVariableDeclaration):
        (GenMetalTraverser::visitSymbol):
        (GenMetalTraverser::visitBinary):
        (GenMetalTraverser::emitFunctionSignature):
        (GenMetalTraverser::emitFunctionReturn):
        (GenMetalTraverser::emitFunctionParameter):
        (GenMetalTraverser::visitFunctionDefinition):
        (GenMetalTraverser::visitAggregate):
        (RequiresSemicolonTerminator):
        (GenMetalTraverser::visitBlock):
        (GenMetalTraverser::visitBranch):
        * src/compiler/translator/TranslatorMetalDirect/FixTypeConstructors.cpp:
        * src/compiler/translator/TranslatorMetalDirect/IntroduceVertexIndexID.cpp: Added.
        (sh::Rewriter::Rewriter):
        (sh::IntroduceVertexAndInstanceIndex):
        * src/compiler/translator/TranslatorMetalDirect/IntroduceVertexIndexID.h: Added.
        * src/compiler/translator/TranslatorMetalDirect/Layout.cpp:
        * src/compiler/translator/TranslatorMetalDirect/Layout.h:
        * src/compiler/translator/TranslatorMetalDirect/ModifyStruct.cpp:
        (sh::TryCreateModifiedStruct):
        * src/compiler/translator/TranslatorMetalDirect/ModifyStruct.h:
        * src/compiler/translator/TranslatorMetalDirect/Pipeline.cpp:
        (Pipeline::uses const):
        (Pipeline::getStructTypeName const):
        (Pipeline::getStructInstanceName const):
        (AllowPacking):
        (AllowPadding):
        (SaturateVectorOf):
        (Pipeline::externalStructModifyConfig const):
        (Pipeline::alwaysRequiresLocalVariableDeclarationInMain const):
        (Pipeline::isPipelineOut const):
        (Pipeline::externalAddressSpace const):
        (PipelineStructs::matches const):
        * src/compiler/translator/TranslatorMetalDirect/Pipeline.h:
        (sh::PipelineScoped::matches const):
        * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp:
        (sh::ProgramPrelude::ProgramPrelude):
        * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.h:
        (sh::ProgramPreludeConfig::ProgramPreludeConfig):
        * src/compiler/translator/TranslatorMetalDirect/ReduceInterfaceBlocks.cpp:
        (sh::Reducer::Reducer):
        * src/compiler/translator/TranslatorMetalDirect/RewritePipelines.cpp:
        (sh::GeneratePipelineStruct::exec):
        (sh::GeneratePipelineStruct::createInternalPipelineStruct):
        (sh::PipelineFunctionEnv::getUpdatedFunction):
        (sh::RewritePipelines):
        * src/compiler/translator/TranslatorMetalDirect/SymbolEnv.cpp:
        (SymbolEnv::removeSpace):
        (SymbolEnv::removePointer):
        (SymbolEnv::markAsUBO):
        (SymbolEnv::isUBO const):
        * src/compiler/translator/TranslatorMetalDirect/SymbolEnv.h:
        * src/compiler/translator/tree_ops/NameNamelessUniformBuffers.cpp: Added.
        (sh::NameNamelessUniformBuffers):
        * src/compiler/translator/tree_ops/NameNamelessUniformBuffers.h: Added.
        * src/compiler/translator/util.cpp:
        (sh::IsBuiltinOutputVariable):
        * src/libANGLE/renderer/gl/cgl/ContextCGL.cpp:
        * src/libANGLE/renderer/metal/BufferMtl.h:
        * src/libANGLE/renderer/metal/BufferMtl.mm:
        (rx::IndexConversionBufferMtl::IndexConversionBufferMtl):
        (rx::IndexConversionBufferMtl::getRangeForConvertedBuffer):
        * src/libANGLE/renderer/metal/ContextMtl.h:
        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::handleDirtyDriverUniforms):
        (rx::ContextMtl::handleDirtyGraphicsTransformFeedbackBuffersEmulation):
        (rx::ContextMtl::handleDirtyDepthBias):
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::getMaxSupportedESVersion const):
        (rx::DisplayMtl::generateConfigs):
        (rx::DisplayMtl::ensureCapsInitialized const):
        (rx::DisplayMtl::initializeFeatures):
        (rx::DisplayMtl::initializeShaderLibrary):
        * src/libANGLE/renderer/metal/FrameBufferMtl.h:
        * src/libANGLE/renderer/metal/ProgramMtl.h:
        (rx::ProgramMtl::createMslShaderLib):
        (rx::ProgramMtl::getXfbBindings const):
        (rx::ProgramMtl::getTranslatedShaderSource const):
        (rx::ProgramMtl::getXfbMslSource const): Deleted.
        * src/libANGLE/renderer/metal/ProgramMtl.mm:
        (rx::ProgramMtl::ProgramMtl):
        (rx::ProgramMtl::destroy):
        (rx::ProgramMtl::reset):
        (rx::ProgramMtl::saveTranslatedShaders):
        (rx::ProgramMtl::loadTranslatedShaders):
        (rx::ProgramMtl::linkImplSpirv):
        (rx::ProgramMtl::linkImplDirect):
        (rx::ProgramMtl::linkImpl):
        (rx::ProgramMtl::linkTranslatedShaders):
        (rx::ProgramMtl::getBufferPool):
        (rx::ProgramMtl::resizeDefaultUniformBlocksMemory):
        (rx::ProgramMtl::getSpecializedShader):
        (rx::ProgramMtl::createMslShaderLib):
        (rx::ProgramMtl::commitUniforms):
        * src/libANGLE/renderer/metal/QueryMtl.h:
        * src/libANGLE/renderer/metal/RenderBufferMtl.mm:
        (rx::RenderbufferMtl::setStorageImpl):
        * src/libANGLE/renderer/metal/RenderTargetMtl.mm:
        (rx::RenderTargetMtl::setWithImplicitMSTexture):
        (rx::RenderTargetMtl::reset):
        * src/libANGLE/renderer/metal/ShaderMtl.mm:
        (rx::ShaderMtl::compile):
        * src/libANGLE/renderer/metal/SurfaceMtl.mm:
        (rx::WindowSurfaceMtl::initialize):
        * src/libANGLE/renderer/metal/TextureMtl.mm:
        (rx::TextureMtl::ensureSamplerStateCreated):
        (rx::TextureMtl::setPerSliceSubImage):
        (rx::TextureMtl::initializeContents):
        * src/libANGLE/renderer/metal/TransformFeedbackMtl.mm:
        * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
        (rx::VertexArrayMtl::getIndexBuffer):
        * src/libANGLE/renderer/metal/mtl_common.h:
        * src/libANGLE/renderer/metal/mtl_constants.h:
        * src/libANGLE/renderer/metal/mtl_format_map.json:
        * src/libANGLE/renderer/metal/mtl_format_table_autogen.mm:
        (rx::mtl::Format::init):
        * src/libANGLE/renderer/metal/mtl_format_utils.mm:
        (rx::mtl::FormatTable::initialize):
        * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.h:
        * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
        (rx::mtl::updateShaderAttributes):
        (rx::mtl::SubstituteTransformFeedbackMarkers):
        (rx::mtl::GenerateTransformFeedbackVaryingOutput):
        (rx::mtl::GenerateTransformFeedbackEmulationOutputs):
        (rx::mtl::getReflectionFromCompiler):
        (rx::mtl::GlslangGetMSL):
        * src/libANGLE/renderer/metal/mtl_render_utils.mm:
        (rx::mtl::TransformFeedbackUtils::createMslXfbLibrary):
        (rx::mtl::TransformFeedbackUtils::getTransformFeedbackRenderPipeline):
        * src/libANGLE/renderer/metal/mtl_resources.h:
        * src/libANGLE/renderer/metal/mtl_resources.mm:
        (rx::mtl::Texture::Texture):
        * src/libANGLE/renderer/metal/mtl_state_cache.mm:
        (rx::mtl::SamplerDesc::SamplerDesc):
        (rx::mtl::SamplerDesc::reset):
        (rx::mtl::RenderPipelineCache::RenderPipelineCache):
        (rx::mtl::RenderPipelineCache::createRenderPipelineState):
        * src/libANGLE/renderer/metal/mtl_utils.h:
        * src/libANGLE/renderer/metal/mtl_utils.mm:
        (rx::mtl::GetUserSetOrHighestMSLVersion):
        (rx::mtl::CreateShaderLibrary):
        (rx::mtl::GetHighestSupportedMSLVersion): Deleted.
        * src/libANGLE/renderer/metal/shaders/blit.metal:
        * src/libANGLE/renderer/metal/shaders/format_autogen.h:
        * src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc:

2021-03-03  Kyle Piddington  <kpiddington@apple.com>

        Support Depth24_Stencil8 simulation in the MTLSimulator
        https://bugs.webkit.org/show_bug.cgi?id=222624

        Reviewed by Dean Jackson.

        Fixes the following tests:
        fast/canvas/webgl/context-creation-attributes.html
        fast/canvas/webgl/webgl-depth-texture.html
        webgl/1.0.3/conformance/misc/webgl-specific.html
        webgl/1.0.3/conformance/renderbuffers/framebuffer-object-attachment.html

        * src/libANGLE/renderer/metal/mtl_format_map.json:
        * src/libANGLE/renderer/metal/mtl_format_table_autogen.mm:
        (rx::mtl::Format::init):

2021-02-26  Kyle Piddington  <kpiddington@apple.com>

        Support  fast/canvas/webgl/copyBufferSubData.html, fix bugs in fast/canvas/webgl/getBufferSubData-webgl1.html in Metal ANGLE on Simulator
        https://bugs.webkit.org/show_bug.cgi?id=222508

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/BufferMtl.mm:
        (rx::BufferMtl::unmap):
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::getMaxSupportedESVersion const):

2021-02-26  Kyle Piddington  <kpiddington@apple.com>

        Fix iOS simulator crashes due to unsupported simulator pixel formats: r8Unorm_srgb, a1bgr5Unorm, b5g6r5Unorm, abgr4Unorm, bgr5A1Unorm, and program generation asserts.

        iOS Simulator doesn't support the following packed 16 bit formats natively. While some of these can be emulated, we should fix up the crashing cases first.

        Also fix up program generation issues for void fragment shaders

        Disable support for PVRTC temporarily, as Non-square / NPOT PVRTC textures are not supported nativley on metal.

        https://bugs.webkit.org/show_bug.cgi?id=222458

        Reviewed by Dean Jackson.

        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GenMetalTraverser::emitStructDeclaration):
        (GenMetalTraverser::emitFunctionReturn):
        (GenMetalTraverser::emitFunctionParameter):
        * src/compiler/translator/TranslatorMetalDirect/Pipeline.cpp:
        (PipelineStructs::matches const):
        * src/compiler/translator/TranslatorMetalDirect/Pipeline.h:
        (sh::PipelineScoped::matches const):
        * src/libANGLE/renderer/metal/TextureMtl.mm:
        (rx::TextureMtl::setPerSliceSubImage):
        * src/libANGLE/renderer/metal/gen_mtl_format_table.py:
        * src/libANGLE/renderer/metal/mtl_format_map.json:
        * src/libANGLE/renderer/metal/mtl_format_table_autogen.mm:
        (rx::mtl::Format::init):
        (rx::mtl::VertexFormat::init):
        (rx::mtl::FormatTable::initNativeFormatCapsAutogen):
        * src/libANGLE/renderer/metal/mtl_format_utils.mm:
        (rx::mtl::FormatTable::initialize):
        * src/libANGLE/renderer/metal/mtl_resources.mm:
        (rx::mtl::Texture::Make2DTexture):
        (rx::mtl::Texture::MakeTexture):

2021-02-26  Kimmo Kinnunen  <kkinnunen@apple.com>

        Textures Fail to Render in WebGL from HLS Stream on iPhone 12 [iOS 14.2]
        https://bugs.webkit.org/show_bug.cgi?id=218637
        <rdar://problem/71102126>

        Reviewed by Kenneth Russell.

        Remove incorrect validation that IOSurface pixel format matches
        the pixel format of the texture image being specified.

        The "Element" in IOSurface is a block of pixels, while the validation assumed
        it means one pixel. The validation failed for a compressed format.

        Currently we map non-public YUV formats, to which there is no elequent way
        of implementing the validation.
        Most likely this started to reproduce if IOSurfaceGetBytesPerElementOfPlane
        was changed to produce correct results for the above YUV format.

        Later commits could add the validation back for formats that we know the
        pixel format type.

        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:
        (rx::IOSurfaceSurfaceEAGL::validateAttributes):

2021-02-25  Kyle Piddington  <kpiddington@apple.com>

        Fix crashes in fast/canvas/webgl/texImage video tests
        Refactor IOSurfaceSurfaceMtl to match open source implementation.
        Additional cleanup

        https://bugs.webkit.org/show_bug.cgi?id=222331

        Reviewed by Dean Jackson.


        * src/libANGLE/renderer/metal/ContextMtl.h:
        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::onBackbufferResized):
        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::createPbufferSurface):
        (rx::DisplayMtl::createPbufferFromClientBuffer):
        * src/libANGLE/renderer/metal/FrameBufferMtl.h:
        (rx::FramebufferMtl::getAttachedBackbuffer const):
        * src/libANGLE/renderer/metal/FrameBufferMtl.mm:
        (rx::FramebufferMtl::FramebufferMtl):
        * src/libANGLE/renderer/metal/IOSurfaceSurfaceMtl.h:
        * src/libANGLE/renderer/metal/IOSurfaceSurfaceMtl.mm:
        (rx::IOSurfaceSurfaceMtl::IOSurfaceSurfaceMtl):
        (rx::IOSurfaceSurfaceMtl::~IOSurfaceSurfaceMtl):
        (rx::IOSurfaceSurfaceMtl::bindTexImage):
        (rx::IOSurfaceSurfaceMtl::releaseTexImage):
        (rx::IOSurfaceSurfaceMtl::getAttachmentRenderTarget):
        (rx::IOSurfaceSurfaceMtl::ensureColorTextureCreated):
        (rx::IOSurfaceSurfaceMtl::ValidateAttributes):
        * src/libANGLE/renderer/metal/SurfaceMtl.h:
        (rx::SurfaceMtl::getColorTexture):
        (rx::SurfaceMtl::getSamples const):
        (rx::SurfaceMtl::hasRobustResourceInit const):
        (rx::WindowSurfaceMtl::preserveBuffer const):
        * src/libANGLE/renderer/metal/SurfaceMtl.mm:
        (rx::SurfaceMtl::SurfaceMtl):
        * src/libANGLE/renderer/metal/TextureMtl.h:
        * src/libANGLE/renderer/metal/TextureMtl.mm:
        (rx::TextureMtl::ensureTextureCreated):
        (rx::TextureMtl::ensureSamplerStateCreated):
        (rx::TextureMtl::bindTexImage):
        (rx::TextureMtl::releaseTexImage):
        (rx::TextureMtl::getAttachmentRenderTarget):
        * src/libANGLE/renderer/metal/mtl_common.h:

2021-02-19  Kyle Piddington  <kpiddington@apple.com>

        Fix a number of functional regressions caused by enabling the Metal ANGLE backend by default.
        https://bugs.webkit.org/show_bug.cgi?id=220895
        <rdar://problem/73539537>

        Reviewed by Kenneth Russell.

        Take two of this commit - this time with the new files FixTypeConstructors and NameEmbeddedUniformStructsMetal.
        
        Fixed webgl/1.0.3/conformance/context/context-hidden-alpha.html

        MTL Translator direct fixes for webgl/1.0.3/conformance/glsl/constructors/glsl-construct-*vec2 tests, Plus fix for GL_VertexIndex

        Fix EmitMetal crash for missing function textureRect.

        Additional fixes for 73675990, shaders-with-invariance.html, shaders-with-uniform-structs.html, struct-specifiers-in-uniforms.html, framebuffer-object-attachment.html

        Fixed clamping of array elements.

        * ANGLE.xcodeproj/project.pbxproj:
        * src/compiler/translator/TranslatorMetalDirect.cpp:
        (sh::TranslatorMetalDirect::translateImpl):
        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GenMetalTraverser::emitPostQualifier):
        (GenMetalTraverser::visitBinary):
        (GenMetalTraverser::BuildFuncToName):
        * src/compiler/translator/TranslatorMetalDirect/FixTypeConstructors.cpp: Added.
        (sh::FixTypeTraverser::FixTypeTraverser):
        (sh::FixTypeConstructors):
        * src/compiler/translator/TranslatorMetalDirect/FixTypeConstructors.h: Added.
        * src/compiler/translator/TranslatorMetalDirect/NameEmbeddedUniformStructsMetal.cpp: Added.
        (sh::NameEmbeddedStructUniformsMetal):
        * src/compiler/translator/TranslatorMetalDirect/NameEmbeddedUniformStructsMetal.h: Added.
        * src/compiler/translator/TranslatorMetalDirect/Pipeline.cpp:
        (SaturateVectorOf):
        * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp:
        (sh::ProgramPrelude::ProgramPrelude):
        * src/compiler/translator/TranslatorMetalDirect/ReduceInterfaceBlocks.cpp:
        (sh::Reducer::Reducer):
        (sh::ReduceInterfaceBlocks):
        * src/compiler/translator/TranslatorMetalDirect/ReduceInterfaceBlocks.h:
        * src/compiler/translator/TranslatorMetalDirect/SeparateCompoundStructDeclarations.cpp:
        * src/libANGLE/renderer/load_functions_table_autogen.cpp:
        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::drawElementsImpl):
        * src/libANGLE/renderer/metal/IOSurfaceSurfaceMtl.h:
        * src/libANGLE/renderer/metal/IOSurfaceSurfaceMtl.mm:
        (rx::IOSurfaceSurfaceMtl::IOSurfaceSurfaceMtl):
        (rx::IOSurfaceSurfaceMtl::createBackingTexture):
        * src/libANGLE/renderer/metal/RenderBufferMtl.mm:
        (rx::RenderbufferMtl::setStorageImpl):
        * src/libANGLE/renderer/metal/VertexArrayMtl.h:
        * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
        (rx::VertexArrayMtl::getIndexBuffer):
        (rx::VertexArrayMtl::convertIndexBuffer):
        (rx::VertexArrayMtl::streamIndexBufferFromClient):
        * src/libANGLE/renderer/metal/mtl_utils.mm:
        (rx::mtl::InitializeDepthStencilTextureContentsGPU):
        * src/libANGLE/renderer/metal/shaders/blit.metal:
        * src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc:

2021-02-19  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r273188.

        Broke the build: Is missing a cpp file

        Reverted changeset:

        "Fix a number of functional regressions caused by enabling the
        Metal ANGLE backend by default."
        https://bugs.webkit.org/show_bug.cgi?id=220895
        https://commits.webkit.org/r273188

2021-02-19  Kyle Piddington  <kpiddington@apple.com>

        Fix a number of functional regressions caused by enabling the Metal ANGLE backend by default.
        https://bugs.webkit.org/show_bug.cgi?id=220895
        <rdar://problem/73539537>

        Reviewed by Kenneth Russell.

        Fixed webgl/1.0.3/conformance/context/context-hidden-alpha.html

        MTL Translator direct fixes for webgl/1.0.3/conformance/glsl/constructors/glsl-construct-*vec2 tests, Plus fix for GL_VertexIndex

        Fix EmitMetal crash for missing function textureRect.

        Additional fixes for 73675990, shaders-with-invariance.html, shaders-with-uniform-structs.html, struct-specifiers-in-uniforms.html, framebuffer-object-attachment.html

        Fixed clamping of array elements.

        * ANGLE.xcodeproj/project.pbxproj:
        * src/compiler/translator/TranslatorMetalDirect.cpp:
        (sh::TranslatorMetalDirect::translateImpl):
        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GenMetalTraverser::emitPostQualifier):
        (GenMetalTraverser::visitBinary):
        (GenMetalTraverser::BuildFuncToName):
        * src/compiler/translator/TranslatorMetalDirect/FixTypeConstructors.cpp: Added.
        (sh::FixTypeTraverser::FixTypeTraverser):
        (sh::FixTypeConstructors):
        * src/compiler/translator/TranslatorMetalDirect/FixTypeConstructors.h: Added.
        * src/compiler/translator/TranslatorMetalDirect/NameEmbeddedUniformStructsMetal.cpp: Added.
        (sh::NameEmbeddedStructUniformsMetal):
        * src/compiler/translator/TranslatorMetalDirect/NameEmbeddedUniformStructsMetal.h: Added.
        * src/compiler/translator/TranslatorMetalDirect/Pipeline.cpp:
        (SaturateVectorOf):
        * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp:
        (sh::ProgramPrelude::ProgramPrelude):
        * src/compiler/translator/TranslatorMetalDirect/ReduceInterfaceBlocks.cpp:
        (sh::Reducer::Reducer):
        (sh::ReduceInterfaceBlocks):
        * src/compiler/translator/TranslatorMetalDirect/ReduceInterfaceBlocks.h:
        * src/compiler/translator/TranslatorMetalDirect/SeparateCompoundStructDeclarations.cpp:
        * src/libANGLE/renderer/load_functions_table_autogen.cpp:
        * src/libANGLE/renderer/metal/ContextMtl.mm:
        (rx::ContextMtl::drawElementsImpl):
        * src/libANGLE/renderer/metal/IOSurfaceSurfaceMtl.h:
        * src/libANGLE/renderer/metal/IOSurfaceSurfaceMtl.mm:
        (rx::IOSurfaceSurfaceMtl::IOSurfaceSurfaceMtl):
        (rx::IOSurfaceSurfaceMtl::createBackingTexture):
        * src/libANGLE/renderer/metal/RenderBufferMtl.mm:
        (rx::RenderbufferMtl::setStorageImpl):
        * src/libANGLE/renderer/metal/VertexArrayMtl.h:
        * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
        (rx::VertexArrayMtl::getIndexBuffer):
        (rx::VertexArrayMtl::convertIndexBuffer):
        (rx::VertexArrayMtl::streamIndexBufferFromClient):
        * src/libANGLE/renderer/metal/mtl_utils.mm:
        (rx::mtl::InitializeDepthStencilTextureContentsGPU):
        * src/libANGLE/renderer/metal/shaders/blit.metal:
        * src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc:

2021-02-19  Kyle Piddington  <kpiddington@apple.com>

        Crash in readPixels with ANGLE Metal backend
        https://bugs.webkit.org/show_bug.cgi?id=220877

        RenderbufferMtl::initializeContents is sometimes bound with a
        default level index, which doesn't specify type, layer count, or
        other information. When this path is called with an invalid index,
        assume a 2d index.

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/metal/RenderBufferMtl.mm:
        (rx::RenderbufferMtl::initializeContents):

2021-02-17  Dean Jackson  <dino@apple.com>

        Metal-Angle on IOS fails in ValidateCreatePbufferFromClientBuffer
        https://bugs.webkit.org/show_bug.cgi?id=222069

        Reviewed by Simon Fraser.

        Due to the differences between OpenGL and OpenGLES, WebCore
        binds its IOSurfaces to a different texture target on macOS and iOS.
        This isn't really needed with the Metal-ANGLE backend, but while we're
        still supporting the OpenGL backend it is easier to have the Metal backend
        use both targets.

        * src/libANGLE/renderer/metal/DisplayMtl.mm:
        (rx::DisplayMtl::generateConfigs): Look for EGL_TEXTURE_2D on iOS. Note
        we don't have to worry about the weird "iOS App on macOS" situation since
        that only applies to using OpenGLES on macOS. Yay for Metal!

2021-01-13  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] fbostatequery, negativebufferapi, negativevertexarrayapi, shaderstatequery conformance failures
        https://bugs.webkit.org/show_bug.cgi?id=220372

        Reviewed by Darin Adler.

        Add a needed early-out in drawArraysInstanced validation when the
        primitive count is zero. This patch will be upstreamed to ANGLE
        afterward.

        * src/libANGLE/validationES.h:
        (gl::ValidateDrawArraysAttribs):
        (gl::ValidateDrawArraysCommon):

2021-01-08  Kyle Piddington  <kpiddington@apple.com>

        Failures of attribute location conformance tests with Metal backend
        https://bugs.webkit.org/show_bug.cgi?id=220137

        Reviewed by Dean Jackson.

        * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
        (GenMetalTraverser::emitAttributeDeclaration):
        * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
        (rx::mtl::updateShaderAttributes):
        (rx::mtl::GlslangGetMSL):

2021-01-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][CMake][MSBuild][ANGLE] entry_points_*.h was generated twice both in LibGLESv2EntryPointsHeaders and GLESv2 projects
        https://bugs.webkit.org/show_bug.cgi?id=220251

        Reviewed by Kenneth Russell.

        WinCairo port is supporting both CMake Visual Studio generator and
        Ninja generator. However, CMake Visual Studio builds was failing
        as the following error.

        > ANGLE\Headers\ANGLE/entry_points_egl.h(13,10): fatal error C1083: Cannot open include file: 'export.h': No such file or directory (compiling source file ...\texmap\ANGLEContext.cpp)

        entry_points_egl.h was generated twice both in
        LibGLESv2EntryPointsHeaders and GLESv2 projects. However, the
        post-process script adjust-angle-include-paths.py was invoked only
        in LibGLESv2EntryPointsHeaders project.

        GLESv2 target needs to have a direct or indirect dependency to
        LibGLESv2EntryPointsHeaders target for CMake Visual Studio
        generator to eliminate duplicated custom commands.

        * CMakeLists.txt: Added add_dependencies(GLESv2 LibGLESv2EntryPointsHeaders) only if WIN32.

2021-01-02  James Darpinian  <jdarpinian@chromium.org>

        Enable some ANGLE workarounds on iOS
        https://bugs.webkit.org/show_bug.cgi?id=220203

        Reviewed by Kenneth Russell.

        Running ANGLE's unit tests on iOS upstream exposed the need to enable a couple of existing
        workaround flags. https://crrev.com/c/2601106 and https://crrev.com/c/2606657 are the
        upstream changes corresponding to these fixes.

        * src/libANGLE/renderer/gl/FramebufferGL.cpp:
        (rx::FramebufferGL::blit):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::InitializeFeatures):

2020-12-23  Kyle Piddington  <kpiddington@apple.com>

        [ANGLE] Metal backend renders tdl.js samples as red
        https://bugs.webkit.org/show_bug.cgi?id=220129

        Reviewed by Kenneth Russell.

        * src/libANGLE/renderer/metal/FrameBufferMtl.mm:
        (rx::FramebufferMtl::blitWithDraw):

2020-12-22  Michael Catanzaro  <mcatanzaro@gnome.org>

        warning: enumerated and non-enumerated type in conditional expression in Compiler.cpp
        https://bugs.webkit.org/show_bug.cgi?id=220062

        Reviewed by Dean Jackson.

        Building ANGLE with -Wextra is too aggressive. -Wextra is great for code that we control,
        where the burden of squashing warnings is relatively low. But with ANGLE, we have to either
        land fixes upstream, or carry them downstream forever. It doesn't make sense to bother with
        this for minor build warning fixes when upstream is clearly not using the same warning flags
        and/or same compiler that we do.

        Since we add -Wextra in our global flags, we have to manually override it here. We can now
        also stop explicitly disabling other warnings that are implied by -Wextra.

        Finally, note that changes.diff is not modified because this is, confusingly, a downstream
        WebKit build file.

        * CMakeLists.txt:

2020-12-22  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] deqp/functional/gles3/texturespecification RGB4444 and RGB565 failures on Mac AMD
        https://bugs.webkit.org/show_bug.cgi?id=220093

        Reviewed by Alex Christensen.

        Promote the RGBA4444 and RGB565 texture formats to RGB[A]8 in
        order to work around OpenGL driver bugs on macOS with AMD GPUs.

        * include/platform/FeaturesGL.h:
        * src/libANGLE/renderer/gl/formatutilsgl.cpp:
        (rx::nativegl::GetNativeInternalFormat):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::InitializeFeatures):

2020-12-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Enable USE_ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=219421

        Reviewed by Don Olmstead.

        * CMakeLists.txt: Added entry_points_egl_ext.h to libglesv2_entry_points_headers.

2020-12-14  Alex Christensen  <achristensen@webkit.org>

        Fix build.

        * src/gpu_info_util/SystemInfo_apple.mm:
        (angle::GetSystemInfo):
        ##if should be #if

2020-12-14  Dean Jackson  <dino@apple.com>

        Build fix for Mac Catalyst. Remove code that was accidentally
        included in the previous commit.

        * src/gpu_info_util/SystemInfo_apple.mm:
        (angle::GetSystemInfo):

2020-12-12  Kyle Piddington  <kpiddington@apple.com>

        Improved Metal backend for ANGLE, with direct GLSL to Metal compiler translation
        https://bugs.webkit.org/show_bug.cgi?id=219759
        <rdar://problem/72200222>

        Reviewed by Dean Jackson.

        Reviewer's note: While this patch is landing in WebKit now, it will
        be submitted to the main ANGLE project for official review, then re-merged
        back into WebKit. The feature provided here is not enabled by default.

        Provide a WebGL1 compliant transpiler for GLSL content. With this
        change, we can leverage the already present open source work in the
        ANGLE project to enable webgl to run on top of Metal. In addition,
        this patch contains a number of fixes to the existing ANGLE Metal backend.

        Test: Tests were validated with the dEQP test suite with ANGLE, in
        addition to running standard layout tests.

2020-12-04  Adam Roben  <aroben@apple.com>

        More FALLBACK_PLATFORM adoption
        https://bugs.webkit.org/show_bug.cgi?id=219545

        Reviewed by Tim Horton.

        * Configurations/SDKVariant.xcconfig:
        WK_EMPTY_$(THIS_IS_NOT_EMPTY) evaluates to the empty string, not to
        NO.

2020-12-04  Rob Buis  <rbuis@igalia.com>

        WebGL2: Null pointer dereference in std::string implementation in gl::Shader::getTransformFeedbackVaryingMappedName
        https://bugs.webkit.org/show_bug.cgi?id=218602

        Reviewed by Dean Jackson.

        Skip varying if field is not found since in this
        case we have no match for the varying parameter name.

        * src/libANGLE/Shader.cpp:
        (gl::Shader::getTransformFeedbackVaryingMappedName):

2020-12-03  Adam Roben  <aroben@apple.com>

        Adopt FALLBACK_PLATFORM
        https://bugs.webkit.org/show_bug.cgi?id=219504

        Reviewed by Tim Horton.

        * Configurations/SDKVariant.xcconfig: Use FALLBACK_PLATFORM it if it's
        defined, otherwise use PLATFORM_NAME as before.

2020-12-02  Dean Jackson  <dino@apple.com>

        Build fix for Mac Catalyst. Include the SystemInfo header.

        * src/libANGLE/renderer/gl/apple/DisplayApple_api.cpp:

2020-12-02  Rob Buis  <rbuis@igalia.com>

        Fix ANGLE CMakeLists.txt warnings
        https://bugs.webkit.org/show_bug.cgi?id=219260

        Reviewed by Philippe Normand.

        Fix warning when building on GTK:
        Make Warning (dev) at Source/ThirdParty/ANGLE/CMakeLists.txt:103:
        Syntax Warning in cmake code at column 37

        Argument not separated from preceding token by whitespace.
        This warning is for project developers.  Use -Wno-dev to suppress it.

        * CMakeLists.txt:

2020-12-02  James Darpinian  <jdarpinian@chromium.org>

        Update ANGLE 2020-11-12
        https://bugs.webkit.org/show_bug.cgi?id=218877

        Reviewed by Kenneth Russell.

        * Excessively large list of upstream changes omitted.

2020-11-30  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r270129, r270194, and r270258.

        r270129 broke macCatalyst build

        Reverted changesets:

        "Update ANGLE 2020-11-12"
        https://bugs.webkit.org/show_bug.cgi?id=218877
        https://trac.webkit.org/changeset/270129

        "Fix ANGLE CMakeLists.txt warnings"
        https://bugs.webkit.org/show_bug.cgi?id=219260
        https://trac.webkit.org/changeset/270194

        "Attempted build fix for Mac Catalyst. Include the SystemInfo
        header."
        https://trac.webkit.org/changeset/270258

2020-11-30  Dean Jackson  <dino@apple.com>

        Attempted build fix for Mac Catalyst. Include the SystemInfo header.

        * src/libANGLE/renderer/gl/apple/DisplayApple_api.cpp:

2020-11-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        [ANGLE] Convert adjust-angle-include-paths.sh to a Python script for Windows without Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=219299

        Reviewed by Kenneth Russell.

        WinCairo port can't use shell scripts because it isn't using
        Cygwin.

        * ANGLE.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * adjust-angle-include-paths.py: Added.
        * adjust-angle-include-paths.sh: Removed.

2020-11-27  Rob Buis  <rbuis@igalia.com>

        Fix ANGLE CMakeLists.txt warnings
        https://bugs.webkit.org/show_bug.cgi?id=219260

        Reviewed by Philippe Normand.

        Fix warning when building on GTK:
        Make Warning (dev) at Source/ThirdParty/ANGLE/CMakeLists.txt:103:
        Syntax Warning in cmake code at column 37

        Argument not separated from preceding token by whitespace.
        This warning is for project developers.  Use -Wno-dev to suppress it.

        * CMakeLists.txt:

2020-11-20  James Darpinian  <jdarpinian@chromium.org>

        Update ANGLE 2020-11-12
        https://bugs.webkit.org/show_bug.cgi?id=218877

        Reviewed by Kenneth Russell.

        * Excessively large list of upstream changes omitted.

2020-11-19  James Darpinian  <jdarpinian@chromium.org>

        Improve update-angle script and move to Tools/Scripts
        https://bugs.webkit.org/show_bug.cgi?id=218831

        Reviewed by Kenneth Russell.

        update-angle fetches changes from upstream ANGLE into Source/ThirdParty/ANGLE,
        updates WebKit's build files and helps merge WebKit's local changes.

          - Moved to Tools/Scripts so that it doesn't overwrite itself during the
            update process.
          - Reversed direction of rebase. Before the script rebased ANGLE on WebKit;
            now it rebases WebKit's ANGLE changes on upstream ANGLE master. This
            makes a lot more sense and results in fewer changes to rebase. This
            requires the use of git-filter-repo to make the rebase not prohibitively
            slow.
          - Removed bash dependency.
          - Fixed all issues identified by shellcheck.
          - Fixed changes.diff to show added files, while filtering files added by
            WebKit's build process.
          - Fixed changes.diff to ignore whitespace changes.
          - Added --regenerate-changes-diff option to update changes.diff in between
            ANGLE updates.
          - Updated [angle_]commit.h generation for upstream changes.
          - Removed need to run the script multiple times during the rebase process.

        * update-angle.sh: Removed.

2020-11-19  Dean Jackson  <dino@apple.com>

        Add schemes for ANGLE to Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=217546
        rdar://69062082

        Reviewed by Alex Christensen.

        * Configurations/Base.xcconfig: Update paths for built frameworks.
        * ANGLE.xcodeproj/xcshareddata/xcschemes/ANGLE (dynamic).xcscheme: Added.
        * ANGLE.xcodeproj/xcshareddata/xcschemes/ANGLE (static).xcscheme: Added.
        * ANGLE.xcodeproj/xcshareddata/xcschemes/ANGLE.xcscheme: Added.

2020-11-04  David Kilzer  <ddkilzer@apple.com>

        WebKit should remove unused debug variant support
        <https://webkit.org/b/218315>
        <rdar://problem/70785369>

        Reviewed by Darin Adler.

        Remove support for building the debug variant since it is
        currently unused. We now set default values for the
        DEAD_CODE_STRIPPING, DEBUG_DEFINES, GCC_OPTIMIZATION_LEVEL and
        STRIP_INSTALLED_PRODUCT variables.

        Also move these values out of the Xcode project into
        Base.xcconfig files using the [config=Debug] specifier so that
        these overrides are next to the definitions.

        Additional changes in behavior are noted below.

        * Configurations/ANGLE-dynamic.xcconfig:
        - Move DEBUG_DEFINES to Base.xcconfig.
        - Set up DEAD_CODE_STRIPPING and STRIP_INSTALLED_PRODUCT the
          same as for other WebKit projects. Previously dead code and
          symbols were never stipped in Release or Production builds.

        * Configurations/ANGLE-static.xcconfig:
        - Move DEBUG_DEFINES to Base.xcconfig.

        * Configurations/Base.xcconfig:
        - Set up DEBUG_DEFINES and GCC_OPTIMIZATION_LEVEL the same as
          other WebKit projects. Previously Debug builds were built with
          -Os instead of -O0.

2020-11-03  David Kilzer  <ddkilzer@apple.com>

        Stop building ANGLE source files twice
        <https://webkit.org/b/218469>

        Reviewed by Dean Jackson.

        * ANGLE.xcodeproj/project.pbxproj:
        (ANGLE (dynamic)):
        - Replace sources with empty.cpp. Xcode requires a single source
          file to be compiled to create a dylib, even if the static
          library contains all necessary symbols.
        - Add dependency on "ANGLE (static)" target.
        * Configurations/ANGLE-dynamic.xcconfig:
        (ANGLE_OTHER_LDFLAGS):
        - Add $(ANGLE_STATIC_LIB_OTHER_LDFLAGS).
        (ANGLE_STATIC_LIB_OTHER_LDFLAGS): Add.
        - Special linker command-line switch to load all symbols from
          libANGLE.a when linking libANGLE-shared.dylib.
        * src/empty.cpp: Add.
        - See above why this is needed by Xcode.

2020-10-12  Dean Jackson  <dino@apple.com>

        Add schemes for ANGLE to Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=217546
        rdar://69062082

        Reviewed by Alex Christensen.

        * ANGLE.xcodeproj/xcshareddata/xcschemes/ANGLE (dynamic).xcscheme: Added.
        * ANGLE.xcodeproj/xcshareddata/xcschemes/ANGLE (static).xcscheme: Added.
        * ANGLE.xcodeproj/xcshareddata/xcschemes/ANGLE.xcscheme: Added.

2020-10-28  Tim Horton  <timothy_horton@apple.com>

        macCatalyst WebGL on Apple Silicon devices is using a software renderer
        https://bugs.webkit.org/show_bug.cgi?id=218303
        <rdar://problem/70587571>

        Reviewed by Geoffrey Garen.

        * src/gpu_info_util/SystemInfo.h:
        * src/gpu_info_util/SystemInfo_apple.mm:
        (angle::GetSystemInfo):
        We can just use the macOS version of GetSystemInfo in macCatalyst.

        * src/gpu_info_util/SystemInfo_macos.mm:
        (angle::GetSystemInfo_mac):
        * src/libANGLE/Display.cpp:
        * src/libANGLE/formatutils.cpp:
        (gl::BuildInternalFormatInfoMap):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::GenerateCaps):
        It turns out we must use EAGL in macCatalyst on Apple Silicon in all cases,
        not just in-process in iOS apps (the problem is not just about coexistence
        of the two GLs, but actually about our ability to load the accelerated
        renderer /at all/ in macCatalyst processes).

        I left the runtime switching in place, because there is a future in which
        we /can/ use CGL in non-iOS-app processes, but that future is not now.

2020-10-13  Keith Rollin  <krollin@apple.com>

        Remove leftover MACOSX_DEPLOYMENT_TARGET_macosx support
        https://bugs.webkit.org/show_bug.cgi?id=217649
        <rdar://problem/70236877>

        Reviewed by Darin Adler.

        Bug 42796 introduced MACOSX_DEPLOYMENT_TARGET_<PLATFORM> as "support
        for compiling WebKit against iOS SDKs". Support for the iOS part of
        this feature was later removed in several changes, including Bug
        139212, Bug 139463 and Bug 144762. However, vestiges have remained for
        five or six years in the form of MACOSX_DEPLOYMENT_TARGET_macosx. The
        inclusion of the platform in MACOSX_DEPLOYMENT_TARGET is no longer
        needed and can be removed.

        This changes brings most projects in conformance with other projects
        that don't support including the platform in MACOSX_DEPLOYMENT_TARGET,
        including WebEditingTester, gtest, WebKitTestRunner, MiniBrowser, and
        TestWebKitAPI.

        Along the way, remove a couple of left-over references to macOS 10.16,
        and a couple of places where [sdk=macosx*] was still being used.

        With this change, initialization of MACOSX_DEPLOYMENT_TARGET should be
        consistent across all projects, with two exceptions: WebKitLauncher
        (which hardcodes it to 10.12) and libwebrtc's copy of googletest
        (which hardcodes it to 10.4). The reasons for these hard-coded values
        is not apparent, so leave them be.

        * Configurations/DebugRelease.xcconfig:

2020-10-12  Luming Yin  <luming_yin@apple.com>

        [macOS] Workaround for MAC_OS_X_VERSION_MAJOR incorrectly including minor version when building 
        with Xcode 12 on macOS Big Sur SUs
        https://bugs.webkit.org/show_bug.cgi?id=217602
        rdar://70194453

        Reviewed by Darin Adler.

        The previous workaround turns out to be ineffective because we can't set the value of 
        TARGET_MAC_OS_X_VERSION_MAJOR based on a previous value of itself. Introduce a new 
        variable TARGET_MAC_OS_X_VERSION_MAJOR to determine whether we need to explicitly 
        adjust MAC_OS_X_VERSION_MAJOR to 110000.

        * Configurations/DebugRelease.xcconfig:

2020-10-12  Luming Yin  <luming_yin@apple.com>

        [macOS] Workaround for MAC_OS_X_VERSION_MAJOR incorrectly including minor version when building 
        with Xcode 12 on macOS Big Sur SUs
        https://bugs.webkit.org/show_bug.cgi?id=217602
        rdar://70194453

        Reviewed by Darin Adler.

        Due to a bug in Xcode (rdar://70185899), Xcode 12.0 and Xcode 12.1 Beta incorrectly includes the 
        minor release number in MAC_OS_X_VERSION_MAJOR, which causes Debug and Release builds of WebKit 
        to be misconfigured when building on macOS Big Sur SUs, leading to webpages failing to load.

        To work around the Xcode bug, when the MAC_OS_X_VERSION_MAJOR includes the minor version number, 
        drop the minor version number by explicitly setting TARGET_MAC_OS_X_VERSION_MAJOR to 110000.

        Note: This change should be reverted after <rdar://70185899> is resolved.

        * Configurations/DebugRelease.xcconfig:

2020-10-11  Luming Yin  <luming_yin@apple.com>

        Strip patch version from TARGET_MAC_OS_X_VERSION_MAJOR when building for macOS Big Sur 
        or later
        https://bugs.webkit.org/show_bug.cgi?id=217594
        rdar://70188497

        Reviewed by Darin Adler.

        To ensure successful Mac Catalyst WebKit builds, strip the patch version from 
        TARGET_MAC_OS_X_VERSION_MAJOR by using two `base:`s on MACOSX_DEPLOYMENT_TARGET.

        * Configurations/Base.xcconfig:

2020-10-11  Luming Yin  <luming_yin@apple.com>

        Ignore deployment suffix and identifier when computing major OS version for macOS 
        Big Sur and newer
        https://bugs.webkit.org/show_bug.cgi?id=217584
        rdar://70168426

        Reviewed by Darin Adler.

        Stop using MACOSX_DEPLOYMENT_TARGET:suffix:identifier to compute major OS versions. 
        Only use the deployment target base for macOS Big Sur and newer. Keep the manual 
        definitions for legacy versions of macOS.

        * Configurations/Base.xcconfig:

2020-10-07  Keith Rollin  <krollin@apple.com>

        Update post-processing rules for headers to not unnecessarily change timestamps
        https://bugs.webkit.org/show_bug.cgi?id=217371
        <rdar://problem/69992230>

        Reviewed by Darin Adler.

        Under XCBuild, the scripts employed in custom build rules can be
        invoked in innocuous situations. A common example is when the user is
        building from the command-line and they change the `make` output from
        stdout to a file, or vice-versa. Changing the output changes the
        setting of the COLOR_DIAGNOSTICS environment variable, which is enough
        to cause XCBuild to think something is different and that the custom
        build rule needs to be invoked. For the script's part, nothing
        significant has changed, yet it post-processes the header files,
        causing their modification dates to change, causing downstream
        rebuilds to occur.

        Fix this problem by adopting an approach that doesn't modify the
        post-processed header files unless their contents actually change.

        * adjust-angle-include-paths-rule:

2020-10-02  Kimmo Kinnunen  <kkinnunen@apple.com>

        [iOS WK1] Crashes when using ANGLE WebGL from another thread
        https://bugs.webkit.org/show_bug.cgi?id=216106
        <rdar://problem/68602452>

        Reviewed by Kenneth Russell.

        Add two extensions for EAGL and CGL backends to declare the
        underlying platform context being "volatile". It means that
        the thread-global current context is being modified behind
        ANGLE. If ANGLE context is marked volatile for a particular
        API, it will sync the underlying context for every EGL
        function that needs the context. Most intuitive use is
        for the client to call eglMakeCurrent before calling any
        gl function if the client knowns the platform state might
        be dirty.

        Implement eglReleaseThread for EAGL and CGL backends.
        Releasing thread will unset the platform current context.

        Fix a bug of omitting EGL_ANGLE_device_eagl from being
        advertised.

        * extensions/EGL_ANGLE_platform_angle_device_context_volatile_cgl.txt: Added.
        * extensions/EGL_ANGLE_platform_angle_device_context_volatile_eagl.txt: Added.
        * include/EGL/eglext_angle.h:
        * src/libANGLE/Caps.cpp:
        (egl::DeviceExtensions::getStrings const):
        (egl::ClientExtensions::getStrings const):
        * src/libANGLE/Caps.h:
        * src/libANGLE/Display.cpp:
        (egl::Display::prepareForCall):
        (egl::Display::releaseThread):
        (egl::GenerateClientExtensions):
        * src/libANGLE/Display.h:
        * src/libANGLE/renderer/DisplayImpl.cpp:
        (rx::DisplayImpl::prepareForCall):
        (rx::DisplayImpl::releaseThread):
        * src/libANGLE/renderer/DisplayImpl.h:
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.h:
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm:
        (rx::DisplayCGL::initialize):
        (rx::DisplayCGL::terminate):
        (rx::DisplayCGL::prepareForCall):
        (rx::DisplayCGL::releaseThread):
        (rx::DisplayCGL::makeCurrent):
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.h:
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm:
        (rx::DisplayEAGL::initialize):
        (rx::DisplayEAGL::terminate):
        (rx::DisplayEAGL::prepareForCall):
        (rx::DisplayEAGL::releaseThread):
        * src/libANGLE/validationEGL.cpp:
        * src/libGLESv2/entry_points_egl.cpp:
        * src/libGLESv2/entry_points_egl_ext.cpp:

2020-09-29  James Darpinian  <jdarpinian@chromium.org>

        Fix EXT_color_buffer_half_float on iOS
        https://bugs.webkit.org/show_bug.cgi?id=217107

        Reviewed by Kenneth Russell.

        * src/libANGLE/Context.cpp:
        (gl::Context::generateSupportedExtensions const):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::GenerateTextureFormatCaps):

2020-09-24  Dean Jackson  <dino@apple.com>

        WebGL should use GLES in iOS apps running on Apple Silicon
        https://bugs.webkit.org/show_bug.cgi?id=216722
        <rdar://problem/68976337>

        Reviewed by Tim Horton.

        Change ANGLE to dynamically load either EAGL (OpenGLES) or CGL (OpenGL) depending
        on both compile and runtime configurations.
            Intel Mac -> CGL
            Intel Mac Catalyst -> CGL
            Intel iOS Simulator -> EAGL
            iOS Device -> EAGL
            Apple Silicon Mac -> CGL
            Apple Silicon Mac Catalyst (with Mac app) -> CGL
            Apple Silicon Mac Catalyst (with iOS app) -> EAGL

        The trickiest bit is Apple Silicon Mac Catalyst, which depends on the
        type of the application it is attempting to run. In that case ANGLE must compile
        both the CGL and EAGL interfaces and then pick one to use after launch.

        * ANGLE.xcodeproj/project.pbxproj: Add new files.

        * Configurations/ANGLE-dynamic.xcconfig: Remove all the OpenGL* linking.
        * Configurations/ANGLE-static.xcconfig:

        * GLESv2.cmake: New files.

        * src/common/platform.h: New definitions for CPU type on Apple Systems.

        * src/gpu_info_util/SystemInfo.h: Split SystemInfo for Apple into two
        files, for iOS and Mac. Added a field for isiOSAppOnMac that will only
        be true when running an iOS binary on Apple Silicon.
        * src/gpu_info_util/SystemInfo_apple.mm: Added. Decides which SystemInfo
        to call.
        (angle::GetSystemInfo):
        * src/gpu_info_util/SystemInfo_ios.cpp:
        (angle::GetSystemInfo_ios):
        (angle::GetSystemInfo): Deleted.
        * src/gpu_info_util/SystemInfo_macos.mm:
        (angle::GetSystemInfo_mac):
        (angle::GetSystemInfo): Deleted.

        * src/libANGLE/Caps.cpp: Can no longer just check for PLATFORM_IOS. This
        might still need a runtime check.
        (gl::DetermineDepthTextureANGLESupport):
        (gl::DetermineDepthTextureOESSupport):

        * src/libANGLE/Display.cpp: This is the main initialization point for
        ANGLE, which decides at compile/runtime which variant of Display to
        create.

        * src/libANGLE/formatutils.cpp: Add the correct formats.
        (gl::BuildInternalFormatInfoMap):

        * src/libANGLE/renderer/gl/SoftLinking_apple.h: Added. Macros to help soft-link
        functions and ObjC classes.
        * src/libANGLE/renderer/gl/cgl/CGLFunctions.cpp: Added. Where we soft-link all
        the OpenGL/CGL API.
        * src/libANGLE/renderer/gl/cgl/CGLFunctions.h: Added.

        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm: Use the soft-linked methods.
        * src/libANGLE/renderer/gl/cgl/IOSurfaceSurfaceCGL.cpp:
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.h:
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm: Rename WebSwapLayer to WebSwapLayerCGL
        otherwise it clashes with the EAGL version.
        (rx::WindowSurfaceCGL::initialize):
        (-[WebSwapLayer initWithSharedState:withContext:withFunctions:]): Deleted.
        (-[WebSwapLayer copyCGLPixelFormatForDisplayMask:]): Deleted.
        (-[WebSwapLayer copyCGLContextForPixelFormat:]): Deleted.
        (-[WebSwapLayer canDrawInCGLContext:pixelFormat:forLayerTime:displayTime:]): Deleted.
        (-[WebSwapLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]): Deleted.

        * src/libANGLE/renderer/gl/eagl/DeviceEAGL.cpp: Similar changes to the CGL implementation.
        * src/libANGLE/renderer/gl/eagl/DeviceEAGL.h:
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.h:
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm:
        (rx::DisplayEAGL::initialize):
        (rx::DisplayEAGL::terminate):
        (rx::WorkerContextEAGL::~WorkerContextEAGL):
        (rx::WorkerContextEAGL::makeCurrent):
        (rx::WorkerContextEAGL::unmakeCurrent):
        (rx::DisplayEAGL::createWorkerContext):
        * src/libANGLE/renderer/gl/eagl/EAGLFunctions.h: Added.
        * src/libANGLE/renderer/gl/eagl/EAGLFunctions.mm: Added.
        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:
        * src/libANGLE/renderer/gl/eagl/PbufferSurfaceEAGL.cpp:
        * src/libANGLE/renderer/gl/eagl/RendererEAGL.cpp:
        * src/libANGLE/renderer/gl/eagl/WindowSurfaceEAGL.h:
        * src/libANGLE/renderer/gl/eagl/WindowSurfaceEAGL.mm:
        (-[WebSwapLayerEAGL display]):
        (rx::WindowSurfaceEAGL::initialize):
        (-[WebSwapLayer initWithSharedState:withContext:withFunctions:]): Deleted.
        (-[WebSwapLayer display]): Deleted.

        * src/libANGLE/renderer/gl/renderergl_utils.cpp: Runtime check.
        (rx::nativegl_gl::GenerateCaps):

2020-09-25  James Darpinian  <jdarpinian@chromium.org>

        Support EXT_float_blend
        https://bugs.webkit.org/show_bug.cgi?id=216949

        Reviewed by Kenneth Russell.

        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::GenerateCaps):

2020-09-24  Kimmo Kinnunen  <kkinnunen@apple.com>

        REGRESSION: Textures Fail to Render in WebGL from HLS Stream [iOS 14]
        https://bugs.webkit.org/show_bug.cgi?id=215908
        <rdar://problem/68000962>

        Reviewed by Dean Jackson.

        Disable ANGLE workers until EAGL implementation is more complete.
        Current implementation fails to compile any shader, since the
        compilation happens in the worker thread and worker EAGL context
        which does not use the same sharegroup as the main context.
        The shader objects are created in the main context but the shader
        source setting and compilation happens in the worker context.
        EAGL needs a flush between state changes, and adding that
        correctly is a bigger change to be done later.

        Use sized formats when calling [EAGLContext -texImageIOSurface]
        from EGL_ANGLE_iosurface_client_buffer code. The texImageIOSurface
        accepts parameters with glTexImage2D logic. On ES3, some of the
        internal formats must be sized formats. The EAGLContext instantiated
        by ANGLE is ES3, even if the ANGLE context would be ES2.

        No tests added since this should be caught with the many video
        related tests. It's unclear why this is not the case -- at
        least on real hw. This is to be investigated later, too.

        * src/libANGLE/renderer/driver_utils.h:
        (rx::IsIOS):
        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::InitializeFeatures):

2020-09-11  James Darpinian  <jdarpinian@chromium.org>

        [WebGL2] Support EXT_color_buffer_half_float on WebGL 2.0 contexts
        https://bugs.webkit.org/show_bug.cgi?id=216010

        Reviewed by Kenneth Russell.

        * src/libANGLE/formatutils.cpp:
        (gl::SizedHalfFloatRGTextureAttachmentSupport):
        (gl::SizedHalfFloatRGBTextureAttachmentSupport):
        (gl::SizedHalfFloatRGBRenderbufferSupport):
        (gl::SizedHalfFloatRGBATextureAttachmentSupport):

2020-09-03  Kimmo Kinnunen  <kkinnunen@apple.com>

        Mark uniform samplers in an array unused per element
        https://bugs.webkit.org/show_bug.cgi?id=215630

        Reviewed by Dean Jackson.

        Mark uniform samplers in an uniform sampler array unused per
        element, if driver informs the element being unused.
        Before, one element would mark the whole array as being
        unused, and samplers that were in use would not be updated.

        * src/libANGLE/Context.cpp:
        (gl::StateCache::updateActiveImageUnitIndices):
        * src/libANGLE/Program.cpp:
        (gl::SamplerBinding::SamplerBinding):
        (gl::ImageBinding::ImageBinding):
        (gl::Program::getSamplerUniformBinding const):
        (gl::Program::getImageUniformBinding const):
        (gl::Program::linkSamplerAndImageBindings):
        (gl::Program::updateSamplerUniform):
        (gl::Program::serialize const):
        (gl::Program::deserialize):
        * src/libANGLE/ProgramExecutable.cpp:
        (gl::ProgramExecutable::updateActiveSamplers):
        (gl::ProgramExecutable::updateActiveImages):
        (gl::ProgramExecutable::setSamplerUniformTextureTypeAndFormat):
        * src/libANGLE/ProgramExecutable.h:
        * src/libANGLE/renderer/gl/ProgramGL.cpp:
        (rx::ProgramGL::markUnusedUniformLocations):
        * src/libANGLE/renderer/metal/ProgramMtl.mm:
        (rx::ProgramMtl::updateTextures):
        * src/libANGLE/renderer/vulkan/ProgramExecutableVk.cpp:
        (rx::ProgramExecutableVk::updateImagesDescriptorSet):
        (rx::ProgramExecutableVk::updateTexturesDescriptorSet):
        * src/tests/gl_tests/ComputeShaderTest.cpp:
        * src/tests/gl_tests/UniformTest.cpp:

2020-09-01  David Kilzer  <ddkilzer@apple.com>

        [ANGLE] InternalFormat::blendSupport is uninitialized by constructor
        <https://webkit.org/b/216053>
        <rdar://problem/68166032>

        Reviewed by Kenneth Russell.

        * changes.diff: Add this patch.
        * src/libANGLE/formatutils.cpp:
        (gl::InternalFormat::InternalFormat):
        - Initialize blendSupport to NeverSupported.

2020-08-31  James Darpinian  <jdarpinian@chromium.org>

        Implement WEBGL_compressed_texture_s3tc_srgb extension
        https://bugs.webkit.org/show_bug.cgi?id=215973

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/gl/formatutilsgl.cpp:
        (rx::nativegl::ExtAndVersionOrExt):
        (rx::nativegl::BuildInternalFormatInfoMap):

2020-08-12  Keith Rollin  <krollin@apple.com>

        Remove the need for defining USE_NEW_BUILD_SYSTEM
        https://bugs.webkit.org/show_bug.cgi?id=215439

        Reviewed by Darin Adler.

        When building WebKit for XCBuild, we currently require that the
        external build system (such as the Makefile, build-webkit, etc.)
        defines the USE_NEW_BUILD_SYSTEM=YES build setting. This build setting
        controls parts of our build instructions that are sensitive to when
        XCBuild or the Legacy build system are being used. Notably, we need to
        know when to use our custom “copy and modify” scripts with copying
        certain header files (used with the Legacy build system) vs. using the
        enhanced Copy Headers build phase that’s enabled with
        APPLY_RULES_IN_COPY_HEADERS=YES (introduced with and used by XCBuild).
        The choice of which method to copy headers is used is controlled by
        USE_NEW_BUILD_SYSTEM.

        There is no built-in build setting that we can probe to help us
        determine which approach to take when copying and modifying headers,
        which is why we need to define USE_NEW_BUILD_SYSTEM ourselves. But it
        turns out that we can *detect* which build system is being used by
        taking advantage of a subtle difference between the two systems. As
        noted in:

            https://developer.apple.com/documentation/xcode-release-notes/build-system-release-notes-for-xcode-10

            “When an .xcconfig file contains multiple assignments of the same
             build setting, later assignments using $(inherited) or
             $(<setting_name>) will inherit from earlier assignments in the
             .xcconfig. The legacy build system caused every use of
             $(inherited) or $(<setting_name>) skip any other values defined
             within the .xcconfig.”

        This difference can be exploited as follows:

            WK_WHICH_BUILD_SYSTEM = not_
            WK_WHICH_BUILD_SYSTEM = $(inherited)legacy
            WK_USE_NEW_BUILD_SYSTEM = $(WK_USE_NEW_BUILD_SYSTEM_$(WK_WHICH_BUILD_SYSTEM))
            WK_USE_NEW_BUILD_SYSTEM_legacy = NO
            WK_USE_NEW_BUILD_SYSTEM_not_legacy = YES

        We can then use WK_USE_NEW_BUILD_SYSTEM where we used to use the
        externally-defined USE_NEW_BUILD_SYSTEM.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE-dynamic.xcconfig:
        * Configurations/ANGLE-static.xcconfig:
        * Configurations/Base.xcconfig:

2020-08-07  Dean Jackson  <dino@apple.com>

        ANGLE: No need to check for Catalyst in the iOS build
        https://bugs.webkit.org/show_bug.cgi?id=215249
        <rdar://problem/66655478>

        Reviewed by Tim Horton.

        The DisplayEAGL class is never used for Catalyst, so doesn't
        need to handle it.

        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm:
        (rx::DisplayEAGL::generateConfigs):

2020-08-05  Tim Horton  <timothy_horton@apple.com>

        Remove all references to non-existent 10.16
        https://bugs.webkit.org/show_bug.cgi?id=215202

        Reviewed by Wenson Hsieh.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2020-07-29  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] 2.29.4 fails to link on armv7hl
        https://bugs.webkit.org/show_bug.cgi?id=214934

        Reviewed by Carlos Alberto Lopez Perez.

        Link ANGLE to with -ldl

        * CMakeLists.txt:

2020-07-29  Kenneth Russell  <kbr@chromium.org>

        Roll ANGLE to 2020-07-28
        https://bugs.webkit.org/show_bug.cgi?id=214897

        Reviewed by Alex Christensen.

        Roll to current ANGLE revision. Large ChangeLog below has been
        truncated except for a few significant files.

        Add dependency on zlib wrapper in third_party/zlib/google for both
        Xcode and CMake builds. Small change to this wrapper for the
        WinCairo build's system zlib, which doesn't define z_const.

        * .gitignore:
        * ANGLE.plist:
        * ANGLE.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * Configurations/ANGLE-dynamic.xcconfig:
        * Configurations/ANGLE-static.xcconfig:
        * GLESv2.cmake:
        * PlatformWin.cmake:
        * third_party/zlib/google/compression_utils_portable.cc: Added.
        * third_party/zlib/google/compression_utils_portable.h: Added.

2020-07-28  Kenneth Russell  <kbr@chromium.org>

        Pause during ANGLE roll script after rebasing and before deleting temporary Git repo
        https://bugs.webkit.org/show_bug.cgi?id=212717

        Reviewed by Dean Jackson.

        Give the user the opportunity to manually examine the changes
        relative to upstream ANGLE, and to undo any accidental or
        undesired ones, before finishing the roll.

        * update-angle.sh:

2020-07-22  Conrad Shultz  <conrad_shultz@apple.com>

        Update macOS Version macros
        https://bugs.webkit.org/show_bug.cgi?id=214653

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2020-07-17  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] Fix validation of pixel unpack parameters
        https://bugs.webkit.org/show_bug.cgi?id=214509

        Reviewed by Dean Jackson.

        Fix small error discovered while upstreaming the previous fix to
        the ANGLE project.

        * src/libANGLE/validationES3.cpp:
        (gl::ValidateES3TexImageParametersBase):

2020-07-17  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] ReadPixels updates
        https://bugs.webkit.org/show_bug.cgi?id=209516

        Reviewed by Dean Jackson.

        Add workaround for OpenGL driver bug on macOS where
        GL_PACK_SKIP_ROWS and GL_PACK_SKIP_PIXELS are ignored.

        Add WebGL 2.0-specific validation constraints for pixel pack and
        unpack parameters.

        These changes are being upstreamed to ANGLE in
        http://crbug.com/angleproject/4849 .

        * include/platform/FeaturesGL.h:
        * src/libANGLE/ErrorStrings.h:
        * src/libANGLE/renderer/gl/FramebufferGL.cpp:
        (rx::FramebufferGL::readPixels):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::InitializeFeatures):
        * src/libANGLE/validationES.cpp:
        (gl::ValidatePixelPack):
        * src/libANGLE/validationES3.cpp:
        (gl::ValidateES3TexImageParametersBase):

2020-07-10  Kenneth Russell  <kbr@chromium.org>

        Remove glBindFramebuffer flush workaround from ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=214104

        Reviewed by Dean Jackson.

        Remove this driver bug workaround, which very likely had no
        effect, and which was never upstreamed to ANGLE.

        * include/platform/FeaturesGL.h:
        * src/libANGLE/renderer/gl/StateManagerGL.cpp:
        (rx::StateManagerGL::bindFramebuffer):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::InitializeFeatures):

2020-07-08  Darin Adler  <darin@apple.com>

        Fix adjust-angle-include-paths.sh error seen building ANGLE library
        https://bugs.webkit.org/show_bug.cgi?id=214059

        Reviewed by Alexey Proskuryakov.

        * ANGLE.xcodeproj/project.pbxproj: Remove the build step that adjusts paths.
        Dean Jackson told me we don't need it for the static library target.

2020-06-30  Andy Estes  <aestes@apple.com>

        [Xcode] Enable the "My Mac (Mac Catalyst)" destination in WebKit Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=213740

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Set SUPPORTS_MACCATALYST to YES to tell Xcode that this
        project supports building for Mac Catalyst.

2020-06-22  Tim Horton  <timothy_horton@apple.com>

        Update macOS version macros
        https://bugs.webkit.org/show_bug.cgi?id=213484

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2020-06-22  Tim Horton  <timothy_horton@apple.com>

        WebGL cannot create a context if there is no GPU on the PCIe bus
        https://bugs.webkit.org/show_bug.cgi?id=213479

        Reviewed by Maciej Stachowiak and Dean Jackson.

        * src/gpu_info_util/SystemInfo_macos.mm:
        (angle::GetSystemInfo):
        Do not bail from WebGL initialization if there are no GPUs on the PCIe bus.
        Instead, continue on to context creation, and allow the system frameworks
        to return an error if there truly is no GPU.

2020-06-19  Jonathan Bedard  <jbedard@apple.com>

        [ANGLE] Correct Catalyst guards
        https://bugs.webkit.org/show_bug.cgi?id=211410
        <rdar://problem/62891185>

        Reviewed by Dean Jackson.

        * src/libANGLE/renderer/gl/eagl/DeviceEAGL.cpp: Do not compile on Mac.
        * src/libANGLE/renderer/gl/eagl/DeviceEAGL.h:  Definitions should not be available on Mac.
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.h: Definitions should not be available on Mac.
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm: Do not compile on Mac.

2020-06-10  Dean Jackson  <dino@apple.com>

        Add a dynamic library target for ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=207591

        Reviewed by Tim Horton.

        In preparation for moving to a dynamic library, start
        by compiling and linking it. It isn't used anywhere
        but getting it into the build will help Apple's
        build system remain happy as we migrate, as well
        as have the system know it exists for building
        the shared system cache.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE-dynamic.xcconfig: Added.
        * Configurations/ANGLE-static.xcconfig: Added.
        * Configurations/ANGLE.xcconfig: Removed.
        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2020-06-07  James Darpinian  <jdarpinian@chromium.org>

        [ANGLE - iOS] fast/canvas/webgl/uninitialized-test.html is still failing
        https://bugs.webkit.org/show_bug.cgi?id=212249

        Reviewed by Dean Jackson.

        copyTexImage2D is broken in some way on iOS. Work around it by reimplementing
        it with ANGLE's BlitGL class.

        * include/platform/FeaturesGL.h:
        * src/libANGLE/renderer/gl/BlitGL.cpp:
        (rx::BlitGL::blitColorBufferWithShader):
        * src/libANGLE/renderer/gl/BlitGL.h:
        * src/libANGLE/renderer/gl/TextureGL.cpp:
        (rx::TextureGL::copyImage):
        (rx::TextureGL::copySubImage):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::InitializeFeatures):
        * src/tests/gl_tests/CopyTexImageTest.cpp:
        * src/tests/gl_tests/TextureTest.cpp:
        * src/tests/test_utils/angle_test_configs.cpp:
        (angle::operator<<):
        * src/tests/test_utils/angle_test_configs.h:
        (angle::WithEmulateCopyTexImage2DFromRenderbuffers):
        * util/EGLPlatformParameters.h:
        (EGLPlatformParameters::tie const):
        * util/EGLWindow.cpp:
        (EGLWindow::initializeDisplay):

2020-06-04  Tim Horton  <timothy_horton@apple.com>

        Work around broken system version macro
        https://bugs.webkit.org/show_bug.cgi?id=212726

        Reviewed by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

2020-06-02  Keith Rollin  <krollin@apple.com>

        Change ANGLE's header postprocessing script to not rely on timestamps
        https://bugs.webkit.org/show_bug.cgi?id=212623
        <rdar://problem/63856997>

        Reviewed by David Kilzer.
        Reviewed by Kennneth Russell.

        Some WebKit builds involve multiple passes, where each pass is a
        superset of the previous pass. In the cases where each pass produces
        the same files, it is required that files be produced in exactly the
        same way in each of those passes. A build process that relies on a
        file containing a timestamp trips up that prerequisite.

        adjust-angle-include-paths.sh uses such a mechanism, using a timestamp
        file to determine if any exported headers need to be post-processed.
        Since this violates our prerequisite, we need a different approach.
        Instead of using a timestamp, always perform the post-processing, but
        write the output to a temporary location. Then see if it differs from
        what's in the actual final destination. If the two files diff, then
        copy the one from the temporary location to the final destination.

        This approach does cause more work in the area of post-processing.
        However, this post-processing is actually very cheap. And avoiding the
        post-processing is not actually the original goal of the timestamp.
        The actual goal is to avoid touching the modification dates of the
        exported headers, which would then cause a lot of downstream
        rebuilding. The new approach with the temporary files also achieves
        that goal.

        * CMakeLists.txt:
        * adjust-angle-include-paths.sh:

2020-06-02  Kenneth Russell  <kbr@chromium.org>

        Revise PVRTC compressed texture validation in ANGLE backend for WebGL
        https://bugs.webkit.org/show_bug.cgi?id=212612

        Reviewed by Dean Jackson.

        Correct the block sizes of PVRTC textures, and incorporate minimum
        block sizes for width and height, as required by these formats.

        * src/libANGLE/formatutils.cpp:
        (gl::BuildInternalFormatInfoMap):
        (gl::InternalFormat::computeCompressedImageSize const):
        (gl::InternalFormat::getCompressedImageMinBlocks const):
        * src/libANGLE/formatutils.h:

2020-05-29  Keith Rollin  <krollin@apple.com>

        Revert switch to XCBuild
        https://bugs.webkit.org/show_bug.cgi?id=212530
        <rdar://problem/63764632>

        Unreviewed build fix.

        Bug 209890 enabled the use of XCBuild by default. Since then, some
        build issues have shown up. While addressing them, temporarily turn
        off the use of XCBuild by default.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE.xcconfig:

2020-05-27  Keith Rollin  <krollin@apple.com>

        Enable the use of XCBuild by default in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=209890
        <rdar://problem/44182078>

        Unreviewed build fix. Check the value of XCODE_VERSION_ACTUAL rather
        than XCODE_VERSION_MAJOR when determining whether to use the XCBuild
        or non-XCBuild method of running header post-processing scripts.

        * ANGLE.xcodeproj/project.pbxproj:

2020-05-26  Keith Rollin  <krollin@apple.com>

        Enable the use of XCBuild by default in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=209890
        <rdar://problem/44182078>

        Reviewed by Darin Adler.

        Switch from the "legacy" Xcode build system to the "new" build system
        (also known as "XCBuild"). Switching to the new system speeds up
        builds by a small percentage, better validates projects for
        build-related issues (such as dependency cycles), lets WebKit benefit
        from future improvements in XCBuild such as those coming from the
        underlying llbuild open source project, and prepares us for any other
        tools built for this new ecosystem.

        Specific changes:

        - Remove Xcode project and workspace settings that selected the Build
          system, allowing the default to take hold (which is currently the
          New build system).
        - Updated webkitdirs.pm with a terser check for Xcode version.
        - Update build-webkit and Makefile.shared to be explicit when using
          the old build system (no longer treat it as a default or fall-back
          configuration).
        - Update various xcconfig files similarly to treat the default as
          using the new build system.
        - Update various post-processing build steps to check for Xcode 11.4
          and to no longer treat the default as using the old build system.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE.xcconfig:

2020-05-22  Kenneth Russell  <kbr@chromium.org>

        [ANGLE - iOS] webgl/1.0.3/conformance/extensions/ext-sRGB.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=212277

        Reviewed by Dean Jackson.

        Properly translate GL_EXT_sRGB enums to ES 3.0 enums when
        GL_EXT_sRGB is not supported.

        * src/libANGLE/renderer/gl/formatutilsgl.cpp:
        (rx::nativegl::GetNativeInternalFormat):
        (rx::nativegl::GetNativeFormat):

2020-05-22  Kenneth Russell  <kbr@chromium.org>

        [ANGLE - iOS] fast/canvas/webgl/webgl-depth-texture.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=212271

        Reviewed by Dean Jackson.

        Use ES 3.0 sized internal formats for unsized depth/stencil
        textures when the OES_depth_texture extension is unavailable - as
        is the case in iOS's ES 3.0 driver.

        * src/libANGLE/renderer/gl/formatutilsgl.cpp:
        (rx::nativegl::GetNativeInternalFormat):

2020-05-21  Dean Jackson  <dino@apple.com>

        PVRTC compressed textures are failing with ANGLE backend
        https://bugs.webkit.org/show_bug.cgi?id=212240
        <rdar://problem/63517385>

        Reviewed by Ken Russell (representing ANGLE).

        The values used for the PVRTC formats were incorrect.

        * src/libANGLE/formatutils.cpp:
        (gl::BuildInternalFormatInfoMap):

2020-05-21  Kenneth Russell  <kbr@chromium.org>

        Roll ANGLE to 2020-05-21
        https://bugs.webkit.org/show_bug.cgi?id=212228

        Reviewed by Dean Jackson.

        Roll ANGLE to 96a80283cc0fe604d03c0bc0b3f9eb100edd22f9 in the
        upstream repository using jdarpinian's excellent update-angle.sh
        script.

        Manually undo the fix from Bug 210992, which was fixed differently
        upstream.

2020-05-21  Kenneth Russell  <kbr@chromium.org>

        EXT_color_buffer_half_float not exposed on iOS
        https://bugs.webkit.org/show_bug.cgi?id=212181

        Reviewed by Dean Jackson.

        Remove OES_texture_half_float requirement for advertising
        EXT_color_buffer_half_float in ANGLE. This is implicit in ES 3.0.

        * src/libANGLE/renderer/gl/formatutilsgl.cpp:
        (rx::nativegl::BuildInternalFormatInfoMap):

2020-05-20  Kenneth Russell  <kbr@chromium.org>

        OES_texture_half_float_linear unavailable on WebGL 1.0 on iOS with ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=212170

        Reviewed by Dean Jackson.

        Now that FP16 luminance/alpha texture formats are correctly
        emulated on ES 3.0, advertise them as filterable.

        * src/libANGLE/renderer/gl/formatutilsgl.cpp:
        (rx::nativegl::BuildInternalFormatInfoMap):

2020-05-20  Kenneth Russell  <kbr@chromium.org>

        OES_texture_float / OES_texture_half_float unavailable in WebGL 1.0 on iOS Simulator with ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=210524

        Reviewed by Dean Jackson.

        Emulate LUMINANCE, ALPHA and LUMINANCE_ALPHA floating-point
        textures on top of RED / RG textures when the underlying
        OES_texture_float/half_float OpenGL ES extensions are unavailable.

        This makes the conformance/extensions/oes-texture{-half}-float*
        tests run and pass in the iOS Simulator.

        This change is being reviewed upstream in the ANGLE repository and
        is only being uploaded here for testing purposes. It will be
        rolled in with the next ANGLE update.

        * src/libANGLE/renderer/gl/TextureGL.cpp:
        (rx::TextureGL::setSwizzle):
        * src/libANGLE/renderer/gl/formatutilsgl.cpp:
        (rx::nativegl::BuildInternalFormatInfoMap):
        (rx::nativegl::IsLUMAFormat):
        (rx::nativegl::EmulateLUMAFormat):
        (rx::nativegl::EmulateLUMA):
        (rx::nativegl::GetNativeInternalFormat):
        (rx::nativegl::GetNativeFormat):
        (rx::nativegl::GetNativeType):
        (rx::nativegl::GetTexImageFormat):
        (rx::nativegl::GetTexSubImageFormat):

2020-05-18  James Darpinian  <jdarpinian@chromium.org>

        Enable regenerateStructNames workaround on iOS
        https://bugs.webkit.org/show_bug.cgi?id=212056

        Reviewed by Dean Jackson.

        The WebGL conformance test conformance/glsl/misc/shader-struct-scope.html
        was failing on iOS. The workaround that fixes this test was enabled only on
        desktop GL, but it's necessary for iOS as well.

        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::InitializeFeatures):

2020-05-14  James Darpinian  <jdarpinian@chromium.org>

        REGRESSION (r259589): Google Maps background layer fades out and back in
        https://bugs.webkit.org/show_bug.cgi?id=210992

        Reviewed by Dean Jackson.

        ANGLE rendering feedback loop detection was incorrect if a texture attached
        to a framebuffer was also bound to an active texture unit, and then that texture
        unit became inactive because a sampler uniform was set.

        * src/libANGLE/Context.cpp:
        (gl::Context::onSamplerUniformChange):
        * src/libANGLE/State.cpp:
        (gl::State::setTextureIndexInactive):
        * src/libANGLE/State.h:

2020-05-14  Kenneth Russell  <kbr@chromium.org>

        Update ANGLE to 2020-03-27
        https://bugs.webkit.org/show_bug.cgi?id=209689

        Reviewed by Darin Adler.

        Re-applying this patch now that we have a fix for 210992.

        Use update-angle.sh script by James Darpinian to roll ANGLE to
        commit b387ce9389ede6a4ed3b831ab1b8187927fa295f in
        https://chromium.googlesource.com/angle/angle .

        changes.diff has been auto-updated with Apple's diffs relative to
        upstream. No additional manual changes are made in this roll.
        Long autogenerated file list omitted.

2020-05-08  David Kilzer  <ddkilzer@apple.com>

        Remove empty directories from from svn.webkit.org repository
        <https://webkit.org/b/211644>

        Reviewed by Darin Adler.

        * include/vulkan: Removed.
        * src/android_system_settings: Removed.
        * third_party/glmark2: Removed.
        * tools/flex-bison: Removed.

2020-05-07  James Darpinian  <jdarpinian@chromium.org>

        Fix Google Maps rendering corruption in simulator with ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=211398

        glReadPixels call needs to respect the row stride of the IOSurface.

        Reviewed by Alex Christensen.

        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.h:
        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:
        (rx::IOSurfaceSurfaceEAGL::IOSurfaceSurfaceEAGL):
        (rx::IOSurfaceSurfaceEAGL::releaseTexImage):

2020-05-07  Dean Jackson  <dino@apple.com>

        Update ANGLE to 2020-03-27
        https://bugs.webkit.org/show_bug.cgi?id=209689

        Reverting r259589. It caused
        https://bugs.webkit.org/show_bug.cgi?id=210992

2020-05-05  Saam Barati  <sbarati@apple.com>

        Unreviewed, reverting r261176.

        It broke the build

        Reverted changeset:

        "[ANGLE] Declarations should match definitions"
        https://bugs.webkit.org/show_bug.cgi?id=211410
        https://trac.webkit.org/changeset/261176

2020-05-05  Jonathan Bedard  <jbedard@apple.com>

        [ANGLE] Declarations should match definitions
        https://bugs.webkit.org/show_bug.cgi?id=211410

        Reviewed by Alex Christensen.

        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.h: Skip definitions for platforms
        where class is undefined.
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm:
        (rx::DisplayEAGL::generateConfigs): Function is not defined for for MacCatalyst.
        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.h: Skip definitions for platforms
        where class is undefined.
        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:
        * src/libANGLE/renderer/gl/eagl/WindowSurfaceEAGL.h: Skip definitions for platforms
        where class is undefined.
        * src/libANGLE/renderer/gl/eagl/WindowSurfaceEAGL.mm:

2020-04-28  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Fix build failures for ANGLE_WEBGL after r259589
        https://bugs.webkit.org/show_bug.cgi?id=211116

        Reviewed by Alex Christensen.

        The ANGLE_WEBGL is broken after ANGLE is updated in r259589. Missing sources
        should be added to the build target.

        * PlatformGTK.cmake: Add libangle_gl_egl_sources and libangle_gl_egl_dl_sources.

2020-04-27  Dean Jackson  <dino@apple.com>

        Temporarily skip GL_DEPTH_COMPONENT32_OES requirement for depth textures on iOS
        https://bugs.webkit.org/show_bug.cgi?id=211055
        <rdar://problem/62410499>

        Reviewed by Darin Adler.

        ANGLE requires GL_DEPTH_COMPONENT32_OES be available in order to expose the
        depth texture extension. However, this format is not supported on iOS.
        Temporarily remove this restriction while investigating other bugs.

        This also allows us to see the failing results in
        fast/canvas/webgl/webgl-depth-texture.html
        webgl/1.0.3/conformance/extensions/webgl-depth-texture.html

        * src/libANGLE/Caps.cpp:
        (gl::DetermineDepthTextureANGLESupport):
        (gl::DetermineDepthTextureOESSupport):

2020-04-25  Darin Adler  <darin@apple.com>

        [Cocoa] Deal with another round of Xcode upgrade checks
        https://bugs.webkit.org/show_bug.cgi?id=211027

        Reviewed by Alexey Proskuryakov.

        * ANGLE.xcodeproj/project.pbxproj: Bump the upgrade check version.
        Add a harmless base localization, rename English localization to en,
        remove Japanese, French, German; this project contains nothing localized.

2020-04-08  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r259708.

        Broke the iOS device Build

        Reverted changeset:

        "Enable the use of XCBuild by default in Apple builds"
        https://bugs.webkit.org/show_bug.cgi?id=209890
        https://trac.webkit.org/changeset/259708

2020-04-08  Keith Rollin  <krollin@apple.com>

        Enable the use of XCBuild by default in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=209890
        <rdar://problem/44182078>

        Reviewed by Darin Adler.

        Switch from the "legacy" Xcode build system to the "new" build system
        (also known as "XCBuild"). Switching to the new system speeds up
        builds by a small percentage, better validates projects for
        build-related issues (such as dependency cycles), lets WebKit benefit
        from future improvements in XCBuild such as those coming from the
        underlying llbuild open source project, and prepares us for any other
        tools built for this new ecosystem.

        Specific changes:

        - Remove Xcode project and workspace settings that selected the Build
          system, allowing the default to take hold (which is currently the
          New build system).
        - Updated webkitdirs.pm with a terser check for Xcode version.
        - Update build-webkit and Makefile.shared to be explicit when using
          the old build system (no longer treat it as a default or fall-back
          configuration).
        - Update various xcconfig files similarly to treat the default as
          using the new build system.
        - Update various post-processing build steps to check for Xcode 11.4
          and to no longer treat the default as using the old build system.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE.xcconfig:

2020-04-06  Kenneth Russell  <kbr@chromium.org>

        Update ANGLE to 2020-03-27
        https://bugs.webkit.org/show_bug.cgi?id=209689

        Reviewed by Darin Adler.

        Use update-angle.sh script by James Darpinian to roll ANGLE to
        commit b387ce9389ede6a4ed3b831ab1b8187927fa295f in
        https://chromium.googlesource.com/angle/angle .

        changes.diff has been auto-updated with Apple's diffs relative to
        upstream. No additional manual changes are made in this roll.
        Long autogenerated file list omitted.

2020-04-03  Kenneth Russell  <kbr@chromium.org>

        Fix bugs related to VideoTextureCopierCV and ANGLE roll script
        https://bugs.webkit.org/show_bug.cgi?id=209943

        Reviewed by Dean Jackson.

        Update the update-angle.sh script to take into account the new
        procedure for generating ANGLE's commit ID header file. This
        enables ANGLE rolls into WebKit again.

        * update-angle.sh:

2020-04-03  Keith Rollin  <krollin@apple.com>

        Do not link with OpenGL on Apple platforms
        https://bugs.webkit.org/show_bug.cgi?id=209946
        <rdar://problem/61237956>

        Reviewed by Sam Weinig.

        OpenGL is not used in our build of ANGLE. Attempting to link with it
        causes warnings, which can turn into errors in some cases (in
        particular, when building with Xcode's "new" build system).

        * ANGLE.xcodeproj/project.pbxproj:

2020-04-03  David Kilzer  <ddkilzer@apple.com>

        [Xcode] Replace ASAN_OTHER_CFLAGS and ASAN_OTHER_CPLUSPLUSFLAGS with $(inherited)
        <https://webkit.org/b/209963>
        <rdar://problem/61257504>

        Reviewed by Alexey Proskuryakov.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/Base.xcconfig:
        - Remove ASAN_OTHER_CFLAGS, ASAN_OTHER_CPLUSPLUSFLAGS and
          ASAN_OTHER_LDFLAGS.

2020-03-27  Kenneth Russell  <kbr@chromium.org>

        Use ANGLE_robust_client_memory to replace framebuffer/texture validation
        https://bugs.webkit.org/show_bug.cgi?id=209098

        Reviewed by Dean Jackson.

        Incorporated fix from anglebug.com/4504 to make
        fast/canvas/webgl/uninitialized-test.html pass.

        Incorporated fix from anglebug.com/4518 to make:
         webgl/2.0.0/conformance2/renderbuffers/invalidate-framebuffer.html
         webgl/2.0.0/conformance2/rendering/blitframebuffer-test.html
         webgl/2.0.0/conformance2/rendering/rgb-format-support.html
         webgl/2.0.0/conformance2/state/gl-object-get-calls.html
         webgl/2.0.0/conformance2/textures/misc/tex-new-formats.html
        pass.

        * src/libANGLE/Texture.cpp:
        (gl::Texture::copySubImage):
        (gl::Texture::ensureSubImageInitialized):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::InitializeFeatures):

2020-03-21  Keith Rollin  <krollin@apple.com>

        Set INSTALLHDRS_SCRIPT_PHASE in ANGLE builds
        https://bugs.webkit.org/show_bug.cgi?id=209384
        <rdar://problem/59513380>

        Reviewed by Dan Bernstein.

        Production ANGLE builds are technically non-compliant. During the
        installhdrs build action, ANGLE headers are exported but are not
        post-processed. This differs from the install build action, where the
        exported headers *are* post-processed. The headers need to be treated
        identically under both actions. The post-processing is enabled by
        setting the INSTALLHDRS_SCRIPT_PHASE build setting to YES. Most other
        WebKit projects already set this setting (see, for example,
        https://trac.webkit.org/changeset/155787,
        https://trac.webkit.org/changeset/110327, and
        https://trac.webkit.org/changeset/41417).

        * Configurations/ANGLE.xcconfig:

2020-03-15  Michael Catanzaro  <mcatanzaro@gnome.org>

        [ANGLE] Source/ThirdParty/ANGLE/src/common/utilities.cpp:10: warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas]
        https://bugs.webkit.org/show_bug.cgi?id=209014

        Reviewed by Darin Adler.

        Silence compiler warning.

        * changes.diff:
        * src/common/utilities.cpp:

2020-03-15  Michael Catanzaro  <mcatanzaro@gnome.org>

        [ANGLE] Source/ThirdParty/ANGLE/src/libANGLE/Display.h:221:73: warning: implicitly-declared ‘egl::AttributeMap& egl::AttributeMap::operator=(const egl::AttributeMap&)’ is deprecated [-Wdeprecated-copy]
        https://bugs.webkit.org/show_bug.cgi?id=209015

        Reviewed by Darin Adler.

        Suppress compiler warning. If this were WebKit code, I might take the time to fix it, but
        with third-party code it's probably best to just turn off warnings that upstream is not
        using.

        * CMakeLists.txt:

2020-03-02  Alan Coon  <alancoon@apple.com>

        Add new Mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=208398

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2020-02-12  Michael Catanzaro  <mcatanzaro@gnome.org>

        Multiple GCC 10 build failures in ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=207365

        Reviewed by Carlos Alberto Lopez Perez.

        * changes.diff: Updated.
        * include/platform/Platform.h: Add missing #include to get size_t.
        * src/common/PackedEnums.h: Remove problematic const_casts.

2020-02-12  Dean Jackson  <dino@apple.com>

        ANGLE has unused bison and glmark2 code
        https://bugs.webkit.org/show_bug.cgi?id=207597
        rdar://59361460

        Reviewed by Maciej Stachowiak.

        Remove some unused files.

        * changes.diff:
        * src/tests/perf_tests/glmark2Benchmark.cpp: Removed.
        * third_party/glmark2/BUILD.gn: Removed.
        * third_party/glmark2/README.angle: Removed.
        * tools/flex-bison/README.md: Removed.
        * tools/flex-bison/linux/bison.sha1: Removed.
        * tools/flex-bison/linux/flex.sha1: Removed.
        * tools/flex-bison/third_party/.gitattributes: Removed.
        * tools/flex-bison/third_party/m4sugar/LICENSE: Removed.
        * tools/flex-bison/third_party/m4sugar/README.chromium: Removed.
        * tools/flex-bison/third_party/m4sugar/foreach.m4: Removed.
        * tools/flex-bison/third_party/m4sugar/m4sugar.m4: Removed.
        * tools/flex-bison/third_party/skeletons/LICENSE: Removed.
        * tools/flex-bison/third_party/skeletons/README.chromium: Removed.
        * tools/flex-bison/third_party/skeletons/bison.m4: Removed.
        * tools/flex-bison/third_party/skeletons/c-like.m4: Removed.
        * tools/flex-bison/third_party/skeletons/c.m4: Removed.
        * tools/flex-bison/third_party/skeletons/yacc.c: Removed.
        * tools/flex-bison/update_flex_bison_binaries.py: Removed.
        * tools/flex-bison/windows/bison.exe.sha1: Removed.
        * tools/flex-bison/windows/flex.exe.sha1: Removed.
        * tools/flex-bison/windows/m4.exe.sha1: Removed.
        * tools/flex-bison/windows/msys-2.0.dll.sha1: Removed.
        * tools/flex-bison/windows/msys-iconv-2.dll.sha1: Removed.
        * tools/flex-bison/windows/msys-intl-8.dll.sha1: Removed.

2020-02-09  Keith Rollin  <krollin@apple.com>

        Re-enable LTO for ARM builds
        https://bugs.webkit.org/show_bug.cgi?id=207402
        <rdar://problem/49190767>

        Reviewed by Sam Weinig.

        Bug 190758 re-enabled LTO for Production builds for x86-family CPUs.
        Enabling it for ARM was left out due to a compiler issue. That issue
        has been fixed, and so now we can re-enable LTO for ARM.

        * Configurations/Base.xcconfig:

2020-02-07  Kenneth Russell  <kbr@chromium.org>

        Try adding glBindFramebuffer flush workaround to ANGLE as remedy for flaky WebGL tests
        https://bugs.webkit.org/show_bug.cgi?id=206625

        Reviewed by Dean Jackson.

        * include/platform/FeaturesGL.h:
        * src/libANGLE/renderer/gl/StateManagerGL.cpp:
        (rx::StateManagerGL::bindFramebuffer):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::InitializeFeatures):

2020-02-05  Dean Jackson  <dino@apple.com>

        Fix MacCatalyst build.

        * src/libANGLE/validationEGL.cpp:
        (egl::ValidateCreatePbufferFromClientBuffer):

2020-02-04  James Darpinian  <jdarpinian@chromium.org>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=206318

        Several important changes to fix layout test failures and timeouts in this update.
        - Made expensive validation non-default in debug mode to reduce timeouts.
        - Optimize disabling ARB_texture_rectangle to make shader compilation much faster.
        - Flush before texture deletion to work around Mac Intel driver bug.

        Reviewed by Dean Jackson.

        * ANGLE.plist: update commit hash
        * ANGLE.xcodeproj/project.pbxproj: Add/remove files
        * Compiler.cmake: Translated from compiler.gni
        * GLESv2.cmake: Translated from libGLESv2.gni
        * changes.diff: Now lists all changes from upstream.
        * update-angle.sh: Diff command was wrong.
        * Plus a whole lot of changes from upstream.

2020-01-30  James Darpinian  <jdarpinian@chromium.org>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=206318

        Take two!

        Several important changes to fix layout test failures and timeouts in this update.
        - Made expensive validation non-default in debug mode to reduce timeouts.
        - Optimize disabling ARB_texture_rectangle to make shader compilation much faster.
        - Flush before texture deletion to work around Mac Intel driver bug.

        Reviewed by Dean Jackson.

        * ANGLE.plist: update commit hash
        * ANGLE.xcodeproj/project.pbxproj: Add/remove files
        * Compiler.cmake: Translated from compiler.gni
        * GLESv2.cmake: Translated from libGLESv2.gni
        * changes.diff: Now lists all changes from upstream.
        * update-angle.sh: Diff command was wrong.
        * Plus a whole lot of changes from upstream.

2020-01-22  James Darpinian  <jdarpinian@chromium.org>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=206318

        Several important changes to fix layout test failures and timeouts in this update.
        - Made expensive validation non-default in debug mode to reduce timeouts.
        - Optimize disabling ARB_texture_rectangle to make shader compilation much faster.
        - Flush before texture deletion to work around Mac Intel driver bug.

        Reviewed by Dean Jackson.

        * ANGLE.plist: update commit hash
        * ANGLE.xcodeproj/project.pbxproj: Add/remove files
        * Compiler.cmake: Translated from compiler.gni
        * GLESv2.cmake: Translated from libGLESv2.gni
        * changes.diff: Now lists all changes from upstream.
        * update-angle.sh: Diff command was wrong.
        * Plus a whole lot of changes from upstream.

2020-01-22  James Darpinian  <jdarpinian@chromium.org>

        REGRESSION (r253926): webgl/1.0.3/conformance/rendering/many-draw-calls.html is much slower, times out in debug
        https://bugs.webkit.org/show_bug.cgi?id=205668

        Disable asserts when compiling ANGLE in release mode by defining
        NDEBUG.

        Reviewed by Dean Jackson.

        * Configurations/ANGLE.xcconfig:

2020-01-14  Dean Jackson  <dino@apple.com>

        Build ANGLE as a dynamic library
        https://bugs.webkit.org/show_bug.cgi?id=204708
        rdar://57349384

        Rolling this out for the 2nd time.

        - it caused issues with the shared dyld cache, because the
        cache doesn't know to include the libary until it already
        exists in the build
        - probably related to the above, we saw some performance
        regressions directly related to this change

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE.xcconfig:
        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * include/CMakeLists.txt:
        * include/GLSLANG/ShaderLang.h:
        * include/GLSLANG/ShaderVars.h:
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm:
        (rx::DisplayCGL::isValidNativeWindow const):
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm:
        (rx::WindowSurfaceCGL::WindowSurfaceCGL):
        (rx::WindowSurfaceCGL::~WindowSurfaceCGL):
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm:
        (rx::DisplayEAGL::terminate):
        (rx::DisplayEAGL::isValidNativeWindow const):
        (rx::WorkerContextEAGL::~WorkerContextEAGL):
        * src/libANGLE/renderer/gl/eagl/WindowSurfaceEAGL.mm:
        (rx::WindowSurfaceEAGL::WindowSurfaceEAGL):
        (rx::WindowSurfaceEAGL::~WindowSurfaceEAGL):

2020-01-14  Kenneth Russell  <kbr@chromium.org>

        Need workaround for crash in Intel OpenGL driver related to texture copying feedback loops
        https://bugs.webkit.org/show_bug.cgi?id=205843

        Remove ANGLE workaround introduced in bug 205707, as it was
        discovered to be incomplete, and was never upstreamed. The correct
        workaround will be integrated in the next ANGLE roll.

        Reviewed by Dean Jackson.

        * include/platform/FeaturesGL.h:
        * src/libANGLE/renderer/gl/StateManagerGL.cpp:
        (rx::StateManagerGL::bindFramebuffer):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::InitializeFeatures):

2020-01-08  Kenneth Russell  <kbr@chromium.org>

        Remove some #ifdefs related to iOS port of ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=205781

        Since the port to the iOS Simulator in
        https://bugs.webkit.org/show_bug.cgi?id=205618 , these #ifdefs
        should no longer be needed.

        Reviewed by Dean Jackson.

        * src/common/PackedEnums.cpp:
        (egl_gl::EGLTextureTargetToTextureType):
        * src/libANGLE/validationES2.cpp:
        (gl::ValidateFramebufferTexture2D):

2020-01-05  Kenneth Russell  <kbr@chromium.org>

        REGRESSION (r253926): Flaky crashes on webgl/1.0.3/conformance/textures/texture-copying-feedback-loops.html and webgl/2.0.0/conformance/textures/misc/texture-copying-feedback-loops.html
        https://bugs.webkit.org/show_bug.cgi?id=205707

        Work around bugs in Intel's graphics driver where operations can
        be incorrectly reordered across glBindFramebuffer calls by
        flushing before/after these calls. Conclusively addresses this
        crash; may also address other layout test flakiness seen when
        switching to ANGLE backend for WebGL.

        Reviewed by Dean Jackson.

        * include/platform/FeaturesGL.h:
        * src/libANGLE/renderer/gl/StateManagerGL.cpp:
        (rx::StateManagerGL::bindFramebuffer):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::InitializeFeatures):

2020-01-04  Kenneth Russell  <kbr@chromium.org>

        Add support for iOS Simulator to ANGLE backend for WebGL
        https://bugs.webkit.org/show_bug.cgi?id=205618

        Extend EGL_ANGLE_iosurface_client_buffer extension to require use
        of TEXTURE_2D target on iOS, and to provide read/write usage hints
        for the pbuffer created from the IOSurface.

        Emulate missing [EAGLContext texImageIOSurface:...] via texture
        upload in eglBindTexImage and readback in eglReleaseTexImage.

        These changes will be upstreamed in
        https://bugs.chromium.org/p/angleproject/issues/detail?id=4256 .

        Reviewed by Dean Jackson.

        * extensions/EGL_ANGLE_iosurface_client_buffer.txt:
        * include/EGL/eglext_angle.h:
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm:
        (rx::DisplayEAGL::initialize):
        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.h:
        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:
        (rx::IOSurfaceSurfaceEAGL::IOSurfaceSurfaceEAGL):
        (rx::IOSurfaceSurfaceEAGL::bindTexImage):
        (rx::IOSurfaceSurfaceEAGL::releaseTexImage):
        (rx::IOSurfaceSurfaceEAGL::validateAttributes):
        (rx::IOSurfaceSurfaceEAGL::createDefaultFramebuffer):
        (rx::IOSurfaceSurfaceEAGL::getIOSurfaceLockOptions const):
        * src/libANGLE/validationEGL.cpp:
        (egl::ValidateCreatePbufferFromClientBuffer):

2019-12-25  Dean Jackson  <dino@apple.com>

        [WebGL] Enable ANGLE by default for Cocoa platforms (except simulator)
        https://bugs.webkit.org/show_bug.cgi?id=205483
        rdar://56925821

        Reviewed by Simon Fraser.

        Export entry_points_gles_ext_autogen.h.

        * ANGLE.xcodeproj/project.pbxproj:

2019-12-19  Dean Jackson  <dino@apple.com>

        Build ANGLE as a dynamic library
        https://bugs.webkit.org/show_bug.cgi?id=204708
        rdar://57349384

        Reviewed by Tim Horton.

        Take 2 at attempting this. The first time was rolled out
        due to failures in Apple's upstream build system.

        Modify ANGLE to build as a dynamic library. My (not thorough) testing suggests
        this will reduce the in-flight binary size on Apple's build systems by at least
        a factor of 10 (it was over 1G). Building release for x86_64-only:
            - Previously: libANGLE.a -- 306 MB
            - Now: libANGLE-shared.dylib -- 6.7 MB

        In order to do this, some symbols needed to be exported from the
        "sh" namespace (which are used in ANGLEWebKitBridge, but not when
        ANGLE's rendering backend is active).

        While here, I turned on some more build options, like ARC.

        Lastly, I added a build phase that creates a fake libANGLE.a
        because Apple's build system thinks that WebCore still needs it.

        * ANGLE.xcodeproj/project.pbxproj: Link with IOKit and IOSurface frameworks, and
        product a dylib product.
        * Configurations/ANGLE.xcconfig: Update the configuration for a dynamic library.
        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * include/GLSLANG/ShaderLang.h: Add ANGLE_EXPORT to some functions to make
        sure they will be visible in the exported library.
        * include/GLSLANG/ShaderVars.h:
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm: Change reinterpret_cast to a normal
        C cast so it can be annotated with __bridge.
        (rx::DisplayCGL::isValidNativeWindow const):
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm: Ditto.
        (rx::WindowSurfaceCGL::WindowSurfaceCGL):
        (rx::WindowSurfaceCGL::~WindowSurfaceCGL):
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm: Ditto.
        * src/libANGLE/renderer/gl/eagl/WindowSurfaceEAGL.mm: Ditto.

2019-12-19  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Build fix for ANGLE_WEBGL after r253650
        https://bugs.webkit.org/show_bug.cgi?id=205426

        Reviewed by Carlos Alberto Lopez Perez.

        libglesv2_entry_points_headers was removed in r253650 that updated CMake for ANGLE.
        GLESv2.cmake seems to be susceptible to ANGLE changes, so it might not be
        a good place where any platform specific configuration is located.
        Let's move the entry points header set to CMakeLists.txt.

        * CMakeLists.txt:

2019-12-18  Dean Jackson  <dino@apple.com>

        Reverting libANGLE.a -> libANGLE-shared.dylib.

        Follow-up to remove the build phase that was trying
        to fool Apple's build system.

        * ANGLE.xcodeproj/project.pbxproj:

2019-12-18  Dean Jackson  <dino@apple.com>

        Reverting libANGLE.a -> libANGLE-shared.dylib.

        The internal Apple build systems are still unhappy with
        this change, so I'm reverting it until I can be sure
        they'll accept it.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE.xcconfig:
        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * include/CMakeLists.txt:
        * include/GLSLANG/ShaderLang.h:
        * include/GLSLANG/ShaderVars.h:
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm:
        (rx::DisplayCGL::isValidNativeWindow const):
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm:
        (rx::WindowSurfaceCGL::WindowSurfaceCGL):
        (rx::WindowSurfaceCGL::~WindowSurfaceCGL):
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm:
        (rx::DisplayEAGL::terminate):
        (rx::DisplayEAGL::isValidNativeWindow const):
        (rx::WorkerContextEAGL::~WorkerContextEAGL):
        * src/libANGLE/renderer/gl/eagl/WindowSurfaceEAGL.mm:
        (rx::WindowSurfaceEAGL::WindowSurfaceEAGL):
        (rx::WindowSurfaceEAGL::~WindowSurfaceEAGL):

2019-12-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed build fix for WinCairo port
        https://bugs.webkit.org/show_bug.cgi?id=204914
        <rdar://problem/58023118>

        * include/CMakeLists.txt: Replaced '$libangle_includes' with '${libangle_includes}".

2019-12-17  James Darpinian  <jdarpinian@chromium.org>

        Improve update-angle.sh and add gni-to-cmake.py
        https://bugs.webkit.org/show_bug.cgi?id=204914

        update-angle.sh now performs a git rebase. This automatically merges
        upstream changes with WebKit's local changes where possible and
        highlights any conflicts for manual resolution.

        Also, it runs a new script gni-to-cmake.py to automatically update the
        CMake files with upstream changes to the gni files. Along with the
        changes to include/CMakeLists.txt, this should prevent build breaks
        like the recently fixed WinCairo one. Additionally, diffing the CMake
        files provides a concise list of build changes that can be referenced
        when manually updating the XCode project file.

        Reviewed by Dean Jackson.

        * CMakeLists.txt:
        * Compiler.cmake:
        * GLESv2.cmake:
        * gni-to-cmake.py: Added.
        * include/CMakeLists.txt:
        * update-angle.sh:

2019-12-17  ChangSeok Oh  <changseok@webkit.org>

        Unreviewed build fix for USE_ANGLE_WEBGL after r252994

        * CMakeLists.txt: Add a missing directory separator.

2019-12-13  Dean Jackson  <dino@apple.com>

        MacCatalyst build of libANGLE is installed in the incorrect location
        https://bugs.webkit.org/show_bug.cgi?id=205219
        <rdar://problem/57713353>

        Reviewed by Simon Fraser.

        Rename libANGLE.dylib into libANGLE-shared.dylib, so we can
        avoid accidentally trying to link to the libANGLE.a that was
        removed recently (but still exists in the SDK for now).

        Also, make sure that we install into the correct location for
        a Catalyst build.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE.xcconfig:
        * Configurations/Base.xcconfig:

2019-12-11  Dean Jackson  <dino@apple.com>

        Produce a dummy libANGLE.a file to fool Apple's build test infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=205068
        <rdar://problem/57713353>

        Unreviewed followup to apply the script to Mac Catalyst builds.

        Note that this phase can be removed in a few days when Apple's Test
        Platform realises it doesn't need libANGLE.a any more.

        * ANGLE.xcodeproj/project.pbxproj:

2019-12-10  Dean Jackson  <dino@apple.com>

        Produce a dummy libANGLE.a file to fool Apple's build test infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=205068
        <rdar://problem/57713353>

        Reviewed by Alex Christensen.

        Create a dummy libANGLE.a file until our infrastructure realises it
        doesn't need that file any more. Hopefully the fact that it isn't
        really a static library, but just a text file, is ok.

        * ANGLE.xcodeproj/project.pbxproj: Add a new shell script phase that
        creates a dummy file.

2019-12-06  Dean Jackson  <dino@apple.com>

        Restrict libANGLE to link only with WebCore
        https://bugs.webkit.org/show_bug.cgi?id=204957
        <rdar://problem/57708644>

        Reviewed by Brian Burg.

        Restrict to WebCore and WebCoreTestSupport.

        * Configurations/ANGLE.xcconfig:

2019-12-05  James Darpinian  <jdarpinian@chromium.org>

        Finish ANGLE update
        https://bugs.webkit.org/show_bug.cgi?id=204911

        The last ANGLE update patch didn't include all the changed files.
        This patch updates the rest of the files.

        Reviewed by Alex Christensen.

        * src/tests: Lots of changed files from upstream ANGLE.
        * src/third_party/compiler/README.chromium:
        * third_party/VK-GL-CTS/README.angle: Added.
        * third_party/deqp/README.angle: Removed.
        * third_party/googletest/README.angle: Removed.
        * third_party/libpng/BUILD.gn:
        * third_party/spirv-cross/README.angle: Added.
        * util/OSWindow.h:
        * util/egl_loader_autogen.cpp:
        (angle::LoadEGL):
        * util/egl_loader_autogen.h:
        * util/fuchsia/ScenicWindow.cpp:
        (ScenicWindow::resetNativeWindow):
        * util/fuchsia/ScenicWindow.h:
        * util/gles_loader_autogen.cpp:
        (angle::LoadGLES):
        * util/gles_loader_autogen.h:
        * util/osx/OSXWindow.h:
        * util/osx/OSXWindow.mm:
        (OSXWindow::initialize):
        * util/ozone/OzoneWindow.h:
        * util/posix/crash_handler_posix.cpp:
        (angle::InitCrashHandler):
        * util/posix/test_utils_posix.cpp:
        (angle::GetTempDir):
        (angle::CreateTemporaryFileInDir):
        (angle::DeleteFile):
        (angle::LaunchProcess):
        (angle::NumberOfProcessors):
        * util/shader_utils.cpp:
        (CompileShaderFromFile):
        (CompileProgramFromFiles):
        * util/test_utils.cpp: Added.
        (angle::CreateTemporaryFile):
        (angle::GetFileSize):
        (angle::ReadEntireFileToString):
        (angle::ProcessHandle::ProcessHandle):
        (angle::ProcessHandle::~ProcessHandle):
        (angle::ProcessHandle::operator=):
        (angle::ProcessHandle::reset):
        * util/test_utils.h:
        * util/test_utils_unittest.cpp: Added.
        (angle::NormalizeNewLines):
        (angle::TEST):
        * util/test_utils_unittest_helper.cpp: Added.
        (main):
        * util/test_utils_unittest_helper.h: Added.
        * util/util.gni:
        * util/windows/WGLWindow.cpp:
        * util/windows/test_utils_win.cpp:
        (angle::InitCrashHandler):
        (angle::TerminateCrashHandler):
        (angle::LaunchProcess):
        (angle::GetTempDir):
        (angle::CreateTemporaryFileInDir):
        (angle::DeleteFile):
        (angle::NumberOfProcessors):
        * util/windows/win32/Win32Window.cpp:
        (Win32Window::initialize):
        * util/windows/win32/test_utils_win32.cpp:
        (angle::StabilizeCPUForBenchmarking):
        * util/x11/X11Window.h:

2019-12-02  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed WinCairo build fix following r252989.

        * include/CMakeLists.txt:

2019-12-02  Dean Jackson  <dino@apple.com>

        Clean up ANGLE header post-process script
        https://bugs.webkit.org/show_bug.cgi?id=204711

        Reviewed by Tim Horton.

        Since `sed` on macOS requires the in-place argument to have a zero-length string
        to avoid making backups, this script was attempting to pass ''. However, this was
        being evaluated, creating a bunch of files with \'\' suffixes. Fix this by using
        an array when expanding the arguments.

        Also fix a typo where the character "3" was being printed.

        Lastly, only print out the basename of the header file being converted.

        * adjust-angle-include-paths.sh:

2019-11-30  Dean Jackson  <dino@apple.com>

        Build ANGLE as a dynamic library
        https://bugs.webkit.org/show_bug.cgi?id=204708
        rdar://57349384

        Reviewed by Tim Horton.

        Modify ANGLE to build as a dynamic library. My (not thorough) testing suggests
        this will reduce the in-flight binary size on Apple's build systems by at least
        a factor of 10 (it was over 1G). Building release for x86_64-only:
            - Previously: libANGLE.a -- 306 MB
            - Now: libANGLE.dylib -- 6.7 MB

        In order to do this, some symbols needed to be exported from the
        "sh" namespace (which are used in ANGLEWebKitBridge, but not when
        ANGLE's rendering backend is active).

        While here, I turned on some more build options, like ARC.

        * ANGLE.xcodeproj/project.pbxproj: Link with IOKit and IOSurface frameworks, and
        product a dylib product.
        * Configurations/ANGLE.xcconfig: Update the configuration for a dynamic library.
        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig: Added.
        * Configurations/WebKitTargetConditionals.xcconfig: Added.

        * include/GLSLANG/ShaderLang.h: Add ANGLE_EXPORT to some functions to make
        sure they will be visible in the exported library.
        * include/GLSLANG/ShaderVars.h:
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm: Change reinterpret_cast to a normal
        C cast so it can be annotated with __bridge.
        (rx::DisplayCGL::isValidNativeWindow const):
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm: Ditto.
        (rx::WindowSurfaceCGL::WindowSurfaceCGL):
        (rx::WindowSurfaceCGL::~WindowSurfaceCGL):
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm: Ditto.
        * src/libANGLE/renderer/gl/eagl/WindowSurfaceEAGL.mm: Ditto.

2019-12-02  James Darpinian  <jdarpinian@chromium.org>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=204595

        Reviewed by Alex Christensen.

        * ANGLE.plist: Updated commit hash.
        * ANGLE.xcodeproj/project.pbxproj: Changes mirroring gn changes upstream.
        * Compiler.cmake: Changes mirroring gn changes upstream.
        * GLESv2.cmake: Changes mirroring gn changes upstream.
        * CMakeLists.txt: Changes mirroring gn changes upstream.

        * Many other files added/removed/changed from upstream.


2019-11-20  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Add ANGLE backend to GTK port
        https://bugs.webkit.org/show_bug.cgi?id=199060

        Reviewed by Žan Doberšek.

        * CMakeLists.txt: When USE_ANGLE_WEBGL is enabled, necessary glesv2 entry points headers
          are installed in the derived source directory. And then adjust-angle-include-path.sh is applied
          to change include paths in the entry points header files.
        * GLESv2.cmake: libglesv2_entry_points_headers is newly defined, which is a gathering of
          entry point headers of libGLESv2.
        * PlatformGTK.cmake: In this file, we append gl and glx related angle code as a build target.
          Since we want gl context and gles context simultaneously, we remove gl prototype calls
          from the generated libGLESv2 library. Instead, we invoke egl and gl calls of ANGLE
          via their non-prototype function names.
        * adjust-angle-include-paths.sh: sed is slightly different in unix and linux systems.
          In particular, its inplace option needs to be changed for better compatibility on linux.
        * include/CMakeLists.txt: ANGLE_WEBGL_HEADERS is newly defined. It gathers header files of ANGLE
          for WebGL support.

2019-11-08  Dean Jackson  <dino@apple.com>

        Add ANGLE backend for iOS device
        https://bugs.webkit.org/show_bug.cgi?id=202159
        <rdar://57000166>

        Build fix. Don't include IOSurface.h on iOS (public SDK doesn't have it).

        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:

2019-11-07  Dean Jackson  <dino@apple.com>

        Add ANGLE backend for iOS device
        https://bugs.webkit.org/show_bug.cgi?id=202159
        <rdar://57000166>

        Reviewed by Myles Maxfield.

        Add an OpenGLES backend over EAGL for iOS to ANGLE.

        This is basically a copy of all the files in
        libANGLE/renderer/gl/cgl into libANGLE/renderer/gl/eagl, then with
        modifications to make it work on iOS's OpenGL ES. Most notably,
        some format enums and the manner in which you bind an IOSurface to
        a GL texture are different.

        This introduces a few places where we have to do a compile time
        switch for iOS, some of which might actually be applicable to
        other OpenGL ES backends.

        The biggest missing piece is support for the iOS simulator. At the moment
        this backend relies on an IOSurface binding as a rendering target.
        But the iOS Simulator does not have the required ability to have a
        GL ES texture backed by an IOSurface.

        The WindowSurfaceEAGL code is incomplete, but was not necessary
        in order to get WebGL operational. And even if you are using ANGLE
        directly, you can have the client code render into a CALayer without
        going through the WindowSurface.

        * ANGLE.xcodeproj/project.pbxproj:
        * include/EGL/eglext_angle.h:
        * src/common/PackedEnums.cpp:
        (egl_gl::EGLTextureTargetToTextureType):
        * src/common/platform.h:
        * src/gpu_info_util/SystemInfo_ios.cpp: Added.
        (angle::GetSystemInfo):
        * src/gpu_info_util/SystemInfo_macos.cpp: Renamed from Source/ThirdParty/ANGLE/src/gpu_info_util/SystemInfo_mac.cpp.
        (angle::GetSystemInfo):
        * src/libANGLE/Caps.h:
        * src/libANGLE/Display.cpp:
        * src/libANGLE/formatutils.cpp:
        (gl::BuildInternalFormatInfoMap):
        * src/libANGLE/renderer/gl/cgl/DeviceCGL.cpp:
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm:
        * src/libANGLE/renderer/gl/cgl/IOSurfaceSurfaceCGL.cpp:
        (rx::IOSurfaceSurfaceCGL::bindTexImage):
        * src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.cpp:
        * src/libANGLE/renderer/gl/cgl/RendererCGL.cpp:
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm:
        * src/libANGLE/renderer/gl/eagl/ContextEAGL.cpp: Added.
        (rx::ContextEAGL::ContextEAGL):
        * src/libANGLE/renderer/gl/eagl/ContextEAGL.h: Added.
        * src/libANGLE/renderer/gl/eagl/DeviceEAGL.cpp: Added.
        (rx::DeviceEAGL::DeviceEAGL):
        (rx::DeviceEAGL::~DeviceEAGL):
        (rx::DeviceEAGL::initialize):
        (rx::DeviceEAGL::getAttribute):
        (rx::DeviceEAGL::getType):
        (rx::DeviceEAGL::generateExtensions const):
        * src/libANGLE/renderer/gl/eagl/DeviceEAGL.h: Added.
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.h: Added.
        * src/libANGLE/renderer/gl/eagl/DisplayEAGL.mm: Added.
        (rx::FunctionsGLEAGL::FunctionsGLEAGL):
        (rx::DisplayEAGL::DisplayEAGL):
        (rx::DisplayEAGL::~DisplayEAGL):
        (rx::DisplayEAGL::initialize):
        (rx::DisplayEAGL::terminate):
        (rx::DisplayEAGL::createWindowSurface):
        (rx::DisplayEAGL::createPbufferSurface):
        (rx::DisplayEAGL::createPbufferFromClientBuffer):
        (rx::DisplayEAGL::createPixmapSurface):
        (rx::DisplayEAGL::createContext):
        (rx::DisplayEAGL::createDevice):
        (rx::DisplayEAGL::generateConfigs):
        (rx::DisplayEAGL::testDeviceLost):
        (rx::DisplayEAGL::restoreLostDevice):
        (rx::DisplayEAGL::isValidNativeWindow const):
        (rx::DisplayEAGL::validateClientBuffer const):
        (rx::DisplayEAGL::getVendorString const):
        (rx::DisplayEAGL::getEAGLContext const):
        (rx::DisplayEAGL::getEAGLPixelFormat const):
        (rx::DisplayEAGL::generateExtensions const):
        (rx::DisplayEAGL::generateCaps const):
        (rx::DisplayEAGL::waitClient):
        (rx::DisplayEAGL::waitNative):
        (rx::DisplayEAGL::getMaxSupportedESVersion const):
        (rx::DisplayEAGL::makeCurrentSurfaceless):
        (rx::WorkerContextEAGL::WorkerContextEAGL):
        (rx::WorkerContextEAGL::~WorkerContextEAGL):
        (rx::WorkerContextEAGL::makeCurrent):
        (rx::WorkerContextEAGL::unmakeCurrent):
        (rx::DisplayEAGL::createWorkerContext):
        (rx::DisplayEAGL::initializeFrontendFeatures const):
        (rx::DisplayEAGL::populateFeatureList):
        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.h: Added.
        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm: Copied from Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/cgl/IOSurfaceSurfaceCGL.cpp.
        (rx::IOSurfaceSurfaceEAGL::IOSurfaceSurfaceEAGL):
        (rx::IOSurfaceSurfaceEAGL::~IOSurfaceSurfaceEAGL):
        (rx::IOSurfaceSurfaceEAGL::initialize):
        (rx::IOSurfaceSurfaceEAGL::makeCurrent):
        (rx::IOSurfaceSurfaceEAGL::unMakeCurrent):
        (rx::IOSurfaceSurfaceEAGL::swap):
        (rx::IOSurfaceSurfaceEAGL::postSubBuffer):
        (rx::IOSurfaceSurfaceEAGL::querySurfacePointerANGLE):
        (rx::IOSurfaceSurfaceEAGL::bindTexImage):
        (rx::IOSurfaceSurfaceEAGL::releaseTexImage):
        (rx::IOSurfaceSurfaceEAGL::setSwapInterval):
        (rx::IOSurfaceSurfaceEAGL::getWidth const):
        (rx::IOSurfaceSurfaceEAGL::getHeight const):
        (rx::IOSurfaceSurfaceEAGL::isPostSubBufferSupported const):
        (rx::IOSurfaceSurfaceEAGL::getSwapBehavior const):
        (rx::IOSurfaceSurfaceEAGL::validateAttributes):
        (rx::IOSurfaceFramebuffer::IOSurfaceFramebuffer):
        (rx::IOSurfaceSurfaceEAGL::createDefaultFramebuffer):
        (rx::IOSurfaceSurfaceEAGL::initializeAlphaChannel):
        (rx::IOSurfaceSurfaceEAGL::hasEmulatedAlphaChannel const):
        * src/libANGLE/renderer/gl/eagl/PbufferSurfaceEAGL.cpp: Copied from Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.cpp.
        (rx::PbufferSurfaceEAGL::PbufferSurfaceEAGL):
        (rx::PbufferSurfaceEAGL::~PbufferSurfaceEAGL):
        (rx::PbufferSurfaceEAGL::initialize):
        (rx::PbufferSurfaceEAGL::makeCurrent):
        (rx::PbufferSurfaceEAGL::swap):
        (rx::PbufferSurfaceEAGL::postSubBuffer):
        (rx::PbufferSurfaceEAGL::querySurfacePointerANGLE):
        (rx::PbufferSurfaceEAGL::bindTexImage):
        (rx::PbufferSurfaceEAGL::releaseTexImage):
        (rx::PbufferSurfaceEAGL::setSwapInterval):
        (rx::PbufferSurfaceEAGL::getWidth const):
        (rx::PbufferSurfaceEAGL::getHeight const):
        (rx::PbufferSurfaceEAGL::isPostSubBufferSupported const):
        (rx::PbufferSurfaceEAGL::getSwapBehavior const):
        (rx::PbufferSurfaceEAGL::createDefaultFramebuffer):
        * src/libANGLE/renderer/gl/eagl/PbufferSurfaceEAGL.h: Added.
        * src/libANGLE/renderer/gl/eagl/RendererEAGL.cpp: Added.
        (rx::RendererEAGL::RendererEAGL):
        (rx::RendererEAGL::~RendererEAGL):
        (rx::RendererEAGL::createWorkerContext):
        * src/libANGLE/renderer/gl/eagl/RendererEAGL.h: Added.
        * src/libANGLE/renderer/gl/eagl/WindowSurfaceEAGL.h: Added.
        * src/libANGLE/renderer/gl/eagl/WindowSurfaceEAGL.mm: Copied from Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm.
        (-[WebSwapLayer initWithSharedState:withContext:withFunctions:]):
        (-[WebSwapLayer display]):
        (rx::WindowSurfaceEAGL::WindowSurfaceEAGL):
        (rx::WindowSurfaceEAGL::~WindowSurfaceEAGL):
        (rx::WindowSurfaceEAGL::initialize):
        (rx::WindowSurfaceEAGL::makeCurrent):
        (rx::WindowSurfaceEAGL::swap):
        (rx::WindowSurfaceEAGL::postSubBuffer):
        (rx::WindowSurfaceEAGL::querySurfacePointerANGLE):
        (rx::WindowSurfaceEAGL::bindTexImage):
        (rx::WindowSurfaceEAGL::releaseTexImage):
        (rx::WindowSurfaceEAGL::setSwapInterval):
        (rx::WindowSurfaceEAGL::getWidth const):
        (rx::WindowSurfaceEAGL::getHeight const):
        (rx::WindowSurfaceEAGL::isPostSubBufferSupported const):
        (rx::WindowSurfaceEAGL::getSwapBehavior const):
        (rx::WindowSurfaceEAGL::createDefaultFramebuffer):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::GenerateCaps):
        * src/libANGLE/validationES2.cpp:
        (gl::ValidateFramebufferTexture2D):
        * src/libGLESv2/entry_points_egl_ext.cpp:

2019-11-06  Dean Jackson  <dino@apple.com>

        [ANGLE] IOSurfaceSurfaceCGL has format and internalFormat flipped
        https://bugs.webkit.org/show_bug.cgi?id=203911
        <rdar://problem/56954291>

        Reviewed by Simon Fraser.

        Fix a typo where internalFormat and format are used in the
        wrong order. The table of formats also had them backwards.

        * src/libANGLE/renderer/gl/cgl/IOSurfaceSurfaceCGL.cpp:
        (rx::IOSurfaceSurfaceCGL::bindTexImage):

2019-10-29  Dean Jackson  <dino@apple.com>

        [ANGLE] Put Apple platform compilation guards in a better place
        https://bugs.webkit.org/show_bug.cgi?id=203590
        <rdar://problem/56722345>

        Reviewed by Simon Fraser.

        Move the #define to platform.h.

        * src/common/platform.h:
        * src/libANGLE/renderer/gl/cgl/DeviceCGL.cpp:
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm:
        * src/libANGLE/renderer/gl/cgl/IOSurfaceSurfaceCGL.cpp:
        * src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.cpp:
        * src/libANGLE/renderer/gl/cgl/RendererCGL.cpp:
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm:

2019-10-29  Dean Jackson  <dino@apple.com>

        [ANGLE] Window Server blocking stops single GPU systems from creating a CGLPixelFormat
        https://bugs.webkit.org/show_bug.cgi?id=203522
        <rdar://problem/56685302>

        Reviewed by Alex Christensen.

        The Web Content Process blocks access to the Window Server. For that reason, we
        must create all CGLPixelFormats with the "offline renderer" flag, even if we're
        not on a dual-GPU system.

        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm: Always enable kCGLPFAAllowOfflineRenderers.
        (rx::DisplayCGL::initialize):

2019-10-23  Dean Jackson  <dino@apple.com>

        [ANGLE] Improve compile-time macOS guards and avoid ObjC if possible
        https://bugs.webkit.org/show_bug.cgi?id=203343

        Reviewed by Simon Fraser.

        Use the more official compile-time detection of Apple platforms, so that
        it will be easier to differentiate between macOS and iOS. Also move some
        .mm files to .cpp where possible.

        * ANGLE.xcodeproj/project.pbxproj:
        * src/gpu_info_util/SystemInfo_mac.cpp: Renamed from Source/ThirdParty/ANGLE/src/gpu_info_util/SystemInfo_mac.mm.
        (angle::GetSystemInfo):
        * src/libANGLE/renderer/gl/cgl/DeviceCGL.cpp:
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm:
        * src/libANGLE/renderer/gl/cgl/IOSurfaceSurfaceCGL.cpp: Renamed from Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/cgl/IOSurfaceSurfaceCGL.mm.
        * src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.cpp: Renamed from Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.mm.
        * src/libANGLE/renderer/gl/cgl/RendererCGL.cpp: Renamed from Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/cgl/RendererCGL.mm.
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm:

2019-10-23  Dean Jackson  <dino@apple.com>

        Don't try to compile .inc files in ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=203315

        Reviewed by Simon Fraser.

        These are headers, not files we need to compile directly.

        * ANGLE.xcodeproj/project.pbxproj:

2019-10-15  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r251018


        * PlatformFTW.cmake: Add missing dxgi library.

2019-10-12  Stephan Szabo  <stephan.szabo@sony.com>

        Regression (251018): Wincairo build broken: unresolved external symbol
        https://bugs.webkit.org/show_bug.cgi?id=202879

        Reviewed by Alex Christensen.

        * PlatformWin.cmake: Add dxgi library for CreateDXGIFactory1

2019-10-11  Kenneth Russell  <kbr@chromium.org>

        USE_ANGLE=1 build broken with last ANGLE roll
        https://bugs.webkit.org/show_bug.cgi?id=202872

        Add FrameCapture_mock.cpp to Xcode and CMake builds.

        Reviewed by Alex Christensen.

        * ANGLE.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * GLESv2.cmake:

2019-10-11  Kenneth Russell  <kbr@chromium.org>

        Roll ANGLE for ETC extensions and EGL_ANGLE_device_cgl
        https://bugs.webkit.org/show_bug.cgi?id=202780

        Roll ANGLE to c5e0ac757a112a24a0118d434e652fd7b558e6a8 via new
        update-angle.sh script.

        Reviewed by Alex Christensen.

        * .gitignore:
        * ANGLE.plist:
        * ANGLE.xcodeproj/project.pbxproj:
        * BUILD.gn:
        * CMakeLists.txt:
        * CONTRIBUTORS:
        * DEPS:
        * GLESv2.cmake:
        * OWNERS:
        * PRESUBMIT.py:
        (_CheckExportValidity):
        (CheckChangeOnUpload):
        (CheckChangeOnCommit):
        * README.md:
        * android/angle_apk.gni:
        * build_overrides/angle.gni:
        * changes.diff:
        * doc/DevSetup.md:
        * dotfile_settings.gni:
        * extensions/ANGLE_compressed_texture_etc.txt: Added.
        * extensions/EGL_ANGLE_device_cgl.txt: Added.
        * extensions/EGL_ANGLE_feature_control.txt:
        * extensions/EGL_ANGLE_platform_angle_d3d11on12.txt: Added.
        * extensions/EGL_ANGLE_platform_angle_device_type_swiftshader.txt: Added.
        * extensions/EGL_ANGLE_platform_angle_metal.txt: Added.
        * gni/angle.gni:
        * include/EGL/eglext_angle.h:
        * include/platform/Feature.h:
        (angle::Feature::Feature):
        * include/platform/FeaturesD3D.h:
        * include/platform/FeaturesGL.h:
        * include/platform/FeaturesVk.h:
        * include/platform/FrontendFeatures.h:
        * samples/WindowTest/WindowTest.cpp:
        * samples/gles1/DrawTexture.cpp:
        * samples/multi_texture/MultiTexture.cpp:
        * samples/multiple_draw_buffers/MultipleDrawBuffers.cpp:
        * samples/particle_system/ParticleSystem.cpp:
        * samples/sample_util/SampleApplication.cpp:
        (SampleApplication::SampleApplication):
        * samples/sample_util/SampleApplication.h:
        * scripts/code_generation_hashes/ANGLE_format.json:
        * scripts/code_generation_hashes/ANGLE_load_functions_table.json:
        * scripts/code_generation_hashes/D3D11_format.json:
        * scripts/code_generation_hashes/DXGI_format.json:
        * scripts/code_generation_hashes/GL_EGL_WGL_loader.json:
        * scripts/code_generation_hashes/GL_EGL_entry_points.json:
        * scripts/code_generation_hashes/OpenGL_dispatch_table.json:
        * scripts/code_generation_hashes/Static_builtins.json:
        * scripts/code_generation_hashes/Vulkan_format.json:
        * scripts/code_generation_hashes/Vulkan_internal_shader_programs.json:
        * scripts/code_generation_hashes/Vulkan_mandatory_format_support_table.json:
        * scripts/code_generation_hashes/proc_table.json:
        * scripts/export_targets.py:
        (has_all_includes):
        * scripts/generate_entry_points.py:
        (get_resource_id_types):
        (format_resource_id_types):
        (write_capture_helper_header):
        (get_resource_id_type_from_param_type):
        (format_param_type_to_resource_id_type_case):
        (format_param_type_resource_id_cases):
        (format_resource_id_type_name_case):
        (write_capture_helper_source):
        * scripts/generate_vulkan_layers_json.py:
        (main):
        * scripts/registry_xml.py:
        * src/common/PackedEnums.cpp:
        (gl::operator<<):
        * src/common/PackedEnums.h:
        (angle::EnumSize<E>):
        (gl::FromGLenum<VertexAttribType>):
        (gl::ToGLenum):
        (gl::ValueEquals):
        (gl::operator==):
        (gl::operator!=):
        * src/common/android_util.cpp:
        (angle::android::NativePixelFormatToGLInternalFormat):
        * src/common/angleutils.h:
        * src/common/debug.h:
        * src/common/platform.h:
        * src/common/system_utils_winuwp.cpp: Added.
        (angle::SetEnvironmentVar):
        (angle::GetEnvironmentVar):
        (angle::GetSharedLibraryExtension):
        (angle::GetPathSeparator):
        (angle::GetCurrentTime):
        (angle::UwpLibrary::UwpLibrary):
        (angle::OpenSharedLibrary):
        (angle::IsDebuggerAttached):
        (angle::BreakDebugger):
        * src/common/tls.cpp:
        (CreateTLSIndex):
        (DestroyTLSIndex):
        (SetTLSValue):
        (GetTLSValue):
        * src/common/tls.h:
        * src/common/utilities.cpp:
        (gl::StripLastArrayIndex):
        * src/common/utilities.h:
        * src/compiler.gni:
        * src/compiler/translator/Compiler.cpp:
        (sh::TCompiler::compileTreeImpl):
        * src/compiler/translator/ImmutableString_ESSL_autogen.cpp:
        * src/compiler/translator/ImmutableString_autogen.cpp:
        * src/compiler/translator/IntermNode.h:
        (sh::TIntermPreprocessorDirective::getDirective const): Deleted.
        (sh::TIntermPreprocessorDirective::getCommand const): Deleted.
        * src/compiler/translator/ParseContext.cpp:
        (sh::TParseContext::TParseContext):
        (sh::TParseContext::checkIsValidArraySize):
        (sh::TParseContext::parseFunctionDeclarator):
        * src/compiler/translator/ParseContext.h:
        (sh::TParseContext::getOutputType const):
        * src/compiler/translator/ShaderVars.cpp:
        (sh::ShaderVariable::operator=):
        * src/compiler/translator/SymbolTable.cpp:
        (sh::TSymbolTable::setGlInArraySize):
        (sh::TSymbolTable::gl_FragData const):
        (sh::TSymbolTable::gl_SecondaryFragDataEXT const):
        (sh::SymbolRule::get const):
        (sh::FindMangledBuiltIn):
        (sh::UnmangledEntry::matches const):
        * src/compiler/translator/SymbolTable.h:
        (sh::SymbolRule::SymbolRule):
        (sh::SymbolRule::Get):
        (sh::UnmangledEntry::UnmangledEntry):
        (sh::SymbolEntry::SymbolEntry): Deleted.
        * src/compiler/translator/SymbolTable_ESSL_autogen.cpp:
        (sh::BuiltInVariable::angle_BaseInstance):
        (sh::BuiltInVariable::angle_BaseVertex):
        (sh::BuiltInVariable::gl_BaseInstance):
        (sh::BuiltInVariable::gl_BaseVertex):
        (sh::BuiltInVariable::gl_DrawID):
        (sh::BuiltInVariable::gl_FragColor):
        (sh::BuiltInVariable::gl_FragCoord):
        (sh::BuiltInVariable::gl_FragDepth):
        (sh::BuiltInVariable::gl_FrontFacing):
        (sh::BuiltInVariable::gl_GlobalInvocationID):
        (sh::BuiltInVariable::gl_InstanceID):
        (sh::BuiltInVariable::gl_InstanceIndex):
        (sh::BuiltInVariable::gl_InvocationID):
        (sh::BuiltInVariable::gl_LastFragColor):
        (sh::BuiltInVariable::gl_LastFragColorARM):
        (sh::BuiltInVariable::gl_Layer):
        (sh::BuiltInVariable::gl_LayerGS):
        (sh::BuiltInVariable::gl_LayerVS):
        (sh::BuiltInVariable::gl_LocalInvocationID):
        (sh::BuiltInVariable::gl_LocalInvocationIndex):
        (sh::BuiltInVariable::gl_NumWorkGroups):
        (sh::BuiltInVariable::gl_PointCoord):
        (sh::BuiltInVariable::gl_PointSize):
        (sh::BuiltInVariable::gl_Position):
        (sh::BuiltInVariable::gl_PrimitiveID):
        (sh::BuiltInVariable::gl_PrimitiveIDGS):
        (sh::BuiltInVariable::gl_PrimitiveIDIn):
        (sh::BuiltInVariable::gl_SecondaryFragColorEXT):
        (sh::BuiltInVariable::gl_VertexID):
        (sh::BuiltInVariable::gl_VertexIndex):
        (sh::BuiltInVariable::gl_ViewID_OVR):
        (sh::BuiltInVariable::gl_ViewportIndex):
        (sh::BuiltInVariable::gl_WorkGroupID):
        (sh::BuiltInVariable::gl_WorkGroupSize):
        (sh::TSymbolTable::initializeBuiltInVariables):
        (sh::TSymbolTable::findBuiltIn const):
        (sh::TSymbolTable::isUnmangledBuiltInName const):
        (sh::TSymbolTable::getSymbol const): Deleted.
        (sh::TSymbolTable::getUnmangled const): Deleted.
        (sh::TSymbolTable::getUnmangledBuiltInForShaderVersion): Deleted.
        * src/compiler/translator/SymbolTable_autogen.cpp:
        (sh::BuiltInVariable::angle_BaseInstance):
        (sh::BuiltInVariable::angle_BaseVertex):
        (sh::BuiltInVariable::gl_BaseInstance):
        (sh::BuiltInVariable::gl_BaseVertex):
        (sh::BuiltInVariable::gl_DrawID):
        (sh::BuiltInVariable::gl_FragColor):
        (sh::BuiltInVariable::gl_FragCoord):
        (sh::BuiltInVariable::gl_FragDepth):
        (sh::BuiltInVariable::gl_FrontFacing):
        (sh::BuiltInVariable::gl_GlobalInvocationID):
        (sh::BuiltInVariable::gl_InstanceID):
        (sh::BuiltInVariable::gl_InstanceIndex):
        (sh::BuiltInVariable::gl_InvocationID):
        (sh::BuiltInVariable::gl_LastFragColor):
        (sh::BuiltInVariable::gl_LastFragColorARM):
        (sh::BuiltInVariable::gl_Layer):
        (sh::BuiltInVariable::gl_LayerGS):
        (sh::BuiltInVariable::gl_LayerVS):
        (sh::BuiltInVariable::gl_LocalInvocationID):
        (sh::BuiltInVariable::gl_LocalInvocationIndex):
        (sh::BuiltInVariable::gl_NumWorkGroups):
        (sh::BuiltInVariable::gl_PointCoord):
        (sh::BuiltInVariable::gl_PointSize):
        (sh::BuiltInVariable::gl_Position):
        (sh::BuiltInVariable::gl_PrimitiveID):
        (sh::BuiltInVariable::gl_PrimitiveIDGS):
        (sh::BuiltInVariable::gl_PrimitiveIDIn):
        (sh::BuiltInVariable::gl_SecondaryFragColorEXT):
        (sh::BuiltInVariable::gl_VertexID):
        (sh::BuiltInVariable::gl_VertexIndex):
        (sh::BuiltInVariable::gl_ViewID_OVR):
        (sh::BuiltInVariable::gl_ViewportIndex):
        (sh::BuiltInVariable::gl_WorkGroupID):
        (sh::BuiltInVariable::gl_WorkGroupSize):
        (sh::TSymbolTable::initializeBuiltInVariables):
        (sh::TSymbolTable::findBuiltIn const):
        (sh::TSymbolTable::isUnmangledBuiltInName const):
        (sh::TSymbolTable::getSymbol const): Deleted.
        (sh::TSymbolTable::getUnmangled const): Deleted.
        (sh::TSymbolTable::getUnmangledBuiltInForShaderVersion): Deleted.
        * src/compiler/translator/SymbolTable_autogen.h:
        * src/compiler/translator/TranslatorVulkan.cpp:
        (sh::TranslatorVulkan::translate):
        * src/compiler/translator/gen_builtin_symbols.py:
        (get_shader_version_for_level):
        (GroupedList.__init__):
        (GroupedList.add_entry):
        (GroupedList.format_rule):
        (GroupedList):
        (GroupedList.format_rules):
        (GroupedList.get_rules):
        (GroupedList.get_names):
        (GroupedList.get_offsets):
        (GroupedList.update_arrays):
        (GroupedList.update_arrays.add_rule):
        (UnmangledGroupedList.add_entry):
        (UnmangledGroupedList.get_array):
        (define_constexpr_variable):
        (process_single_function_group):
        (process_function_group):
        (process_single_variable_group):
        (GroupedList.add_obj): Deleted.
        (GroupedList.get_array): Deleted.
        (UnmangledGroupedList.add_obj): Deleted.
        * src/feature_support_util/feature_support_util.cpp:
        * src/gpu_info_util/SystemInfo_win.cpp:
        (angle::GetSystemInfo):
        * src/image_util/loadimage.cpp:
        (angle::LoadD24S8ToD32F):
        (angle::LoadD32ToD32FX32):
        (angle::LoadD32ToD32F):
        * src/image_util/loadimage.h:
        * src/libANGLE/Buffer.cpp:
        (gl::Buffer::Buffer):
        * src/libANGLE/Buffer.h:
        * src/libANGLE/Caps.cpp:
        (gl::DetermineHalfFloatTextureFilteringSupport):
        (gl::DetermineFloatTextureFilteringSupport):
        (gl::Extensions::setTextureExtensionSupport):
        (gl::GetExtensionInfoMap):
        (egl::DisplayExtensions::getStrings const):
        (egl::DeviceExtensions::getStrings const):
        (egl::ClientExtensions::getStrings const):
        * src/libANGLE/Caps.h:
        * src/libANGLE/Constants.h:
        * src/libANGLE/Context.cpp:
        (gl::Context::Context):
        (gl::Context::initialize):
        (gl::Context::onDestroy):
        (gl::Context::bindImageTexture):
        (gl::Context::getQueryiv):
        (gl::Context::detachTexture):
        (gl::Context::generateSupportedExtensions const):
        (gl::Context::initCaps):
        (gl::Context::onSubjectStateChange):
        (gl::StateCache::updateActiveAttribsMask):
        (gl::StateCache::updateVertexAttribTypesValidation):
        * src/libANGLE/Context.h:
        * src/libANGLE/Device.cpp:
        (egl::Device::getAttribute):
        (egl::Device::getDevice): Deleted.
        * src/libANGLE/Device.h:
        * src/libANGLE/Display.cpp:
        (egl::Display::createContext):
        (egl::GenerateClientExtensions):
        (egl::Display::isValidNativeDisplay):
        (egl::Display::initializeFrontendFeatures):
        (egl::Display::queryStringi):
        * src/libANGLE/ErrorStrings.h:
        * src/libANGLE/Fence.h:
        * src/libANGLE/FrameCapture.cpp:
        (angle::ParamCapture::ParamCapture):
        (angle::ParamCapture::operator=):
        (angle::ParamBuffer::ParamBuffer):
        (angle::ParamBuffer::operator=):
        (angle::ParamBuffer::getParam):
        (angle::ParamBuffer::getParam const):
        (angle::ParamBuffer::addParam):
        (angle::ParamBuffer::addReturnValue):
        (angle::ParamBuffer::getClientArrayPointerParameter):
        (angle::CallCapture::CallCapture):
        (angle::CallCapture::operator=):
        (angle::CallCapture::name const):
        (angle::ReplayContext::ReplayContext):
        (angle::ReplayContext::~ReplayContext):
        (angle::FrameCapture::FrameCapture):
        (angle::FrameCapture::maybeCaptureClientData):
        (angle::FrameCapture::captureCall):
        (angle::FrameCapture::captureUpdateResourceIDs):
        (angle::FrameCapture::maybeUpdateResourceIDs):
        (angle::FrameCapture::captureClientArraySnapshot):
        (angle::FrameCapture::onEndFrame):
        (angle::DataCounters::getAndIncrement):
        (angle::FrameCapture::reset):
        (angle::CaptureGenHandlesImpl):
        (angle::WriteParamValueToStream<ParamType::TBufferID>):
        (angle::WriteParamValueToStream<ParamType::TFenceNVID>):
        (angle::WriteParamValueToStream<ParamType::TFramebufferID>):
        (angle::WriteParamValueToStream<ParamType::TMemoryObjectID>):
        (angle::WriteParamValueToStream<ParamType::TPathID>):
        (angle::WriteParamValueToStream<ParamType::TProgramPipelineID>):
        (angle::WriteParamValueToStream<ParamType::TQueryID>):
        (angle::WriteParamValueToStream<ParamType::TRenderbufferID>):
        (angle::WriteParamValueToStream<ParamType::TSamplerID>):
        (angle::WriteParamValueToStream<ParamType::TSemaphoreID>):
        (angle::WriteParamValueToStream<ParamType::TShaderProgramID>):
        (angle::WriteParamValueToStream<ParamType::TTextureID>):
        (angle::WriteParamValueToStream<ParamType::TTransformFeedbackID>):
        (angle::WriteParamValueToStream<ParamType::TVertexArrayID>):
        (angle::CallCapture::~CallCapture): Deleted.
        (angle::ParamBuffer::~ParamBuffer): Deleted.
        (angle::ParamCapture::~ParamCapture): Deleted.
        (angle::FrameCapture::~FrameCapture): Deleted.
        (angle::FrameCapture::anyClientArray const): Deleted.
        (angle::FrameCapture::saveCapturedFrameAsCpp): Deleted.
        (angle::FrameCapture::getAndIncrementCounter): Deleted.
        (angle::FrameCapture::writeStringPointerParamReplay): Deleted.
        (angle::FrameCapture::writeRenderbufferIDPointerParamReplay): Deleted.
        (angle::FrameCapture::writeBinaryParamReplay): Deleted.
        (angle::FrameCapture::writeCallReplay): Deleted.
        * src/libANGLE/FrameCapture.h:
        (angle::CaptureGenHandles):
        * src/libANGLE/FrameCapture_mock.cpp: Added.
        (angle::CallCapture::~CallCapture):
        (angle::ParamBuffer::~ParamBuffer):
        (angle::ParamCapture::~ParamCapture):
        (angle::FrameCapture::FrameCapture):
        (angle::FrameCapture::~FrameCapture):
        (angle::FrameCapture::onEndFrame):
        (angle::FrameCapture::replay):
        * src/libANGLE/Framebuffer.cpp:
        (gl::Framebuffer::formsRenderingFeedbackLoopWith const):
        (gl::Framebuffer::formsCopyingFeedbackLoopWith const):
        * src/libANGLE/Framebuffer.h:
        * src/libANGLE/FramebufferAttachment.cpp:
        (gl::FramebufferAttachment::getRedSize const):
        (gl::FramebufferAttachment::getGreenSize const):
        (gl::FramebufferAttachment::getBlueSize const):
        (gl::FramebufferAttachment::getAlphaSize const):
        (gl::FramebufferAttachment::getDepthSize const):
        (gl::FramebufferAttachment::getStencilSize const):
        * src/libANGLE/FramebufferAttachment.h:
        * src/libANGLE/GLES1State.cpp:
        (gl::GLES1State::getActiveAttributesMask const):
        * src/libANGLE/GLES1State.h:
        * src/libANGLE/ImageIndex.cpp:
        * src/libANGLE/ImageIndex.h:
        * src/libANGLE/MemoryObject.cpp:
        (gl::MemoryObject::MemoryObject):
        * src/libANGLE/MemoryObject.h:
        * src/libANGLE/MemoryProgramCache.cpp:
        * src/libANGLE/Program.cpp:
        (gl::ProgramBindings::bindLocation):
        (gl::ProgramBindings::getBindingByName const):
        (gl::ProgramBindings::getBinding const):
        (gl::ProgramBindings::begin const):
        (gl::ProgramBindings::end const):
        (gl::ProgramAliasedBindings::ProgramAliasedBindings):
        (gl::ProgramAliasedBindings::~ProgramAliasedBindings):
        (gl::ProgramAliasedBindings::bindLocation):
        (gl::ProgramAliasedBindings::getBindingByName const):
        (gl::ProgramAliasedBindings::getBinding const):
        (gl::ProgramAliasedBindings::begin const):
        (gl::ProgramAliasedBindings::end const):
        (gl::ProgramState::getAttributeLocation const):
        (gl::ProgramState::getFirstAttachedShaderStageType const):
        (gl::ProgramState::getLastAttachedShaderStageType const):
        (gl::Program::getFragmentInputBindingInfo const):
        (gl::Program::link):
        (gl::ProgramState::updateProgramInterfaceInputs):
        (gl::ProgramState::updateProgramInterfaceOutputs):
        (gl::Program::unlink):
        (gl::Program::getActiveAttribute const):
        (gl::Program::getActiveAttributeCount const):
        (gl::Program::getActiveAttributeMaxLength const):
        (gl::Program::getAttributes const):
        (gl::Program::getInputResource const):
        (gl::Program::getInputResourceIndex const):
        (gl::Program::getResourceMaxNameSize const):
        (gl::Program::getInputResourceMaxNameSize const):
        (gl::Program::getOutputResourceMaxNameSize const):
        (gl::Program::getResourceLocation const):
        (gl::Program::getInputResourceLocation const):
        (gl::Program::getOutputResourceLocation const):
        (gl::Program::getOutputResourceIndex const):
        (gl::Program::getResourceName const):
        (gl::Program::getInputResourceName const):
        (gl::Program::getOutputResourceName const):
        (gl::Program::getUniformResourceName const):
        (gl::Program::getBufferVariableResourceName const):
        (gl::Program::getOutputResource const):
        (gl::Program::getUniformLocationBindings const):
        (gl::Program::linkUniforms):
        (gl::Program::linkAttributes):
        (gl::Program::linkValidateGlobalNames const):
        (gl::Program::getMergedVaryings const):
        (gl::Program::linkOutputVariables):
        (gl::Program::serialize const):
        (gl::Program::deserialize):
        * src/libANGLE/Program.h:
        (gl::ProgramVaryingRef::get const):
        * src/libANGLE/ProgramLinkedResources.cpp:
        (gl::UniformLinker::link):
        (gl::UniformLinker::indexUniforms):
        (gl::UniformLinker::gatherUniformLocationsAndCheckConflicts):
        * src/libANGLE/ProgramLinkedResources.h:
        * src/libANGLE/ProgramPipeline.cpp:
        (gl::ProgramPipeline::ProgramPipeline):
        * src/libANGLE/ProgramPipeline.h:
        * src/libANGLE/Query.cpp:
        (gl::Query::Query):
        * src/libANGLE/Query.h:
        * src/libANGLE/RefCountObject.h:
        (gl::RefCountObject::RefCountObject):
        (gl::RefCountObject::id const):
        (gl::BindingPointer::id const):
        * src/libANGLE/Renderbuffer.cpp:
        (gl::Renderbuffer::Renderbuffer):
        (gl::Renderbuffer::getId const):
        * src/libANGLE/Renderbuffer.h:
        * src/libANGLE/Sampler.cpp:
        (gl::Sampler::Sampler):
        * src/libANGLE/Sampler.h:
        * src/libANGLE/Semaphore.cpp:
        (gl::Semaphore::Semaphore):
        * src/libANGLE/Semaphore.h:
        * src/libANGLE/Shader.cpp:
        (gl::Shader::resolveCompile):
        (gl::Shader::getTransformFeedbackVaryingMappedName):
        * src/libANGLE/State.cpp:
        (gl::State::getSamplerTextureId const):
        (gl::State::detachTexture):
        (gl::State::detachSampler):
        (gl::State::detachRenderbuffer):
        (gl::State::removeTransformFeedbackBinding):
        (gl::State::getActiveQueryId const):
        (gl::State::detachBuffer):
        (gl::State::getIntegerv):
        (gl::State::getIntegeri_v):
        (gl::State::syncImages):
        (gl::State::onImageStateChange):
        * src/libANGLE/State.h:
        (gl::State::getSamplerId const):
        (gl::State::getRenderbufferId const):
        * src/libANGLE/Texture.cpp:
        (gl::Texture::Texture):
        (gl::Texture::setStorage):
        (gl::Texture::getId const):
        * src/libANGLE/Texture.h:
        * src/libANGLE/TransformFeedback.cpp:
        (gl::TransformFeedback::TransformFeedback):
        (gl::TransformFeedback::detachBuffer):
        * src/libANGLE/TransformFeedback.h:
        * src/libANGLE/VaryingPacking.cpp:
        (gl::VaryingPacking::collectAndPackUserVaryings):
        (gl::VaryingPacking::packUserVaryings):
        * src/libANGLE/VertexArray.cpp:
        (gl::VertexArray::detachBuffer):
        (gl::VertexArray::bindVertexBufferImpl):
        * src/libANGLE/VertexArray.h:
        * src/libANGLE/capture_gles_2_0_params.cpp:
        (gl::CaptureDeleteBuffers_buffersPacked):
        (gl::CaptureDeleteFramebuffers_framebuffersPacked):
        (gl::CaptureDeleteTextures_texturesPacked):
        (gl::CaptureGenBuffers_buffersPacked):
        (gl::CaptureGenFramebuffers_framebuffersPacked):
        (gl::CaptureGenRenderbuffers_renderbuffersPacked):
        (gl::CaptureGenTextures_texturesPacked):
        (gl::CaptureShaderSource_string):
        * src/libANGLE/capture_gles_3_0_params.cpp:
        (gl::CaptureDeleteQueries_idsPacked):
        (gl::CaptureDeleteSamplers_samplersPacked):
        (gl::CaptureDeleteTransformFeedbacks_idsPacked):
        (gl::CaptureDeleteVertexArrays_arraysPacked):
        (gl::CaptureGenQueries_idsPacked):
        (gl::CaptureGenSamplers_samplersPacked):
        (gl::CaptureGenTransformFeedbacks_idsPacked):
        (gl::CaptureGenVertexArrays_arraysPacked):
        * src/libANGLE/capture_gles_3_1_params.cpp:
        (gl::CaptureDeleteProgramPipelines_pipelinesPacked):
        (gl::CaptureGenProgramPipelines_pipelinesPacked):
        * src/libANGLE/capture_gles_ext_params.cpp:
        (gl::CaptureDeleteQueriesEXT_idsPacked):
        (gl::CaptureGenQueriesEXT_idsPacked):
        * src/libANGLE/features.h:
        * src/libANGLE/formatutils.cpp:
        (gl::UnsizedHalfFloatOESRGBATextureAttachmentSupport):
        (gl::BuildInternalFormatInfoMap):
        (gl::InternalFormat::computeDepthPitch const):
        (gl::GetVertexFormatID):
        (gl::GetVertexFormatFromID):
        (gl::GetVertexFormatSize):
        * src/libANGLE/frame_capture_utils_autogen.cpp:
        (angle::GetResourceIDTypeFromParamType):
        (angle::GetResourceIDTypeName):
        * src/libANGLE/frame_capture_utils_autogen.h:
        * src/libANGLE/queryutils.cpp:
        (gl::GetBufferVariableResourceProperty):
        (gl::QueryProgramResourceLocation):
        (gl::QueryProgramResourceiv):
        (egl::QueryContextAttrib):
        * src/libANGLE/renderer/DeviceImpl.h:
        * src/libANGLE/renderer/Format.h:
        (angle::Format::isVertexTypeHalfFloat const):
        * src/libANGLE/renderer/FormatID_autogen.h:
        * src/libANGLE/renderer/Format_table_autogen.cpp:
        (angle::Format::InternalFormatToID):
        * src/libANGLE/renderer/angle_format.py:
        (gl_format_channels):
        (get_vertex_copy_function):
        * src/libANGLE/renderer/angle_format_map.json:
        * src/libANGLE/renderer/copyvertex.h:
        * src/libANGLE/renderer/copyvertex.inc.h:
        (rx::CopyTo32FVertexData):
        (rx::CopyXYZ10ToXYZW32FVertexData):
        (rx::CopyW2XYZ10ToXYZW32FVertexData):
        * src/libANGLE/renderer/d3d/DeviceD3D.cpp:
        (rx::DeviceD3D::getAttribute):
        (rx::DeviceD3D::getDevice): Deleted.
        * src/libANGLE/renderer/d3d/DeviceD3D.h:
        * src/libANGLE/renderer/d3d/HLSLCompiler.cpp:
        (rx::HLSLCompiler::ensureInitialized):
        (rx::HLSLCompiler::compileToBinary):
        * src/libANGLE/renderer/d3d/ProgramD3D.cpp:
        (rx::ProgramD3D::getVertexExecutableForCachedInputLayout):
        * src/libANGLE/renderer/d3d/RendererD3D.cpp:
        (rx::DefaultGLErrorCode):
        * src/libANGLE/renderer/d3d/ShaderD3D.cpp:
        (rx::ShaderD3D::compile):
        * src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp:
        (rx::Buffer11::getConstantBufferRange):
        (rx::Buffer11::NativeStorage::FillBufferDesc):
        * src/libANGLE/renderer/d3d/d3d11/Context11.cpp:
        (rx::Context11::drawArrays):
        (rx::Context11::drawArraysInstanced):
        (rx::Context11::drawArraysInstancedBaseInstance):
        (rx::Context11::drawArraysIndirect):
        * src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp:
        (rx::DebugAnnotator11::initialize):
        * src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp:
        (rx::Renderer11::Renderer11):
        (rx::Renderer11::initialize):
        (rx::Renderer11::callD3D11On12CreateDevice):
        (rx::Renderer11::initializeD3DDevice):
        (rx::Renderer11::generateDisplayExtensions const):
        (rx::Renderer11::isValidNativeWindow const):
        (rx::Renderer11::createNativeWindow const):
        (rx::Renderer11::drawArrays):
        (rx::Renderer11::release):
        (rx::Renderer11::getShareHandleSupport const):
        (rx::Renderer11::copyImageInternal):
        * src/libANGLE/renderer/d3d/d3d11/Renderer11.h:
        * src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp:
        (rx::TextureStorage11::getSRVForImage):
        (rx::TextureStorage11::getUAVForImage):
        * src/libANGLE/renderer/d3d/d3d11/Trim11.cpp:
        (rx::Trim11::trim):
        (rx::Trim11::registerForRendererTrimRequest):
        (rx::Trim11::unregisterForRendererTrimRequest):
        * src/libANGLE/renderer/d3d/d3d11/Trim11.h:
        * src/libANGLE/renderer/d3d/d3d11/converged/CompositorNativeWindow11.cpp:
        (rx::RoHelper::SupportedWindowsRelease):
        * src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp:
        (rx::d3d11_gl::GenerateCaps):
        (rx::d3d11::InitializeFeatures):
        * src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h:
        * src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp:
        (rx::NativeWindow11WinRT::createSwapChain):
        * src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h:
        * src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h:
        * src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp:
        (rx::d3d9::InitializeFeatures):
        * src/libANGLE/renderer/gen_angle_format_table.py:
        (ceil_int):
        (get_channel_struct):
        (get_mip_generation_function):
        * src/libANGLE/renderer/gl/BlitGL.cpp:
        (rx::BlitGL::copyImageToLUMAWorkaroundTexture):
        (rx::BlitGL::copySubImageToLUMAWorkaroundTexture):
        (rx::BlitGL::blitColorBufferWithShader):
        (rx::BlitGL::copySubTexture):
        (rx::BlitGL::copySubTextureCPUReadback):
        (rx::BlitGL::copyTexSubImage):
        (rx::BlitGL::clearRenderableTexture):
        (rx::BlitGL::clearRenderbuffer):
        (rx::BlitGL::clearFramebuffer):
        (rx::BlitGL::clearRenderableTextureAlphaToOne):
        (rx::BlitGL::initializeResources):
        (rx::BlitGL::orphanScratchTextures):
        (rx::BlitGL::setScratchTextureParameter):
        (rx::BlitGL::getBlitProgram):
        (rx::BlitGL::getBlitProgramType): Deleted.
        * src/libANGLE/renderer/gl/BlitGL.h:
        * src/libANGLE/renderer/gl/ContextGL.cpp:
        (rx::ContextGL::createRenderbuffer):
        (rx::ContextGL::setDrawArraysState):
        (rx::ContextGL::setDrawElementsState):
        (rx::ContextGL::drawArrays):
        (rx::ContextGL::updateAttributesForBaseInstance):
        (rx::ContextGL::resetUpdatedAttributes):
        (rx::ContextGL::drawArraysInstancedBaseInstance):
        (rx::ContextGL::drawElements):
        (rx::ContextGL::drawElementsInstancedBaseVertexBaseInstance):
        (rx::ContextGL::validateState const):
        * src/libANGLE/renderer/gl/ContextGL.h:
        * src/libANGLE/renderer/gl/ProgramGL.cpp:
        (rx::ProgramGL::link):
        * src/libANGLE/renderer/gl/RenderbufferGL.cpp:
        (rx::RenderbufferGL::RenderbufferGL):
        (rx::RenderbufferGL::~RenderbufferGL):
        (rx::RenderbufferGL::onDestroy):
        (rx::RenderbufferGL::setStorage):
        (rx::RenderbufferGL::setStorageMultisample):
        (rx::RenderbufferGL::initializeContents):
        * src/libANGLE/renderer/gl/RenderbufferGL.h:
        * src/libANGLE/renderer/gl/ShaderGL.cpp:
        (rx::ShaderGL::compile):
        * src/libANGLE/renderer/gl/StateManagerGL.cpp:
        (rx::StateManagerGL::bindBufferBase):
        (rx::StateManagerGL::bindBufferRange):
        (rx::StateManagerGL::validateState const):
        * src/libANGLE/renderer/gl/StateManagerGL.h:
        * src/libANGLE/renderer/gl/SurfaceGL.cpp:
        (rx::SurfaceGL::initializeContents):
        * src/libANGLE/renderer/gl/TextureGL.cpp:
        (rx::TextureGL::setImageHelper):
        (rx::TextureGL::setSubImage):
        (rx::TextureGL::setCompressedImage):
        (rx::TextureGL::setCompressedSubImage):
        (rx::TextureGL::copyImage):
        (rx::TextureGL::copySubTextureHelper):
        (rx::TextureGL::setStorage):
        (rx::TextureGL::setImageExternal):
        (rx::TextureGL::setStorageMultisample):
        (rx::TextureGL::setStorageExternalMemory):
        (rx::TextureGL::setEGLImageTarget):
        (rx::TextureGL::setLevelInfo):
        (rx::TextureGL::initializeContents):
        * src/libANGLE/renderer/gl/VertexArrayGL.cpp:
        (rx::VertexArrayGL::streamAttributes const):
        (rx::VertexArrayGL::validateState const):
        * src/libANGLE/renderer/gl/VertexArrayGL.h:
        * src/libANGLE/renderer/gl/cgl/DeviceCGL.cpp: Added.
        (rx::DeviceCGL::DeviceCGL):
        (rx::DeviceCGL::~DeviceCGL):
        (rx::DeviceCGL::initialize):
        (rx::DeviceCGL::getAttribute):
        (rx::DeviceCGL::getType):
        (rx::DeviceCGL::generateExtensions const):
        * src/libANGLE/renderer/gl/cgl/DeviceCGL.h: Added.
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.h:
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm:
        (rx::DisplayCGL::createDevice):
        (rx::DisplayCGL::getCGLPixelFormat const):
        (rx::DisplayCGL::generateExtensions const):
        * src/libANGLE/renderer/gl/cgl/IOSurfaceSurfaceCGL.mm:
        (rx::IOSurfaceSurfaceCGL::initializeAlphaChannel):
        * src/libANGLE/renderer/gl/egl/DisplayEGL.cpp:
        (rx::DisplayEGL::generateExtensions const):
        * src/libANGLE/renderer/gl/glx/DisplayGLX.cpp:
        (rx::DisplayGLX::makeCurrent):
        * src/libANGLE/renderer/gl/glx/WindowSurfaceGLX.cpp:
        (rx::WindowSurfaceGLX::initialize):
        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
        (rx::nativegl_gl::GenerateCaps):
        (rx::nativegl_gl::InitializeFeatures):
        (rx::nativegl_gl::InitializeFrontendFeatures):
        (rx::nativegl::SupportsCompute):
        (rx::nativegl::GetBufferBindingQuery):
        (rx::nativegl::GetBufferBindingString):
        * src/libANGLE/renderer/gl/renderergl_utils.h:
        * src/libANGLE/renderer/load_functions_data.json:
        * src/libANGLE/renderer/load_functions_table_autogen.cpp:
        (angle::GetLoadFunctionsMap):
        * src/libANGLE/renderer/null/DeviceNULL.cpp:
        (rx::DeviceNULL::getAttribute):
        (rx::DeviceNULL::getDevice): Deleted.
        * src/libANGLE/renderer/null/DeviceNULL.h:
        * src/libANGLE/renderer/renderer_utils.cpp:
        (rx::ShouldUseDebugLayers):
        * src/libANGLE/renderer/vulkan/BufferVk.cpp:
        (rx::BufferVk::release):
        (rx::BufferVk::mapRangeImpl):
        (rx::BufferVk::setDataImpl):
        * src/libANGLE/renderer/vulkan/CommandGraph.cpp:
        (rx::vk::CommandGraphResource::CommandGraphResource):
        (rx::vk::CommandGraphResource::~CommandGraphResource):
        (rx::vk::CommandGraphResource::isResourceInUse const):
        (rx::vk::CommandGraphResource::recordCommands):
        (rx::vk::CommandGraphResource::addWriteDependency):
        (rx::vk::CommandGraphResource::addReadDependency):
        (rx::vk::CommandGraphResource::startNewCommands):
        (rx::vk::CommandGraphResource::onWriteImpl):
        (rx::vk::SharedGarbage::SharedGarbage):
        (rx::vk::SharedGarbage::operator=):
        (rx::vk::SharedGarbage::destroyIfComplete):
        (rx::vk::CommandGraph::~CommandGraph):
        (rx::vk::CommandGraph::submitCommands):
        (rx::vk::CommandGraph::releaseResourceUses):
        (rx::vk::CommandGraph::releaseResourceUsesAndUpdateSerials):
        (rx::vk::CommandGraphResource::resetQueueSerial): Deleted.
        * src/libANGLE/renderer/vulkan/CommandGraph.h:
        (rx::vk::CommandGraphResource::getLatestSerial const):
        (rx::vk::CommandGraphResource::hasStartedRenderPass const):
        (rx::vk::CommandGraphResource::updateCurrentAccessNodes):
        (rx::vk::CommandGraphResource::onGraphAccess):
        (rx::vk::CommandGraphResource::appendToStartedRenderPass):
        (rx::vk::CommandGraphResource::renderPassStartedButEmpty const):
        (rx::vk::CommandGraphResource::clearRenderPassColorAttachment):
        (rx::vk::CommandGraphResource::clearRenderPassDepthAttachment):
        (rx::vk::CommandGraphResource::clearRenderPassStencilAttachment):
        (rx::vk::CommandGraphResource::invalidateRenderPassColorAttachment):
        (rx::vk::CommandGraphResource::invalidateRenderPassDepthAttachment):
        (rx::vk::CommandGraphResource::invalidateRenderPassStencilAttachment):
        (rx::vk::CommandGraphResource::getRenderPassRenderArea const):
        (rx::vk::CommandGraphResource::addGlobalMemoryBarrier):
        (rx::vk::CommandGraphResource::hasChildlessWritingNode const):
        (rx::vk::CommandGraph::onResourceUse):
        (rx::vk::CommandGraphResource::getStoredQueueSerial const): Deleted.
        (rx::vk::CommandGraphResource::updateQueueSerial): Deleted.
        * src/libANGLE/renderer/vulkan/ContextVk.cpp:
        (rx::CommandBatch::CommandBatch):
        (rx::CommandBatch::operator=):
        (rx::CommandBatch::destroy):
        (rx::CommandQueue::destroy):
        (rx::CommandQueue::init):
        (rx::CommandQueue::checkCompletedCommands):
        (rx::CommandQueue::releaseToCommandBatch):
        (rx::CommandQueue::clearAllGarbage):
        (rx::CommandQueue::allocatePrimaryCommandBuffer):
        (rx::CommandQueue::releasePrimaryCommandBuffer):
        (rx::CommandQueue::handleDeviceLost):
        (rx::CommandQueue::hasInFlightCommands const):
        (rx::CommandQueue::finishToSerialOrTimeout):
        (rx::CommandQueue::submitFrame):
        (rx::CommandQueue::getLastSubmittedFence const):
        (rx::ContextVk::ContextVk):
        (rx::ContextVk::onDestroy):
        (rx::ContextVk::initialize):
        (rx::ContextVk::setupDraw):
        (rx::ContextVk::setupIndirectDraw):
        (rx::ContextVk::setupIndexedIndirectDraw):
        (rx::ContextVk::setupLineLoopIndexedIndirectDraw):
        (rx::ContextVk::handleDirtyGraphicsVertexBuffers):
        (rx::ContextVk::handleDirtyGraphicsIndexBuffer):
        (rx::ContextVk::submitFrame):
        (rx::ContextVk::flushCommandGraph):
        (rx::ContextVk::synchronizeCpuGpuTime):
        (rx::ContextVk::traceGpuEventImpl):
        (rx::ContextVk::checkCompletedGpuEvents):
        (rx::ContextVk::flushGpuEvents):
        (rx::ContextVk::clearAllGarbage):
        (rx::ContextVk::handleDeviceLost):
        (rx::ContextVk::drawArraysIndirect):
        (rx::ContextVk::drawElementsIndirect):
        (rx::ContextVk::syncState):
        (rx::ContextVk::onMakeCurrent):
        (rx::ContextVk::dispatchComputeIndirect):
        (rx::ContextVk::memoryBarrier):
        (rx::ContextVk::writeAtomicCounterBufferDriverUniformOffsets):
        (rx::ContextVk::updateActiveTextures):
        (rx::ContextVk::updateActiveImages):
        (rx::ContextVk::shouldFlush):
        (rx::ContextVk::flushImpl):
        (rx::ContextVk::finishImpl):
        (rx::ContextVk::isSerialInUse const):
        (rx::ContextVk::checkCompletedCommands):
        (rx::ContextVk::finishToSerial):
        (rx::ContextVk::finishToSerialOrTimeout):
        (rx::ContextVk::getCompatibleRenderPass):
        (rx::ContextVk::getRenderPassWithOps):
        (rx::ContextVk::ensureSubmitFenceInitialized):
        (rx::ContextVk::getNextSubmitFence):
        (rx::ContextVk::getLastSubmittedFence const):
        (rx::ContextVk::getTimestamp):
        (rx::ContextVk::updateDefaultAttribute):
        (rx::ContextVk::waitForSwapchainImageIfNecessary):
        (rx::ContextVk::CommandBatch::CommandBatch): Deleted.
        (rx::ContextVk::CommandBatch::operator=): Deleted.
        (rx::ContextVk::CommandBatch::destroy): Deleted.
        (rx::ContextVk::releaseToCommandBatch): Deleted.
        (rx::ContextVk::recycleCommandBatch): Deleted.
        (rx::ContextVk::getCommandGraph): Deleted.
        * src/libANGLE/renderer/vulkan/ContextVk.h:
        (rx::ContextVk::onVertexAttributeChange):
        (rx::ContextVk::getCurrentQueueSerial const):
        (rx::ContextVk::getLastSubmittedQueueSerial const):
        (rx::ContextVk::getLastCompletedQueueSerial const):
        (rx::ContextVk::addGarbage):
        (rx::ContextVk::getCommandGraph):
        (rx::ContextVk::releaseObject): Deleted.
        * src/libANGLE/renderer/vulkan/DeviceVk.cpp:
        (rx::DeviceVk::getAttribute):
        (rx::DeviceVk::getDevice): Deleted.
        * src/libANGLE/renderer/vulkan/DeviceVk.h:
        * src/libANGLE/renderer/vulkan/DisplayVk.cpp:
        (rx::DisplayVk::generateExtensions const):
        * src/libANGLE/renderer/vulkan/FramebufferVk.cpp:
        (rx::FramebufferVk::destroy):
        (rx::FramebufferVk::invalidate):
        (rx::FramebufferVk::invalidateSub):
        (rx::FramebufferVk::clearImpl):
        (rx::FramebufferVk::getImplementationColorReadType const):
        (rx::FramebufferVk::blitWithCommand):
        (rx::FramebufferVk::blit):
        (rx::FramebufferVk::resolveColorWithCommand):
        (rx::FramebufferVk::readPixelsImpl):
        (rx::FramebufferVk::onScissorChange):
        * src/libANGLE/renderer/vulkan/FramebufferVk.h:
        (rx::FramebufferVk::appendToStartedRenderPass):
        * src/libANGLE/renderer/vulkan/GlslangWrapper.cpp:
        * src/libANGLE/renderer/vulkan/ImageVk.cpp:
        (rx::ImageVk::onDestroy):
        (rx::ImageVk::orphan):
        * src/libANGLE/renderer/vulkan/ImageVk.h:
        * src/libANGLE/renderer/vulkan/MemoryObjectVk.cpp:
        (rx::MemoryObjectVk::createImage):
        * src/libANGLE/renderer/vulkan/OverlayVk.cpp:
        (rx::OverlayVk::createFont):
        (rx::OverlayVk::cullWidgets):
        (rx::OverlayVk::onPresent):
        * src/libANGLE/renderer/vulkan/PersistentCommandPool.cpp:
        (rx::vk::PersistentCommandPool::destroy):
        (rx::vk::PersistentCommandPool::allocate):
        (rx::vk::PersistentCommandPool::alloc): Deleted.
        * src/libANGLE/renderer/vulkan/PersistentCommandPool.h:
        * src/libANGLE/renderer/vulkan/ProgramVk.cpp:
        (rx::ProgramVk::reset):
        (rx::ProgramVk::initDefaultUniformLayoutMapping):
        (rx::ProgramVk::updateDefaultUniformsDescriptorSet):
        (rx::ProgramVk::updateBuffersDescriptorSet):
        (rx::ProgramVk::updateAtomicCounterBuffersDescriptorSet):
        (rx::ProgramVk::updateImagesDescriptorSet):
        (rx::ProgramVk::updateTransformFeedbackDescriptorSetImpl):
        (rx::ProgramVk::updateDescriptorSets):
        * src/libANGLE/renderer/vulkan/ProgramVk.h:
        (rx::ProgramVk::getGraphicsPipeline):
        * src/libANGLE/renderer/vulkan/README.md:
        * src/libANGLE/renderer/vulkan/RenderTargetVk.cpp:
        (rx::RenderTargetVk::RenderTargetVk):
        (rx::RenderTargetVk::init):
        (rx::RenderTargetVk::reset):
        (rx::RenderTargetVk::onColorDraw):
        (rx::RenderTargetVk::onDepthStencilDraw):
        (rx::RenderTargetVk::updateSwapchainImage):
        (rx::RenderTargetVk::getImageForRead):
        (rx::RenderTargetVk::getImageForWrite const):
        (rx::RenderTargetVk::getFetchImageView const): Deleted.
        * src/libANGLE/renderer/vulkan/RenderTargetVk.h:
        * src/libANGLE/renderer/vulkan/RenderbufferVk.cpp:
        (rx::RenderbufferVk::setStorageImpl):
        (rx::RenderbufferVk::setStorageEGLImageTarget):
        (rx::RenderbufferVk::releaseImage):
        * src/libANGLE/renderer/vulkan/RenderbufferVk.h:
        * src/libANGLE/renderer/vulkan/RendererVk.cpp:
        (rx::RendererVk::~RendererVk):
        (rx::RendererVk::onDestroy):
        (rx::RendererVk::notifyDeviceLost):
        (rx::RendererVk::initialize):
        (rx::RendererVk::initializeDevice):
        (rx::RendererVk::initFeatures):
        (rx::RendererVk::queueSubmit):
        (rx::RendererVk::cleanupGarbage):
        (rx::RendererVk::getMaxFenceWaitTimeNs const):
        (rx::RendererVk::onCompletedSerial):
        (rx::RendererVk::nextSerial): Deleted.
        (rx::RendererVk::addGarbage): Deleted.
        * src/libANGLE/renderer/vulkan/RendererVk.h:
        (rx::CollectGarbage):
        (rx::RendererVk::getMaxVertexAttribDivisor const):
        (rx::RendererVk::collectGarbageAndReinit):
        (rx::RendererVk::getCurrentQueueSerial const):
        (rx::RendererVk::getLastSubmittedQueueSerial const):
        (rx::RendererVk::getLastCompletedQueueSerial const):
        (rx::RendererVk::shouldCleanupGarbage):
        * src/libANGLE/renderer/vulkan/SamplerVk.cpp:
        (rx::SamplerVk::onDestroy):
        (rx::SamplerVk::syncState):
        * src/libANGLE/renderer/vulkan/SecondaryCommandBuffer.cpp:
        (rx::vk::priv::SecondaryCommandBuffer::executeCommands):
        (rx::vk::priv::SecondaryCommandBuffer::dumpCommands const):
        * src/libANGLE/renderer/vulkan/SecondaryCommandBuffer.h:
        (rx::vk::priv::SecondaryCommandBuffer::drawIndirect):
        (rx::vk::priv::SecondaryCommandBuffer::drawIndexedIndirect):
        * src/libANGLE/renderer/vulkan/SemaphoreVk.cpp:
        (rx::SemaphoreVk::onDestroy):
        * src/libANGLE/renderer/vulkan/SurfaceVk.cpp:
        (rx::OffscreenSurfaceVk::AttachmentImage::initialize):
        (rx::OffscreenSurfaceVk::AttachmentImage::destroy):
        (rx::OffscreenSurfaceVk::OffscreenSurfaceVk):
        (rx::WindowSurfaceVk::WindowSurfaceVk):
        (rx::WindowSurfaceVk::createSwapChain):
        (rx::WindowSurfaceVk::releaseSwapchainImages):
        (rx::WindowSurfaceVk::destroySwapChainImages):
        (rx::WindowSurfaceVk::present):
        (rx::WindowSurfaceVk::nextSwapchainImage):
        * src/libANGLE/renderer/vulkan/SyncVk.cpp:
        (rx::vk::SyncHelper::SyncHelper):
        (rx::vk::SyncHelper::~SyncHelper):
        (rx::vk::SyncHelper::releaseToRenderer):
        (rx::vk::SyncHelper::initialize):
        (rx::vk::SyncHelper::clientWait):
        (rx::vk::SyncHelper::serverWait):
        (rx::vk::SyncHelper::getStatus):
        (rx::SyncVk::onDestroy):
        (rx::SyncVk::serverWait):
        (rx::EGLSyncVk::onDestroy):
        (rx::EGLSyncVk::serverWait):
        (rx::FenceSyncVk::FenceSyncVk): Deleted.
        (rx::FenceSyncVk::~FenceSyncVk): Deleted.
        (rx::FenceSyncVk::onDestroy): Deleted.
        (rx::FenceSyncVk::initialize): Deleted.
        (rx::FenceSyncVk::clientWait): Deleted.
        (rx::FenceSyncVk::serverWait): Deleted.
        (rx::FenceSyncVk::getStatus): Deleted.
        * src/libANGLE/renderer/vulkan/SyncVk.h:
        * src/libANGLE/renderer/vulkan/TextureVk.cpp:
        (rx::TextureVk::onDestroy):
        (rx::TextureVk::copySubImageImpl):
        (rx::TextureVk::copySubTextureImpl):
        (rx::TextureVk::copySubImageImplWithTransfer):
        (rx::TextureVk::copySubImageImplWithDraw):
        (rx::TextureVk::setStorageExternalMemory):
        (rx::TextureVk::setEGLImageTarget):
        (rx::TextureVk::ensureImageAllocated):
        (rx::TextureVk::setImageHelper):
        (rx::TextureVk::copyImageDataToBufferAndGetData):
        (rx::TextureVk::copyImageDataToBuffer):
        (rx::TextureVk::generateMipmapsWithCPU):
        (rx::TextureVk::generateMipmap):
        (rx::TextureVk::setBaseLevel):
        (rx::TextureVk::changeLevels):
        (rx::TextureVk::bindTexImage):
        (rx::TextureVk::getAttachmentRenderTarget):
        (rx::TextureVk::ensureImageInitialized):
        (rx::TextureVk::initLayerRenderTargets):
        (rx::TextureVk::syncState):
        (rx::TextureVk::getReadImageView const):
        (rx::TextureVk::getFetchImageView const):
        (rx::TextureVk::getLayerLevelDrawImageView):
        (rx::TextureVk::getLayerLevelStorageImageView):
        (rx::TextureVk::initImage):
        (rx::TextureVk::initImageViews):
        (rx::TextureVk::releaseImage):
        (rx::TextureVk::releaseImageViews):
        (rx::TextureVk::releaseStagingBuffer):
        (rx::TextureVk::getLevelCount const):
        (rx::TextureVk::generateMipmapLevelsWithCPU):
        (rx::TextureVk::TextureVkViews::TextureVkViews): Deleted.
        (rx::TextureVk::TextureVkViews::~TextureVkViews): Deleted.
        (rx::TextureVk::TextureVkViews::release): Deleted.
        (rx::TextureVk::init3DRenderTargets): Deleted.
        (rx::TextureVk::initCubeMapRenderTargets): Deleted.
        (rx::TextureVk::getTextureViews const): Deleted.
        (rx::TextureVk::initImageViewImpl): Deleted.
        * src/libANGLE/renderer/vulkan/TextureVk.h:
        (): Deleted.
        * src/libANGLE/renderer/vulkan/TransformFeedbackVk.cpp:
        (rx::TransformFeedbackVk::onBeginOrEnd):
        * src/libANGLE/renderer/vulkan/UtilsVk.cpp:
        (rx::UtilsVk::ensureConvertIndexIndirectResourcesInitialized):
        (rx::UtilsVk::ensureConvertIndexIndirectLineLoopResourcesInitialized):
        (rx::UtilsVk::convertIndexIndirectBuffer):
        (rx::UtilsVk::convertLineLoopIndexIndirectBuffer):
        (rx::UtilsVk::startRenderPass):
        (rx::UtilsVk::clearFramebuffer):
        (rx::UtilsVk::blitResolveImpl):
        (rx::UtilsVk::stencilBlitResolveNoShaderExport):
        (rx::UtilsVk::copyImage):
        (rx::UtilsVk::cullOverlayWidgets):
        (rx::UtilsVk::drawOverlay):
        * src/libANGLE/renderer/vulkan/UtilsVk.h:
        * src/libANGLE/renderer/vulkan/VertexArrayVk.cpp:
        (rx::VertexArrayVk::destroy):
        (rx::VertexArrayVk::convertIndexBufferIndirectGPU):
        (rx::VertexArrayVk::handleLineLoopIndirect):
        (rx::VertexArrayVk::convertVertexBufferCPU):
        (rx::VertexArrayVk::syncDirtyAttrib):
        (rx::VertexArrayVk::updateStreamedAttribs):
        (rx::VertexArrayVk::updateDefaultAttrib):
        (rx::VertexArrayVk::updateClientAttribs): Deleted.
        * src/libANGLE/renderer/vulkan/VertexArrayVk.h:
        (rx::VertexArrayVk::getStreamingVertexAttribsMask const):
        * src/libANGLE/renderer/vulkan/android/HardwareBufferImageSiblingVkAndroid.cpp:
        (rx::HardwareBufferImageSiblingVkAndroid::initImpl):
        (rx::HardwareBufferImageSiblingVkAndroid::release):
        * src/libANGLE/renderer/vulkan/android/HardwareBufferImageSiblingVkAndroid.h:
        * src/libANGLE/renderer/vulkan/doc/FastOpenGLStateTransitions.md:
        * src/libANGLE/renderer/vulkan/doc/FormatTablesAndEmulation.md:
        * src/libANGLE/renderer/vulkan/doc/OpenGLLineSegmentRasterization.md:
        * src/libANGLE/renderer/vulkan/doc/ShaderModuleCompilation.md:
        * src/libANGLE/renderer/vulkan/gen_vk_internal_shaders.py:
        (shader_path):
        * src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000000.inc:
        * src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndex.comp.00000001.inc:
        * src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000008.inc:
        * src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000009.inc:
        * src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000018.inc:
        * src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000019.inc:
        * src/libANGLE/renderer/vulkan/shaders/src/ConvertIndex.comp:
        * src/libANGLE/renderer/vulkan/shaders/src/ConvertIndex.comp.json:
        * src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp:
        * src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp.json:
        * src/libANGLE/renderer/vulkan/vk_cache_utils.cpp:
        (rx::vk::GraphicsPipelineDesc::initializePipeline const):
        (rx::vk::GraphicsPipelineDesc::updateVertexInput):
        (rx::vk::PipelineLayoutDesc::updatePushConstantRange):
        (rx::RenderPassCache::addRenderPass):
        (rx::GraphicsPipelineCache::release):
        (rx::GraphicsPipelineCache::insertPipeline):
        * src/libANGLE/renderer/vulkan/vk_cache_utils.h:
        * src/libANGLE/renderer/vulkan/vk_caps_utils.cpp:
        (rx::RendererVk::ensureCapsInitialized const):
        * src/libANGLE/renderer/vulkan/vk_format_map.json:
        * src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp:
        (rx::vk::Format::initialize):
        * src/libANGLE/renderer/vulkan/vk_format_utils.cpp:
        (rx::MapSwizzleState):
        * src/libANGLE/renderer/vulkan/vk_helpers.cpp:
        (rx::vk::DynamicBuffer::allocate):
        (rx::vk::DynamicBuffer::releaseBufferListToRenderer):
        (rx::vk::DynamicBuffer::release):
        (rx::vk::DynamicBuffer::releaseInFlightBuffers):
        (rx::vk::DescriptorPoolHelper::release):
        (rx::vk::LineLoopHelper::LineLoopHelper):
        (rx::vk::LineLoopHelper::streamIndicesIndirect):
        (rx::vk::LineLoopHelper::release):
        (rx::vk::LineLoopHelper::destroy):
        (rx::vk::BufferHelper::init):
        (rx::vk::BufferHelper::release):
        (rx::vk::ImageHelper::ImageHelper):
        (rx::vk::ImageHelper::init):
        (rx::vk::ImageHelper::initExternal):
        (rx::vk::ImageHelper::releaseImage):
        (rx::vk::ImageHelper::releaseStagingBuffer):
        (rx::vk::ImageHelper::destroy):
        (rx::vk::ImageHelper::getBaseLevel):
        (rx::vk::ImageHelper::setBaseAndMaxLevels):
        (rx::vk::ImageHelper::generateMipmapsWithBlit):
        (rx::vk::ImageHelper::removeStagedUpdates):
        (rx::vk::ImageHelper::stageSubresourceUpdate):
        (rx::vk::ImageHelper::stageSubresourceUpdateAndGetData):
        (rx::vk::ImageHelper::stageSubresourceUpdateFromBuffer):
        (rx::vk::ImageHelper::stageSubresourceUpdateFromFramebuffer):
        (rx::vk::ImageHelper::allocateStagingMemory):
        (rx::vk::ImageHelper::flushStagedUpdates):
        (rx::vk::ImageHelper::isUpdateStaged):
        (rx::vk::ImageHelper::SubresourceUpdate::SubresourceUpdate):
        (rx::vk::ImageHelper::SubresourceUpdate::release):
        (rx::vk::FramebufferHelper::release):
        (rx::vk::ShaderProgramHelper::release):
        (rx::vk::DynamicBuffer::releaseBufferListToContext): Deleted.
        (rx::vk::DynamicBuffer::releaseBufferListToDisplay): Deleted.
        (rx::vk::ImageHelper::dumpResources): Deleted.
        * src/libANGLE/renderer/vulkan/vk_helpers.h:
        (rx::vk::ShaderProgramHelper::getShader):
        (rx::vk::ShaderProgramHelper::getGraphicsPipeline):
        * src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp:
        (rx::vk::ShaderLibrary::destroy):
        (rx::vk::ShaderLibrary::getConvertIndexIndirectLineLoop_comp):
        * src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.gni:
        * src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h:
        * src/libANGLE/renderer/vulkan/vk_utils.cpp:
        (rx::HasKhronosValidationLayer):
        (rx::HasStandardValidationLayer):
        (rx::GetAvailableValidationLayers):
        (rx::vk::StagingBuffer::init):
        (rx::vk::StagingBuffer::release):
        (rx::vk::GarbageObject::GarbageObject):
        (rx::vk::GarbageObject::operator=):
        (rx::vk::GarbageObject::destroy):
        (rx::gl_vk::GetSamplerMipmapMode):
        (rx::vk::StagingBuffer::dumpResources): Deleted.
        (rx::vk::GarbageObjectBase::GarbageObjectBase): Deleted.
        (rx::vk::GarbageObjectBase::destroy): Deleted.
        (rx::vk::GarbageObject::destroyIfComplete): Deleted.
        * src/libANGLE/renderer/vulkan/vk_utils.h:
        (rx::vk::GarbageObject::valid const):
        (rx::vk::GarbageObject::Get):
        (rx::vk::GetGarbage):
        (rx::vk::GarbageObjectBase::GarbageObjectBase): Deleted.
        * src/libANGLE/renderer/vulkan/vk_wrapper.h:
        (rx::vk::WrappedObject::getHandle const):
        (rx::vk::WrappedObject::valid const):
        (rx::vk::WrappedObject::ptr const):
        (rx::vk::WrappedObject::release):
        (rx::vk::WrappedObject::WrappedObject):
        (rx::vk::WrappedObject::~WrappedObject):
        (rx::vk::WrappedObject::operator=):
        (rx::vk::priv::CommandBuffer::SupportsQueries):
        (rx::vk::priv::CommandBuffer::getMemoryUsageStats const):
        (rx::vk::priv::CommandBuffer::drawIndexedIndirect):
        (rx::vk::priv::CommandBuffer::drawIndirect):
        (rx::vk::WrappedObject::dumpResources): Deleted.
        (rx::vk::priv::CommandBuffer::getMemoryUsageStats): Deleted.
        * src/libANGLE/validationEGL.cpp:
        (egl::ValidateCreateContext):
        (egl::ValidateMakeCurrent):
        (egl::ValidateCompatibleSurface):
        (egl::ValidateStreamConsumerGLTextureExternalKHR):
        (egl::ValidateStreamConsumerGLTextureExternalAttribsNV):
        (egl::ValidateQueryStringiANGLE):
        (egl::ValidateCompatibleConfigs): Deleted.
        * src/libANGLE/validationEGL.h:
        * src/libANGLE/validationES.cpp:
        (gl::ValidateRenderbufferStorageParametersBase):
        (gl::ValidateTexStorageMultisample):
        * src/libANGLE/validationES.h:
        (gl::ValidateVertexFormat):
        * src/libANGLE/validationES2.cpp:
        (gl::ValidateES2TexStorageParameters):
        * src/libANGLE/validationES3.cpp:
        (gl::ValidateES3TexStorageParametersBase):
        * src/libANGLE/validationES31.cpp:
        (gl::err::ValidateProgramResourceIndex):
        * src/libGLESv2.gni:
        * src/libGLESv2/entry_points_egl_ext.cpp:
        * src/tests/BUILD.gn:
        * src/tests/angle_deqp_tests_main.cpp:
        (main):
        * src/tests/angle_end2end_tests.gni:
        * src/tests/compiler_tests/DebugShaderPrecision_test.cpp:
        (TEST_F):
        * src/tests/compiler_tests/ImmutableString_test_ESSL_autogen.cpp:
        (sh::TEST):
        * src/tests/compiler_tests/ImmutableString_test_autogen.cpp:
        (sh::TEST):
        * src/tests/compiler_tests/QualificationOrder_test.cpp:
        (TEST_F):
        * src/tests/deqp_support/angle_deqp_gtest.cpp:
        (angle::InitTestHarness):
        * src/tests/deqp_support/angle_deqp_libtester_main.cpp:
        * src/tests/deqp_support/deqp_egl_TestExpectations: Removed.
        * src/tests/deqp_support/deqp_gles2_TestExpectations: Removed.
        * src/tests/deqp_support/deqp_gles31_TestExpectations: Removed.
        * src/tests/deqp_support/deqp_gles3_TestExpectations: Removed.
        * src/tests/deqp_support/deqp_khr_gles2_TestExpectations: Removed.
        * src/tests/deqp_support/deqp_khr_gles31_TestExpectations: Removed.
        * src/tests/deqp_support/deqp_khr_gles3_TestExpectations: Removed.
        * src/tests/deqp_support/tcuANGLENativeDisplayFactory.cpp:
        * src/tests/deqp_support/tcuANGLEPlatform.cpp:
        (tcu::ANGLEPlatform::ANGLEPlatform):
        * src/tests/deqp_support/tes31Context_override.cpp:
        (deqp::gles31::Context::Context):
        (deqp::gles31::Context::~Context):
        (deqp::gles31::Context::createRenderContext):
        (deqp::gles31::Context::destroyRenderContext):
        (deqp::gles31::Context::getRenderTarget const):
        * src/tests/egl_tests/EGLDeviceCGLTest.cpp: Added.
        (EGLDeviceCGLQueryTest::EGLDeviceCGLQueryTest):
        (TEST_P):
        * src/tests/egl_tests/EGLDirectCompositionTest.cpp:
        * src/tests/egl_tests/EGLFeatureControlTest.cpp:
        (TEST_P):
        * src/tests/egl_tests/EGLNoConfigContextTest.cpp: Added.
        (EGLNoConfigContextTest::EGLNoConfigContextTest):
        (TEST_P):
        * src/tests/gl_tests/BlendFuncExtendedTest.cpp:
        (angle::EXTBlendFuncExtendedDrawTestES3::LinkProgram):
        * src/tests/gl_tests/ComputeShaderTest.cpp:
        * src/tests/gl_tests/CopyTexImageTest.cpp:
        (angle::TEST_P):
        * src/tests/gl_tests/CopyTextureTest.cpp:
        (angle::CopyTextureVariationsTest::initializeSourceTexture):
        (angle::CopyTextureVariationsTest::testCopyTexture):
        (angle::CopyTextureVariationsTest::testCopySubTexture):
        (angle::TEST_P):
        * src/tests/gl_tests/DrawBaseVertexBaseInstanceTest.cpp:
        (angle::DrawBaseVertexBaseInstanceTest::DrawBaseVertexBaseInstanceTest):
        (angle::DrawBaseVertexBaseInstanceTest::vertexShaderSource300):
        * src/tests/gl_tests/FramebufferTest.cpp:
        (TEST_P):
        * src/tests/gl_tests/GLSLTest.cpp:
        * src/tests/gl_tests/IndexBufferOffsetTest.cpp:
        * src/tests/gl_tests/InstancingTest.cpp:
        * src/tests/gl_tests/LineLoopTest.cpp:
        (LineLoopTest::checkPixels):
        (LineLoopTest::runTest):
        (LineLoopIndirectTest::runTest):
        (TEST_P):
        * src/tests/gl_tests/LinkAndRelinkTest.cpp:
        (angle::TEST_P):
        * src/tests/gl_tests/MipmapTest.cpp:
        * src/tests/gl_tests/OcclusionQueriesTest.cpp:
        * src/tests/gl_tests/ParallelShaderCompileTest.cpp:
        (angle::ParallelShaderCompileTest::TaskRunner::run):
        * src/tests/gl_tests/ProgramInterfaceTest.cpp:
        * src/tests/gl_tests/SimpleOperationTest.cpp:
        * src/tests/gl_tests/StateChangeTest.cpp:
        * src/tests/gl_tests/TextureTest.cpp:
        (angle::SliceFormatColor):
        (angle::SliceFormatColor32F):
        * src/tests/gl_tests/TimerQueriesTest.cpp:
        * src/tests/gl_tests/UniformBufferTest.cpp:
        * src/tests/gl_tests/VertexAttributeTest.cpp:
        (angle::TypeStride):
        (angle::Normalize10):
        (angle::Normalize2):
        (angle::Pack1010102):
        (angle::VertexAttributeTest::checkPixels):
        (angle::VertexAttributeTest::checkRGBPixels):
        (angle::VertexAttributeTest::runTest):
        (angle::TEST_P):
        * src/tests/gles1_conformance_tests/ConformanceTests.cpp:
        (angle::TEST_P):
        * src/tests/perf_tests/ANGLEPerfTest.cpp:
        * src/tests/perf_tests/DrawCallPerf.cpp:
        (angle::DrawArraysPerfParams::DrawArraysPerfParams): Deleted.
        (angle::DrawArraysPerfParams::story const): Deleted.
        (angle::operator<<): Deleted.
        (angle::CreateSimpleTexture2D): Deleted.
        (angle::DrawCallPerfBenchmark::DrawCallPerfBenchmark): Deleted.
        (angle::DrawCallPerfBenchmark::initializeBenchmark): Deleted.
        (): Deleted.
        * src/tests/perf_tests/EGLMakeCurrentPerf.cpp:
        * src/tests/perf_tests/LinkProgramPerfTest.cpp:
        (angle::TEST_P):
        * src/tests/perf_tests/MultiviewPerf.cpp:
        (angle::MultiviewCPUBoundBenchmark::initializeBenchmark):
        (angle::MultiviewGPUBoundBenchmark::initializeBenchmark):
        (angle::TEST_P):
        * src/tests/perf_tests/UniformsPerf.cpp:
        (TEST_P):
        * src/tests/perf_tests/VulkanPipelineCachePerf.cpp:
        (rx::VulkanPipelineCachePerfTest::step):
        * src/tests/perf_tests/glmark2Benchmark.cpp:
        * src/tests/test_expectations/GPUTestConfig.cpp:
        (angle::GPUTestConfig::GPUTestConfig):
        * src/tests/test_expectations/GPUTestConfig.h:
        * src/tests/test_expectations/GPUTestExpectationsParser.cpp:
        (angle::GPUTestExpectationsParser::parseLine):
        * src/tests/test_utils/ANGLETest.cpp:
        * src/tests/test_utils/ANGLETest.h:
        * src/tests/test_utils/angle_test_configs.cpp:
        (angle::PlatformParameters::initDefaultParameters):
        (angle::operator<<):
        (angle::egl_platform::VULKAN_SWIFTSHADER):
        (angle::ES2_VULKAN_SWIFTSHADER):
        * src/tests/test_utils/angle_test_configs.h:
        * src/tests/test_utils/angle_test_instantiate.cpp:
        (angle::IsWindows7):
        * src/tests/test_utils/angle_test_instantiate.h:
        * src/third_party/compiler/README.chromium:
        * third_party/vulkan-headers/BUILD.gn: Removed.
        * third_party/vulkan-headers/vulkan_headers_script_deps.gni: Removed.
        * third_party/vulkan-loader/BUILD.gn:
        * third_party/vulkan-tools/BUILD.gn: Removed.
        * third_party/vulkan-validation-layers/BUILD.gn: Removed.
        * third_party/vulkan-validation-layers/dummy_spirv_tools_commit_id.h: Removed.
        * util/EGLWindow.cpp:
        * util/fuchsia/ScenicWindow.cpp:
        (ScenicWindow::resetNativeWindow):
        * util/posix/crash_handler_posix.cpp: Renamed from Source/ThirdParty/ANGLE/util/posix/Posix_crash_handler.cpp.
        * util/posix/test_utils_posix.cpp: Renamed from Source/ThirdParty/ANGLE/util/posix/Posix_system_utils.cpp.
        * util/test_utils.h: Renamed from Source/ThirdParty/ANGLE/util/system_utils.h.
        * util/util.gni:
        * util/util_gl.h:
        * util/windows/WGLWindow.cpp:
        * util/windows/test_utils_win.cpp: Renamed from Source/ThirdParty/ANGLE/util/windows/Windows_system_utils.cpp.
        (angle::PrintStackBacktrace):
        * util/windows/win32/test_utils_win32.cpp: Renamed from Source/ThirdParty/ANGLE/util/windows/win32/Win32_system_utils.cpp.
        * util/x11/X11Window.cpp:

2019-10-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][Clang][ANGLE] global_state.cpp(39,1): error: static_assert failed due to requirement 'std::is_trivially_constructible<std::atomic<std::mutex *>>::value' "global mutex is not trivially constructible"
        https://bugs.webkit.org/show_bug.cgi?id=201751

        Reviewed by Alex Christensen.

        Clang-cl couldn't compile the latest ANGLE with MS STL owing to a
        static_assert failure.

        Fix it by cherri-picking the upstream fix.
        <https://chromium.googlesource.com/angle/angle/+/755417dd79071d6149c81418e1404b0c61d19672>

        * AUTHORS:
        * src/common/angleutils.h:
        * src/libGLESv2/global_state.cpp:

2019-09-24  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] ANGLE's eglplatform.h is build broken with -DENABLE_X11_PLATFORM=OFF
        https://bugs.webkit.org/show_bug.cgi?id=198621

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake: Define WL_EGL_PLATFORM to prefer Wayland type
        definitions with ENABLE_WAYLAND_TARGET=ON and ENABLE_X11_TARGET=OFF
        to avoid ANGLE's eglplatform.h from trying to include the X11 headers.

2019-09-16  James Darpinian  <jdarpinian@chromium.org>

        Remove commit.h copying build steps
        https://bugs.webkit.org/show_bug.cgi?id=201785

        Reviewed by Alex Christensen.

        * ANGLE.xcodeproj/project.pbxproj: Remove leftover build step
        * CMakeLists.txt: Remove commit.h copying
        * src/common/version.h: Restore to upstream version
        * src/id/commit.h: Added.
        * update-angle.sh: Copy commit.h to id/commit.h at import time

2019-09-12  James Darpinian  <jdarpinian@chromium.org>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=201156

        Reviewed by Alex Christensen.

        Update to 2019-9-9, revision 79ad0411911b2fc84834c3705f55707be9e4b498
        I merged a bunch of changes to upstream ANGLE, to minimize the changes
        necessary when updating ANGLE in WebKit.

        * ANGLE.plist: Update commit hashes
        * ANGLE.txt: Removed in favor of LICENSE
        * ANGLE.xcodeproj/project.pbxproj: Updated with upstream changes
          Also, copy src/commit.h to id/commit.h during build
        * CMakeLists.txt: Updated with upstream changes
          Also, copy src/commit.h to id/commit.h during build
        * Compiler.cmake: Updated with upstream changes
        * GLESv2.cmake: Updated with upstream changes
        * adjust-angle-include-paths-rule: Support "" as well as <> for includes
        * adjust-angle-include-paths.sh: Support "" as well as <> for includes
        * changes.diff: Pared down to just legal disclaimer and warning flag changes
        * update-angle.sh: Update ANGLE.plist

        * Many other files modified/added/removed upstream

2019-09-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r249791.

        Breaks internal production builds.

        Reverted changeset:

        "Update ANGLE"
        https://bugs.webkit.org/show_bug.cgi?id=201156
        https://trac.webkit.org/changeset/249791

2019-09-11  James Darpinian  <jdarpinian@chromium.org>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=201156

        Reviewed by Alex Christensen.

        Update to 2019-9-9, revision 79ad0411911b2fc84834c3705f55707be9e4b498
        I merged a bunch of changes to upstream ANGLE, to minimize the changes
        necessary when updating ANGLE in WebKit.

        * ANGLE.plist: Update commit hashes
        * ANGLE.txt: Removed in favor of LICENSE
        * ANGLE.xcodeproj/project.pbxproj: Updated with upstream changes
        Also, copy src/commit.h to id/commit.h during build
        * CMakeLists.txt: Updated with upstream changes
        Also, copy src/commit.h to id/commit.h during build
        * Compiler.cmake: Updated with upstream changes
        * GLESv2.cmake: Updated with upstream changes
        * adjust-angle-include-paths-rule: Support "" as well as <> for includes
        * adjust-angle-include-paths.sh: Support "" as well as <> for includes
        * changes.diff: Pared down to just legal disclaimer and warning flag changes
        * update-angle.sh: Update ANGLE.plist

        * Many other files modified/added/removed upstream

2019-08-29  Keith Rollin  <krollin@apple.com>

        Update .xcconfig symbols to reflect the current set of past and future product versions.
        https://bugs.webkit.org/show_bug.cgi?id=200720
        <rdar://problem/54305032>

        Reviewed by Alex Christensen.

        Remove version symbols related to old OS's we no longer support,
        ensure that version symbols are defined for OS's we do support.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2019-08-26  James Darpinian  <jdarpinian@google.com>

        Add a script to update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=201109

        Reviewed by Alex Christensen.

        * update-angle.sh: Added.

2019-08-16  Keith Rollin  <krollin@apple.com>

        Add XCBuild support to ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=200836
        <rdar://problem/54410420>

        Reviewed by Alex Christensen.

        The ANGLE Xcode project contains two Build Phases: one that copies
        some headers, and another that modifies those headers. This
        combination does not work with XCBuild, which gets confused when it
        finds that headers that it's copied have been changed. When it detects
        this, XCBuild thinks that it should recopy those headers on the next
        build, causing their modification dates to change and for all
        dependent files to be rebuilt. This essentially turns an incremental
        rebuild into a full rebuild.

        Address this problem by using a new facility in Xcode 11. This
        facility supports the copying and modifying headers files in a single
        step. It is achieved by first enabling the facility by setting
        APPLY_RULES_IN_COPY_HEADERS to YES. Next, we add a new Build Rule that
        invokes a custom script when the header files are copied. Third, we
        provide this script, which can essentially be a stripped down version
        of the one already used to modify the exported headers files. Finally,
        we disable the use of that old script when we are using Xcode 11. In
        this way, the old script that modifies the exported headers is used in
        Xcode 10, and the new facility is used in Xcode 11.

        See also Bug 197340 for where this process was also applied to
        JavaScriptCore, WebKit, and WebKitLegacy.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE.xcconfig:
        * adjust-angle-include-paths-rule: Added.

2019-08-08  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Get WebKit, WebKit2, and MiniBrowser building and executing
        https://bugs.webkit.org/show_bug.cgi?id=200539

        Reviewed by Dean Jackson.

        * PlatformFTW.cmake: Added.

2019-07-17  Kenneth Russell  <kbr@chromium.org>

        Make ANGLE work inside WebKit2's sandbox
        https://bugs.webkit.org/show_bug.cgi?id=199844

        Reviewed by Alex Christensen.

        Cherry-pick fix for crbug.com/angleproject/3383 to eliminate use
        of deprecated API in SystemInfo_mac.mm.

        * BUILD.gn:
        * src/gpu_info_util/SystemInfo.cpp:
        (angle::FindActiveGPU):
        (angle::PrintSystemInfo):
        (angle::FindPrimaryGPU): Deleted.
        * src/gpu_info_util/SystemInfo.h:
        * src/gpu_info_util/SystemInfo_internal.h:
        * src/gpu_info_util/SystemInfo_linux.cpp:
        (angle::GetSystemInfo):
        * src/gpu_info_util/SystemInfo_mac.mm:
        (angle::GetSystemInfo):
        * src/gpu_info_util/SystemInfo_win.cpp:
        (angle::GetSystemInfo):
        * src/tests/BUILD.gn:
        * src/tests/test_expectations/GPUTestConfig.cpp:
        * src/tests/test_utils/angle_test_instantiate.cpp:
        (angle::IsConfigWhitelisted):

2019-07-10  Alex Christensen  <achristensen@webkit.org>

        Allow CMake to build WebCore on Mac
        https://bugs.webkit.org/show_bug.cgi?id=198979

        Reviewed by Don Olmstead.

        * include/GLSLANG/ShaderLang.h:

2019-07-10  Kenneth Russell  <kbr@chromium.org>

        Hook up WebGL's back buffer in ANGLE backend on macOS
        https://bugs.webkit.org/show_bug.cgi?id=198982

        Reviewed by Alex Christensen.

        Add source files needed to implement and call ANGLE extensions, and
        export headers necessary for those extensions. Update the script which
        adjusts include paths to handle the new headers.

        Cherry-pick fix for ANGLE bug crbug.com/angleproject/3669 to support
        antialias:true for ANGLE-backed WebGL contexts.

        * ANGLE.xcodeproj/project.pbxproj:
        * adjust-angle-include-paths.sh:
        * src/libANGLE/FramebufferAttachment.cpp:
        (gl::FramebufferAttachment::getTextureImageIndex const): Deleted.
        * src/libANGLE/FramebufferAttachment.h:
        (gl::FramebufferAttachment::getTextureImageIndex const):
        * src/libANGLE/validationES2.cpp:
        (gl::ValidateBlitFramebufferANGLE):

2019-06-27  Beth Dakin  <bdakin@apple.com>

        Upstream use of MACCATALYST
        https://bugs.webkit.org/show_bug.cgi?id=199245
        rdar://problem/51687723

        Reviewed by Tim Horton.

        * Configurations/SDKVariant.xcconfig:

2019-06-25  Kenneth Russell  <kbr@chromium.org>

        Script which adjusts include paths in ANGLE's copied headers breaks incremental builds
        https://bugs.webkit.org/show_bug.cgi?id=199212

        Reviewed by Darin Adler.

        Maintain and test a timestamp in adjust-angle-include-paths.sh
        in order to avoid touching the headers during each build.

        * adjust-angle-include-paths.sh:

2019-06-25  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r246825.

        Breaks internal builds.

        Reverted changeset:

        "Script which adjusts include paths in ANGLE's copied headers
        breaks incremental builds"
        https://bugs.webkit.org/show_bug.cgi?id=199212
        https://trac.webkit.org/changeset/246825

2019-06-25  Kenneth Russell  <kbr@chromium.org>

        Script which adjusts include paths in ANGLE's copied headers breaks incremental builds
        https://bugs.webkit.org/show_bug.cgi?id=199212

        Reviewed by Darin Adler.

        Maintain and test a timestamp in adjust-angle-include-paths.sh
        in order to avoid touching the headers during each build.

        * adjust-angle-include-paths.sh:

2019-06-18  Kenneth Russell  <kbr@chromium.org>

        Add preliminary ANGLE backend to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=197755

        Reviewed by Dean Jackson.

        Add a build step which processes ANGLE's copied public headers so they
        can all be referred to under the <ANGLE/xyz.h> prefix. This avoids
        touching ANGLE's headers and allows WebCore to include them with no
        additional include path modifications.

        * ANGLE.xcodeproj/project.pbxproj:
        * adjust-angle-include-paths.sh: Added.

2019-06-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r246501.

        Breaks Apple internal builds.

        Reverted changeset:

        "Support using ANGLE as the backend for the WebGL
        implementation"
        https://bugs.webkit.org/show_bug.cgi?id=197755
        https://trac.webkit.org/changeset/246501

2019-06-17  Kenneth Russell  <kbr@chromium.org>

        Support using ANGLE as the backend for the WebGL implementation
        https://bugs.webkit.org/show_bug.cgi?id=197755

        Reviewed by Dean Jackson.

        Add a build step which processes ANGLE's copied public headers so they
        can all be referred to under the <ANGLE/xyz.h> prefix. This avoids
        touching ANGLE's headers and allows WebCore to include them with no
        additional include path modifications.

        * ANGLE.xcodeproj/project.pbxproj:
        * adjust-angle-include-paths.sh: Added.

2019-06-12  Justin Fan  <justin_fan@apple.com>

        [WebGL] ANGLE Extension directive location incorrectly enforced for webgl 1.0
        https://bugs.webkit.org/show_bug.cgi?id=198811

        Reviewed by Dean Jackson.

        Apply ANGLE change from https://chromium-review.googlesource.com/c/angle/angle/+/1648661 to
        prevent enforcing ESSL late extension rule on WebGL 1.0 shaders.

        * src/compiler/preprocessor/DiagnosticsBase.cpp:
        (angle::pp::Diagnostics::message):
        * src/compiler/preprocessor/DiagnosticsBase.h:
        * src/compiler/preprocessor/DirectiveParser.cpp:
        (angle::pp::DirectiveParser::parseExtension):

2019-05-23  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use target oriented design for bmalloc
        https://bugs.webkit.org/show_bug.cgi?id=198046

        Reviewed by Konstantin Tokarev.

        Remove WEBKIT_COPY_FILES from CMakelists.txt now that it is in WebKitMacros.

        * CMakeLists.txt:

2019-05-14  Miguel Gomez  <magomez@igalia.com>

        REGRESSION(r245088): [GTK] Several WebGL tests failing
        https://bugs.webkit.org/show_bug.cgi?id=197880

        Reviewed by Carlos Garcia Campos.

        Enable GLSL compiler output for WebKitGTK.

        * PlatformGTK.cmake: Added.

2019-05-13  Alex Christensen  <achristensen@webkit.org>

        Build more ANGLE files
        https://bugs.webkit.org/show_bug.cgi?id=197787

        Reviewed by Simon Fraser.

        * ANGLE.xcodeproj/project.pbxproj:
        * src/gpu_info_util/SystemInfo.cpp:
        (angle::ParseMacMachineModel):
        * src/gpu_info_util/SystemInfo_mac.mm:
        (angle::GetSystemInfo):
        * src/libANGLE/renderer/gl/cgl/DisplayCGL.mm:
        * src/libANGLE/renderer/gl/cgl/IOSurfaceSurfaceCGL.mm:
        (rx::IOSurfaceSurfaceCGL::IOSurfaceSurfaceCGL):
        (rx::IOSurfaceSurfaceCGL::validateAttributes):
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.h:
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm:
        (rx::WindowSurfaceCGL::initialize):
        (-[SwapLayer initWithSharedState:withContext:withFunctions:]): Deleted.

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix a bunch of compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=197785

        Reviewed by Don Olmstead.

        Add compiler flags to suppress various warnings triggered by the new version of ANGLE.

        * CMakeLists.txt:

2019-05-09  Don Olmstead  <don.olmstead@sony.com>

        [ANGLE] Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=197676
        <rdar://problem/50609501>

        Reviewed by Alex Christensen.

        * changes.diff:
        Updated with all the previous fixes.
        * include/EGL/eglplatform.h:
        Use the more generic name USE_SYSTEM_EGL not USE_WPE.
        * src/common/debug.h:
        Fix a stray COMPILER_GCC to be __GNUC__.

2019-05-08  Alex Christensen  <achristensen@webkit.org>

        Fix internal and Windows builds.

        * ANGLE.txt: Added.
        Restore this file.  It was deleted, but it's needed.
        * GLESv2.cmake:
        It turns out CompositorNativeWindow11.cpp and Renderer11.cpp are needed, but the bot doesn't seem to have the right SDK.

2019-05-08  Alex Christensen  <achristensen@webkit.org>

        Fix High Sierra and Windows builds.

        * GLESv2.cmake:
        CompositorNativeWindow11.cpp was also having a hard time compiling on the bots.
        * src/libANGLE/validationES3.cpp:
        (gl::ValidateBindFragDataLocationIndexedEXT):
        Remove a check for if an unsigned integer is less than 0.

2019-05-08  Alex Christensen  <achristensen@webkit.org>

        Fix High Sierra and Windows builds.

        * src/common/utilities.cpp:
        (gl::priv::gLineModes):
        * src/common/utilities.h:
        (gl::IsLineMode):
        Don't have a global constructor.  Use a function scoped static variable instead.
        * GLESv2.cmake:
        Renderer11.cpp was not building successfully on the bots.
        I don't think it's needed, so just don't build it.

2019-05-08  Alex Christensen  <achristensen@webkit.org>

        Fix High Sierra build.

        * src/libANGLE/State.cpp:
        (gl::State::kBufferSetters):
        * src/libANGLE/State.h:
        (gl::State::setBufferBinding):
        Remove the need for a global constructor.

2019-05-08  Don Olmstead  <don.olmstead@sony.com>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=197676

        Reviewed by Alex Christensen.

        Many changed files.  Updated to trunk ANGLE 565441b1078b.

2019-04-29  Alex Christensen  <achristensen@webkit.org>

        <rdar://problem/50299396> Fix internal High Sierra build
        https://bugs.webkit.org/show_bug.cgi?id=197388

        * Configurations/Base.xcconfig:

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Start using C++17
        https://bugs.webkit.org/show_bug.cgi?id=197131

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:

2019-03-22  Keith Rollin  <krollin@apple.com>

        Enable ThinLTO support in Production builds
        https://bugs.webkit.org/show_bug.cgi?id=190758
        <rdar://problem/45413233>

        Reviewed by Daniel Bates.

        Enable building with Thin LTO in Production when using Xcode 10.2 or
        later. This change results in a 1.45% progression in PLT5. Full
        Production build times increase about 2-3%. Incremental build times
        are more severely affected, and so LTO is not enabled for local
        engineering builds.

        LTO is enabled only on macOS for now, until rdar://problem/49013399,
        which affects ARM builds, is fixed.

        To change the LTO setting when building locally:

        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
          command line.
        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
          on the command line.
        - If building with `build-root`, specify --lto={none,thin,full} on the
          command line.
        - If building with Xcode, create a LocalOverrides.xcconfig file at the
          top level of your repository directory (if needed) and define
          WK_LTO_MODE to full, thin, or none.

        * Configurations/Base.xcconfig:

2019-02-23  Keith Miller  <keith_miller@apple.com>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=194955

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2019-02-20  Andy Estes  <aestes@apple.com>

        [Xcode] Add SDKVariant.xcconfig to various Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=194869

        Rubber-stamped by Jer Noble.

        * ANGLE.xcodeproj/project.pbxproj:

2019-01-18  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

2019-01-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240124.

        This commit broke an internal build.

        Reverted changeset:

        "SDK_VARIANT build destinations should be separate from non-
        SDK_VARIANT builds"
        https://bugs.webkit.org/show_bug.cgi?id=189553
        https://trac.webkit.org/changeset/240124

2019-01-17  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

2019-01-15  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary copy of for loop variables in ANGLE
        <https://webkit.org/b/193443>

        Reviewed by Alex Christensen.

        Fix unwanted copying of loop variables by making them const
        references.

        * src/compiler/preprocessor/MacroExpander.cpp:
        (pp::MacroExpander::ScopedMacroReenabler::~ScopedMacroReenabler):
        - Prevents copy and reference churn of std::shared_ptr<Macro>
          objects.
        * src/compiler/translator/Compiler.cpp:
        (sh::TCompiler::useAllMembersInUnusedStandardAndSharedBlocks):
        - Prevents copy of sh::InterfaceBlock structs.
        (sh::TCompiler::initializeOutputVariables):
        - Prevents copy of sh::Varying structs.
        * src/libANGLE/Program.cpp:
        (gl::(anonymous namespace)::IncludeSameArrayElement):
        - Prevents copy of std::string objects.

2018-10-03  Dan Bernstein  <mitz@apple.com>

        ANGLE part of [Xcode] Update some build settings as recommended by Xcode 10
        https://bugs.webkit.org/show_bug.cgi?id=190250

        Reviewed by Andy Estes.

        * ANGLE.xcodeproj/project.pbxproj: Kept the unreachable code warning off for four files that
          were generated by tools: glslang_lex.cpp, glslang_tab.cpp, Tokenizer.cpp, and
          ExpressionParser.cpp. Let Xcode update LastUpgradeCheck.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA, CLANG_WARN_INFINITE_RECURSION,
          CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS, CLANG_WARN_SUSPICIOUS_MOVE,
          CLANG_WARN_UNREACHABLE_CODE, CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and
          CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.

2018-09-21  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] ANGLE's eglplatform.h does not support Wayland-only builds
        https://bugs.webkit.org/show_bug.cgi?id=189844

        Reviewed by Michael Catanzaro.

        This makes it possible to build WebKitGTK+ after r225340 when the
        build is configured to support only Wayland, and the X11 headers
        are not present.

        * changes.diff: Updated.
        * include/EGL/eglplatform.h: Include the X11 headers only when
        ANGLE_USE_X11 is defined and, for consistency with Mesa's version
        of the header, when MESA_EGL_NO_X11_HEADERS is not defined.

2018-08-29  David Kilzer  <ddkilzer@apple.com>

        Remove empty directories from from svn.webkit.org repository
        <https://webkit.org/b/189081>

        * src/angle.xcodeproj: Removed.
        * src/common/third_party/numerics: Removed.

2018-08-28  David Kilzer  <ddkilzer@apple.com>

        Move PMurHash.{cpp,h} into 'src' folder to match path on disk

        * ANGLE.xcodeproj/project.pbxproj:
        (src/common/third_party/smhasher/src): Add folder and move
        PMurHash.{cpp,h} into it.  This makes tidy-Xcode-project-file
        run smoothly when updating the ANGLE project.

2018-08-27  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix -- disable LTO for production builds

        * Configurations/Base.xcconfig:

2018-08-27  Keith Rollin  <krollin@apple.com>

        Build system support for LTO
        https://bugs.webkit.org/show_bug.cgi?id=187785
        <rdar://problem/42353132>

        Reviewed by Dan Bernstein.

        Update Base.xcconfig and DebugRelease.xcconfig to optionally enable
        LTO.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2018-08-03  Alex Christensen  <achristensen@webkit.org>

        Fix spelling of "overridden"
        https://bugs.webkit.org/show_bug.cgi?id=188315

        Reviewed by Darin Adler.

        * src/libANGLE/renderer/ProgramImpl.h:

2018-07-14  Kocsen Chung  <kocsen_chung@apple.com>

        Ensure WebKit stack is ad-hoc signed
        https://bugs.webkit.org/show_bug.cgi?id=187667

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2018-07-04  Tim Horton  <timothy_horton@apple.com>

        Introduce PLATFORM(IOSMAC)
        https://bugs.webkit.org/show_bug.cgi?id=187315

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-06-09  Dan Bernstein  <mitz@apple.com>

        [Xcode] Clean up and modernize some build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=186463

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Removed definition for macOS 10.11.
        * Configurations/DebugRelease.xcconfig: Ditto.

2018-05-30  David Kilzer  <ddkilzer@apple.com>

        ANGLE: Fix clang static analyzer issues in GetExecutablePath() and GetExecutableDirectory()
        <https://webkit.org/b/186106>
        <rdar://problem/40659179>

        Reviewed by Alex Christensen.

        * src/common/system_utils_linux.cpp:
        (angle::GetExecutablePath):
        (angle::GetExecutableDirectory):
        * src/common/system_utils_mac.cpp:
        (angle::GetExecutablePath):
        (angle::GetExecutableDirectory):
        * src/common/system_utils_win.cpp:
        (angle::GetExecutablePath):
        (angle::GetExecutableDirectory):

2018-05-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r232052.

        Breaks internal builds.

        Reverted changeset:

        "Use more C++17"
        https://bugs.webkit.org/show_bug.cgi?id=185176
        https://trac.webkit.org/changeset/232052

2018-05-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use more C++17
        https://bugs.webkit.org/show_bug.cgi?id=185176

        Reviewed by JF Bastien.

        * Configurations/Base.xcconfig:

2018-04-18  Jer Noble  <jer.noble@apple.com>

        Don't put build products into WK_ALTERNATE_WEBKIT_SDK_PATH for engineering builds
        https://bugs.webkit.org/show_bug.cgi?id=184762

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-04-19  David Kilzer  <ddkilzer@apple.com>

        Enable Objective-C weak references
        <https://webkit.org/b/184789>
        <rdar://problem/39571716>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.

2018-03-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r225340): WPE port should not be getting EGL X11 types on ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=183749

        Reviewed by Alex Christensen.

        Add back the USE_WPE ifdef.

        * changes.diff:
        * include/EGL/eglplatform.h:

2018-03-15  Tim Horton  <timothy_horton@apple.com>

        Add and adopt WK_ALTERNATE_FRAMEWORKS_DIR in ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=183675
        <rdar://problem/38515281>

        Reviewed by Dan Bernstein.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE.xcconfig:
        * Configurations/Base.xcconfig:

2018-01-27  Dan Bernstein  <mitz@apple.com>

        HaveInternalSDK includes should be "#include?"
        https://bugs.webkit.org/show_bug.cgi?id=179670

        * Configurations/Base.xcconfig:

2018-01-18  Dan Bernstein  <mitz@apple.com>

        [Xcode] Streamline and future-proof target-macOS-version-dependent build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=181803

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig: Updated.
        * Configurations/DebugRelease.xcconfig: Ditto.

2018-01-09  Dan Bernstein  <mitz@apple.com>

        Removed some empty directories that were left behind

        * src/third_party/murmurhash: Removed.
        * third_party: Removed.
        * third_party/deqp: Removed.

2017-12-14  David Kilzer  <ddkilzer@apple.com>

        Enable -Wstrict-prototypes for WebKit
        <https://webkit.org/b/180757>
        <rdar://problem/36024132>

        Rubber-stamped by Joseph Pecoraro.

        * Configurations/Base.xcconfig:
        (CLANG_WARN_STRICT_PROTOTYPES): Add. Set to YES.

2017-12-06  Dean Jackson  <dino@apple.com>

        Update ANGLE's changes.diff
        https://bugs.webkit.org/show_bug.cgi?id=180491

        Reviewed by Antoine Quint.

        Here is the list of things we've changed from the
        ANGLE commit that we merged in.

        * changes.diff:

2017-12-06  Dean Jackson  <dino@apple.com>

        Some iOS tests failing after ANGLE update
        https://bugs.webkit.org/show_bug.cgi?id=180487
        <rdar://problem/35885969>

        Reviewed by Antoine Quint.

        The iOS OpenGL compiler doesn't like function declarations with
        nameless array parameters. See:
        <rdar://problem/35885989> Nameless array parameters in function declaration cause compiler error

        While that is being fixed, tell ANGLE's translator to not cull
        the names from parameters. This is not a bug in ANGLE, so we won't
        fix it upstream at the moment.

        * src/compiler/translator/ParseContext.cpp:
        (sh::TParseContext::addFunctionPrototypeDeclaration):

2017-12-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix byte order macros and address new -Wunknown-pragmas warnings
        https://bugs.webkit.org/show_bug.cgi?id=180177
        <rdar://problem/35774734>

        I'm not sure how this code was developed, as it seems to have been designed for GCC, but it
        does not use any of GCC's documented byte order macros, and accordingly does not work. Let's
        fix it to guarantee there are no problems when building with GCC. I presume it should help
        Clang as well.

        This time, hopefully without breaking 32-bit macOS, where __BYTE_ORDER actually is defined.

        * src/common/third_party/smhasher/src/PMurHash.cpp:
        (angle::PMurHash32_Process):

2017-12-01  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r225412.

        Breaks 32-bit macOS builds.

        Reverted changeset:

        "Unreviewed, fix byte order macros and address new -Wunknown-
        pragmas warnings"
        https://bugs.webkit.org/show_bug.cgi?id=180177
        https://trac.webkit.org/changeset/225412

2017-12-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix byte order macros and address new -Wunknown-pragmas warnings
        https://bugs.webkit.org/show_bug.cgi?id=180177
        <rdar://problem/35774734>

        I'm not sure how this code was developed, as it seems to have been designed for GCC, but it
        does not use any of GCC's documented byte order macros, and accordingly does not work. Let's
        fix it to guarantee there are no problems when building with GCC. I presume it should help
        Clang as well.

        * src/common/third_party/smhasher/src/PMurHash.cpp:
        (angle::PMurHash32_Process):

2017-12-01  Tomoki Imai  <Tomoki.Imai@sony.com>

        Fix WinCairo build break after r225340
        https://bugs.webkit.org/show_bug.cgi?id=180230

        Unreviewed build fix.

        * CMakeLists.txt: Add missing sources.
        * PlatformWin.cmake: Add missing sources.

2017-12-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix -Wunknown-pragmas warnings.
        https://bugs.webkit.org/show_bug.cgi?id=180177

        It seems GCC has started to warn about unrecognized Clang pragmas. Oh well.

        This is not sent upstream, because the Clang pragmas appear to be downstream WebKit
        additions. changes.diff is not updated, because it was not updated in yesterday's ANGLE
        update.

        * include/GLSLANG/ShaderVars.h:
        * src/libANGLE/Platform.cpp:

2017-11-30  Alex Christensen  <achristensen@webkit.org>

        Speculative WinCairo fix.
        https://bugs.webkit.org/show_bug.cgi?id=180177

        * CMakeLists.txt:
        * PlatformWin.cmake:

2017-11-30  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed build fix, remove executable property from a header file.

        * include/KHR/khrplatform.h: Removed property svn:executable.

2017-11-30  Dean Jackson  <dino@apple.com>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=180177
        <rdar://problem/35774734>

        Reviewed by Alex Christensen.

        Huge list of changed files omitted.

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_RANGE_LOOP_ANALYSIS
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_OBJC_LITERAL_CONVERSION
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig:

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_NON_LITERAL_NULL_CONVERSION
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:

2017-07-13  Adrian Perez de Castro  <aperez@igalia.com>

        eglplatform.h does not support Wayland
        https://bugs.webkit.org/show_bug.cgi?id=163482

        This makes it possible to build WebKitGTK+ when the target system has only Wayland support,
        but no X11 (and therefore the X11 headers are not present).

        Reviewed by Alex Christensen.

        * include/EGL/eglplatform.h: Add Wayland typedefs when WL_EGL_PLATFORM is defined (for example
        by including wayland-egl.h before including EGL/egl.h). Also, include the X11 headers only
        when ANGLE_USE_X11 is defined and, for consistency with Mesa's version of the header, when
        MESA_EGL_NO_X11_HEADERS is not defined.

2017-07-03  Andy Estes  <aestes@apple.com>

        [Xcode] Add an experimental setting to build with ccache
        https://bugs.webkit.org/show_bug.cgi?id=173875

        Reviewed by Tim Horton.

        * Configurations/DebugRelease.xcconfig: Included ccache.xcconfig.

2017-07-01  Dan Bernstein  <mitz@apple.com>

        [macOS] Remove code only needed when building for OS X Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=174067

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2017-06-10  Dan Bernstein  <mitz@apple.com>

        Reverted r218056 because it made the IDE reindex constantly.

        * Configurations/DebugRelease.xcconfig:

2017-06-10  Dan Bernstein  <mitz@apple.com>

        [Xcode] With Xcode 9 developer beta, everything rebuilds when switching between command-line and IDE
        https://bugs.webkit.org/show_bug.cgi?id=173223

        Reviewed by Sam Weinig.

        The rebuilds were happening due to a difference in the compiler options that the IDE and
        xcodebuild were specifying. Only the IDE was passing the -index-store-path option. To make
        xcodebuild pass that option, too, set CLANG_INDEX_STORE_ENABLE to YES if it is unset, and
        specify an appropriate path in CLANG_INDEX_STORE_PATH.

        * Configurations/DebugRelease.xcconfig:

2017-05-28  Dan Bernstein  <mitz@apple.com>

        [Xcode] ALWAYS_SEARCH_USER_PATHS is set to YES
        https://bugs.webkit.org/show_bug.cgi?id=172691

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig: Set ALWAYS_SEARCH_USER_PATHS to NO.

2017-05-09  Zan Dobersek  <zdobersek@igalia.com>

        Upstream the WPE port
        https://bugs.webkit.org/show_bug.cgi?id=171110

        Reviewed by Alex Christensen.

        * include/EGL/eglplatform.h:
        Allow building WPE on platforms that don't provide X11 libraries.

2017-05-04  Don Olmstead  <don.olmstead@am.sony.com>

        [Win] Remove redundant macros that are set in the CMake config
        https://bugs.webkit.org/show_bug.cgi?id=171571

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:

2017-04-20  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Define FORWARDING_HEADERS_DIR in WebKitFS and use it everywhere
        https://bugs.webkit.org/show_bug.cgi?id=171071

        Reviewed by Michael Catanzaro.

        "${DERIVED_SOURCES_DIR}/ForwardingHeaders" path occurs very often in the
        build system files. GTK-specifc FORWARDING_HEADERS_DIR variable should
        be available for all ports.

        * CMakeLists.txt:

2017-04-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Fix build break after updating ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=170980

        Reviewed by Brent Fulgham.

        * CMakeLists.txt: Added some new source files.
        * PlatformMac.cmake: Ditto.
        * PlatformWin.cmake: Ditto. Remove a macro 'ANGLE_WEBKIT_WIN'
        because SoftLinking is not used anymore.
        * src/third_party/systeminfo/: Restored.

2017-04-19  Ryan Haddad  <ryanhaddad@apple.com>

        Remove executable property from a header file.

        * include/KHR/khrplatform.h: Removed property svn:executable.

2017-04-18  Dean Jackson  <dino@apple.com>

        Add the actual content to the files, now that
        SVN knows they can have tabs.

        * src/third_party/murmurhash/MurmurHash3.cpp:
        * src/third_party/murmurhash/MurmurHash3.h:

2017-04-18  Dean Jackson  <dino@apple.com>

        WinCairo needs these files I recently removed
        from our copy of ANGLE.

        * src/third_party/murmurhash/LICENSE: Added.
        * src/third_party/murmurhash/MurmurHash3.cpp: Added.
        * src/third_party/murmurhash/MurmurHash3.h: Added.

2017-04-18  Dean Jackson  <dino@apple.com>

        Still trying to fix Windows.

        * PlatformWin.cmake:

2017-04-18  Dean Jackson  <dino@apple.com>

        Attempt to fix the Windows build.

        * PlatformWin.cmake:

2017-04-18  Dean Jackson  <dino@apple.com>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=170941
        <rdar://problem/31633999>

        Reviewed by Alex Christensen.

        Huge list of changed files omitted.

2017-04-12  Dan Bernstein  <mitz@apple.com>

        [Mac] Future-proof .xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=170802

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2016-12-20  Tim Horton  <timothy_horton@apple.com>

        Remove an ANGLE Markdown file from the ANGLE target
        https://bugs.webkit.org/show_bug.cgi?id=166279

        Reviewed by Alex Christensen.

        * ANGLE.xcodeproj/project.pbxproj:
        We don't need to build this, it's not source code.

2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Sort Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=165937

        Reviewed by Simon Fraser.

        * ANGLE.xcodeproj/project.pbxproj:

2016-12-15  Alex Christensen  <achristensen@webkit.org>

        Fix Windows WebGL build after r209832

        * CMakeLists.txt:
        * include/EGL/egl.h:
        * include/GLES2/gl2.h:

2016-12-14  Alex Christensen  <achristensen@webkit.org>

        Progress towards using ANGLE to do WebGL rendering
        https://bugs.webkit.org/show_bug.cgi?id=165864

        Reviewed by Dean Jackson.

        * ANGLE.xcodeproj/project.pbxproj:
        Compile more files, and add some more "public" headers.
        ANGLE is not a public framework, so these headers just go in 
        WebKitBuild/Release/usr/local/include/ANGLE to be included when compiling WebCore.
        * ANGLE/egl.h: Added.
        * ANGLE/eglext.h: Added.
        * ANGLE/eglplatform.h: Added.
        * ANGLE/entry_points_gles_2_0.h: Added.
        * ANGLE/entry_points_gles_2_0_ext.h: Added.
        * ANGLE/entry_points_gles_3_0.h: Added.
        * ANGLE/export.h: Added.
        * ANGLE/gl2.h: Added.
        * ANGLE/gl2ext.h: Added.
        * ANGLE/gl2platform.h: Added.
        * ANGLE/gl3.h: Added.
        * ANGLE/gl31.h: Added.
        * ANGLE/gl3platform.h: Added.
        * ANGLE/khrplatform.h: Added.
        Add more forwarding headers.  There are already a few, but we need more.
        * CMakeLists.txt:
        * PlatformMac.cmake:
        Make the frameworks linked to by ANGLE be private so frameworks that link with 
        ANGLE don't automatically link with them. This allows me to switch ANGLE from a 
        static library to a dynamic library to make sure WebCore isn't directly using OpenGL.
        * PlatformWin.cmake:
        Move HLSL-specific files to only be built on Windows.
        * include/EGL/egl.h:
        * include/EGL/eglplatform.h:
        * include/GLES2/gl2.h:
        * include/GLES2/gl2platform.h:
        * include/GLES3/gl3.h:
        * include/GLES3/gl31.h:
        * include/GLES3/gl32.h:
        * include/GLES3/gl3platform.h:
        * src/libGLESv2/entry_points_egl.h:
        * src/libGLESv2/entry_points_egl_ext.h:
        * src/libGLESv2/entry_points_gles_2_0.h:
        * src/libGLESv2/entry_points_gles_2_0_ext.h:
        * src/libGLESv2/entry_points_gles_3_0.h:
        * src/libGLESv2/entry_points_gles_3_1.h:
        Include ANGLE headers as #include <ANGLE/*> instead of #include <KHR/*> or #include <GLES/*>
        This is needed to distinguish the ANGLE headers from any system OpenGL/OpenGLES headers.
        We will eventually only include ANGLE's entry_points_*.h directly from WebCore.

2016-12-07  Alex Christensen  <achristensen@webkit.org>

        Build more of ANGLE on Mac and Windows
        https://bugs.webkit.org/show_bug.cgi?id=165543

        Reviewed by Dean Jackson.

        We will need to compile these files to use ANGLE's GLESv2 implementation instead of 
        using OpenGL directly. No functional change.

        * ANGLE.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        Move platform-specific files to Platform*.cmake.
        * PlatformMac.cmake: Added.
        * PlatformWin.cmake: Added.
        * src/libANGLE/renderer/Format.cpp:
        * src/libANGLE/renderer/Format_autogen.cpp:
        (angle::Format::Get):
        * src/libANGLE/renderer/gl/PathGL.cpp:
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.h:
        * src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm:
        Rename SwapLayer to WebSwapLayer.  Otherwise, WebCore complains about improperly named ObjC classes.
        Since this is the only one, let's just rename it instead of adding an exception.
        (rx::WindowSurfaceCGL::initialize):
        (-[SwapLayer initWithSharedState:withContext:withFunctions:]): Deleted.
        * src/libANGLE/renderer/gl/formatutilsgl.cpp:
        (rx::nativegl::GetInternalFormatMap):
        (rx::nativegl::GetInternalFormatInfo):
        * src/libANGLE/renderer/renderer_utils.cpp:
        (rx::GetColorWriteFunction):
        * src/libGLESv2/entry_points_egl.cpp:
        (egl::GetProcAddress):

2016-12-06  Alexey Proskuryakov  <ap@apple.com>

        Correct SDKROOT values in xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=165487
        rdar://problem/29539209

        Reviewed by Dan Bernstein.

        Fix suggested by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

2016-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        -Wpragmas warning spam from angleutils.h
        https://bugs.webkit.org/show_bug.cgi?id=164207

        Reviewed by Darin Adler.

        Use #pragma clang instead of #pragma GCC since all of the warnings we need to suppress are
        Clang-specific warnings. GCC ignores unknown pragmas and does not warn, but it does warn if
        any GCC pragma is invalid.

        Note that this might still be broken for MSVCC, as MSVCC warns when it sees unknown pragmas.

        * changes.diff:
        * src/common/angleutils.cpp:
        (FormatString):
        * src/common/angleutils.h:
        (MakeStaticString):
        * src/common/debug.cpp:
        * src/common/mathutil.cpp:
        * src/libANGLE/Caps.cpp:
        (gl::TextureCapsMap::get):
        (gl::GetExtensionInfoMap):
        * src/libANGLE/Device.cpp:
        (egl::GetDeviceSet):
        * src/libANGLE/Display.cpp:
        (egl::Display::getClientExtensionString):
        * src/libANGLE/formatutils.cpp:
        (gl::GetInternalFormatMap):
        (gl::GetAllSizedInternalFormats):
        * src/libANGLE/validationES3.cpp:
        (gl::IsValidES3CopyTexImageCombination):

2016-10-28  Alex Christensen  <achristensen@webkit.org>

        Another build fix.

        * CMakeLists.txt:

2016-10-28  Alex Christensen  <achristensen@webkit.org>

        Fix Windows WebGL build after r208036
        https://bugs.webkit.org/show_bug.cgi?id=164101

        * CMakeLists.txt:

2016-10-27  Alex Christensen  <achristensen@webkit.org>

        Fix Windows WebGL build after r208036
        https://bugs.webkit.org/show_bug.cgi?id=164101

        * CMakeLists.txt:
        Add new files, remove deleted files.

2016-10-27  Alex Christensen  <achristensen@webkit.org>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=164101

        Reviewed by Darin Adler.

        Updated to f01731530e7f754e5ebaf32d00f3e23b62376424
        Differences between upstream ANGLE and WebKit's copy of ANGLE are in changes.diff

2016-10-24  Alex Christensen  <achristensen@webkit.org>

        Remove unused ANGLE.vcxproj after switching to CMake on Windows

        * ANGLE.vcxproj: Removed.
        * ANGLE.vcxproj/ANGLERelease.props: Removed.
        * ANGLE.vcxproj/DirectX32.props: Removed.
        * ANGLE.vcxproj/DirectX64.props: Removed.
        * ANGLE.vcxproj/libEGL.vcxproj: Removed.
        * ANGLE.vcxproj/libEGL.vcxproj.filters: Removed.
        * ANGLE.vcxproj/libEGLCommon.props: Removed.
        * ANGLE.vcxproj/libGLESv2.vcxproj: Removed.
        * ANGLE.vcxproj/libGLESv2.vcxproj.filters: Removed.
        * ANGLE.vcxproj/libGLESv2Common.props: Removed.
        * ANGLE.vcxproj/preprocessor.vcxproj: Removed.
        * ANGLE.vcxproj/preprocessor.vcxproj.filters: Removed.
        * ANGLE.vcxproj/translatorCommon.props: Removed.
        * ANGLE.vcxproj/translator_common.vcxproj: Removed.
        * ANGLE.vcxproj/translator_common.vcxproj.filters: Removed.
        * ANGLE.vcxproj/translator_glsl.vcxproj: Removed.
        * ANGLE.vcxproj/translator_glsl.vcxproj.filters: Removed.
        * ANGLE.vcxproj/translator_hlsl.vcxproj: Removed.
        * ANGLE.vcxproj/translator_hlsl.vcxproj.filters: Removed.

2016-09-09  Dean Jackson  <dino@apple.com>

        [ANGLE] instantiation of variable 'gl::GLTypeToGLenum<float>::value' required here, but no definition is available
        https://bugs.webkit.org/show_bug.cgi?id=161829
        <rdar://problem/28051244>

        Reviewed by Alex Christensen.

        Newer versions of clang require explicit definition of some template types
        if they are in another translation unit.

        * src/libANGLE/Program.cpp: Add definitions for GLTypeToGLenum.

2016-07-29  David Kilzer  <ddkilzer@apple.com>

        ANGLE: Fix global constructors and exit-time destructors
        <https://webkit.org/b/160332>

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        - Add warning flags.

        * src/common/angleutils.cpp:
        (FormatString):
        * src/common/angleutils.h:
        (MakeStaticString):
        * src/common/debug.cpp:
        * src/common/mathutil.cpp:
        (gl::g_sharedexp_max):
        (gl::convertRGBFloatsTo999E5):
        * src/compiler/translator/ShaderLang.cpp:
        (ShGetUniformRegisterMap):
        * src/libANGLE/Caps.cpp:
        (gl::TextureCapsMap::get):
        * src/libANGLE/Device.cpp:
        (egl::GetDeviceSet):
        * src/libANGLE/Display.cpp:
        (egl::Display::getClientExtensionString):
        * src/libANGLE/formatutils.cpp:
        (gl::BuildFormatMap):
        (gl::BuildInternalFormatInfoMap):
        (gl::GetInternalFormatMap):
        (gl::BuildAllSizedInternalFormatSet):
        (gl::GetSizedInternalFormat):
        (gl::GetAllSizedInternalFormats):
        * src/libANGLE/validationES3.cpp:
        (gl::BuildES3FormatSet):
        (gl::ValidateTexImageFormatCombination):
        (gl::BuildSizedEffectiveInternalFormatList):
        (gl::BuildUnsizedEffectiveInternalFormatList):
        (gl::GetEffectiveInternalFormat):
        (gl::BuildValidES3CopyTexImageCombinations):
        (gl::IsValidES3CopyTexImageCombination):
        - Fix global constructors and exit-time destructors.

2016-07-13  Enrica Casucci  <enrica@apple.com>

        Update supported platforms in xcconfig files to match the sdk names.
        https://bugs.webkit.org/show_bug.cgi?id=159728

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:

2016-05-24  Alex Christensen  <achristensen@webkit.org>

        Fix iOS WebGL after r199738
        https://bugs.webkit.org/show_bug.cgi?id=158024
        rdar://problem/26446679

        Reviewed by Myles Maxfield.

        * ANGLE.xcodeproj/project.pbxproj:
        iOS needs the ESSL translator.

2016-05-22  Brady Eidson  <beidson@apple.com>

        Move to C++14.
        https://bugs.webkit.org/show_bug.cgi?id=157948

        Reviewed by Michael Catanzaro.

        * Configurations/Base.xcconfig:

2016-04-26  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo][ANGLE] Display object is not created.
        https://bugs.webkit.org/show_bug.cgi?id=157042

        Reviewed by Alex Christensen.

        The CreateDisplayFromAttribs function will not create a DisplayD3D object when the requested
        type is EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE, because ANGLE_ENABLE_OPENGL is not defined.
        We should be able to create a DisplayD3D object without defining ANGLE_ENABLE_OPENGL.

        * src/libANGLE/Display.cpp:

2016-04-26  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo][WebGL] Enable ESSL and GLSL translators.
        https://bugs.webkit.org/show_bug.cgi?id=157002

        Reviewed by Darin Adler.

        Enable support for ESSL and GLSL translators, and add missing files.

        * CMakeLists.txt:

2016-04-22  Joonghun Park  <jh718.park@samsung.com>

        [ANGLE] Remove deprecated auto_ptr warning. Unreviewed.
        https://bugs.webkit.org/show_bug.cgi?id=156894

        * src/compiler/preprocessor/MacroExpander.h: Use std::unique_ptr instead of std::auto_ptr.

2016-04-19  Alex Christensen  <achristensen@webkit.org>

        Build fix after r199738

        * CMakeLists.txt:

2016-04-19  Alex Christensen  <achristensen@webkit.org>

        Build fix after r199738

        * CMakeLists.txt:

2016-04-19  Alex Christensen  <achristensen@webkit.org>

        Build fix.

        * src/compiler/translator/Intermediate.h: Added.
        (TIntermediate::TIntermediate):
        * src/compiler/translator/intermediate.h: Removed.
        Changed case of Intermediate.h file name for case sensitive file systems.

2016-04-19  Alex Christensen  <achristensen@webkit.org>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=156755

        Reviewed by Dean Jackson.

        Huge list of changed files omitted.

2016-04-12  Alex Christensen  <achristensen@webkit.org>

        Remove failing assertion in ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=156485

        Reviewed by Dean Jackson.

        * src/compiler/translator/glslang.l:
        * src/compiler/translator/glslang_lex.cpp:

2016-04-11  Fujii Hironori  <Hironori.Fujii@jp.sony.com>

        [CMake] Make FOLDER property INHERITED
        https://bugs.webkit.org/show_bug.cgi?id=156460

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        Set FOLDER property as a directory property not a target property

2016-03-22  Alberto Garcia  <berto@igalia.com>

        Unreviewed typo fix.

        * src/compiler/translator/InfoSink.cpp:
        (TInfoSinkBase::prefix): "UNKOWN" => "UNKOWN".

2016-03-20  Dan Bernstein  <mitz@apple.com>

        [Mac] Determine TARGET_MAC_OS_X_VERSION_MAJOR from MACOSX_DEPLOYMENT_TARGET rather than from MAC_OS_X_VERSION_MAJOR
        https://bugs.webkit.org/show_bug.cgi?id=155707
        <rdar://problem/24980691>

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Set TARGET_MAC_OS_X_VERSION_MAJOR based on the last
          component of MACOSX_DEPLOYMENT_TARGET.
        * Configurations/DebugRelease.xcconfig: For engineering builds, preserve the behavior of
          TARGET_MAC_OS_X_VERSION_MAJOR being the host’s OS version.

2016-03-20  Dan Bernstein  <mitz@apple.com>

        Update build settings

        Rubber-stamped by Andy Estes.

        * Configurations/DebugRelease.xcconfig:

2016-02-23  Dan Bernstein  <mitz@apple.com>

        [Xcode] Linker errors display mangled names, but no longer should
        https://bugs.webkit.org/show_bug.cgi?id=154632

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Stop setting LINKER_DISPLAYS_MANGLED_NAMES to YES.

2016-01-08  Brent Fulgham  <bfulgham@apple.com>

        [ANGLE] Correct UNREACHABLE runtime assertion for void constructors
        https://bugs.webkit.org/show_bug.cgi?id=152900
        <rdar://problem/24107501>

        Reviewed by Alex Christensen.

        Tested by Khronos WebGL 1.0.4 suite.

        Merge a small part of ANGLE upstream commit r284735:
        
            commit    01971113492d9aca386f2bca021b1f4b134fc277
            author    Dmitry Skiba <dskiba@google.com>  Fri Jul 10 18:54:00 2015
            committer Jamie Madill <jmadill@chromium.org>  Fri Jul 10 19:03:34 2015
            tree      47e42eac00f7d64cddb14b3cc21a4e605c189d20

        This issue was found by <https://www.khronos.org/registry/webgl/sdk/tests/conformance/glsl/bugs/angle-constructor-invalid-parameters.html?webglVersion=1&quiet=0>

        * src/compiler/translator/Types.cpp:
        (TType::buildMangledName): Don't assert with UNREACHABLE here.

2015-12-28  Joonghun Park  <jh718.park@samsung.com>

        [ANGLE][EFL][GTK] Remove 'template<class> class std::auto_ptr is deprecated' compile warning
        https://bugs.webkit.org/show_bug.cgi?id=152567

        Reviewed by Alex Christensen.

        Because auto_ptr is deprecated as of C++11, we should use unique_ptr instead.

        * src/compiler/preprocessor/MacroExpander.h:

2015-12-19  Dan Bernstein  <mitz@apple.com>

        [Mac] WebKit contains dead source code for OS X Mavericks and earlier
        https://bugs.webkit.org/show_bug.cgi?id=152462

        Reviewed by Alexey Proskuryakov.

        * Configurations/DebugRelease.xcconfig: Removed definitions of MACOSX_DEPLOYMENT_TARGET for
          OS X 10.8 and 10.9.

2015-12-03  Anders Carlsson  <andersca@apple.com>

        Remove Objective-C GC support
        https://bugs.webkit.org/show_bug.cgi?id=151819
        rdar://problem/23746991

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2015-11-30  Dana Burkart  <dburkart@apple.com>

        Remove Mountain Lion support from ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=151679

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:

2015-11-02  Andy Estes  <aestes@apple.com>

        [Cocoa] Add tvOS and watchOS to SUPPORTED_PLATFORMS
        https://bugs.webkit.org/show_bug.cgi?id=150819

        Reviewed by Dan Bernstein.

        This tells Xcode to include these platforms in its Devices dropdown, making it possible to build in the IDE.

        * Configurations/Base.xcconfig:

2015-10-10  Dan Bernstein  <mitz@apple.com>

        [iOS] Remove project support for iOS 8
        https://bugs.webkit.org/show_bug.cgi?id=149993

        Reviewed by Alexey Proskuryakov.

        * Configurations/ANGLE.xcconfig:
        * Configurations/Base.xcconfig:

2015-08-20  Alex Christensen  <achristensen@webkit.org>

        Clean up CMake build after r188673
        https://bugs.webkit.org/show_bug.cgi?id=148234

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        Copy headers to forwarding headers.

2015-08-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] Switch Windows build to Visual Studio 2015
        https://bugs.webkit.org/show_bug.cgi?id=147887
        <rdar://problem/22235098>

        Reviewed by Alex Christensen.

        Update Visual Studio project file settings to use the current Visual
        Studio and compiler. Continue targeting binaries to run on our minimum
        supported configuration of Windows 7.

        * ANGLE.vcxproj/libEGL.vcxproj:
        * ANGLE.vcxproj/libGLESv2.vcxproj:
        * ANGLE.vcxproj/preprocessor.vcxproj:
        * ANGLE.vcxproj/translator_common.vcxproj:
        * ANGLE.vcxproj/translator_glsl.vcxproj:
        * ANGLE.vcxproj/translator_hlsl.vcxproj:

2015-08-04  Alex Christensen  <achristensen@webkit.org>

        Build fix after r187928.

        * CMakeLists.txt:
        Typo. Set libGLESv2 compile definitions instead of libEGL, which are set separately.

2015-08-04  Alex Christensen  <achristensen@webkit.org>

        Soft link libGLESv2 and libEGL on Windows again
        https://bugs.webkit.org/show_bug.cgi?id=147671

        Reviewed by Dean Jackson.

        * CMakeLists.txt:
        Clean up some warnings when compiling with CMake.
        * include/EGL/egl.h:
        * include/EGL/eglsoftlinking.h:
        * include/GLES2/gl2.h:
        Soft link egl optionally.

2015-08-04  Alex Christensen  <achristensen@webkit.org>

        Enable WebGL on Windows CMake build.
        https://bugs.webkit.org/show_bug.cgi?id=143311

        Reviewed by Csaba Osztrogonác.

        * CMakeLists.txt: Added.

2015-07-03  Dan Bernstein  <mitz@apple.com>

        [Xcode] Update some build settings as recommended by Xcode 7
        https://bugs.webkit.org/show_bug.cgi?id=146597

        Reviewed by Sam Weinig.

        * ANGLE.xcodeproj/project.pbxproj: Enabled CLANG_WARN_BOOL_CONVERSION,
        CLANG_WARN_ENUM_CONVERSION, CLANG_WARN_INT_CONVERSION, ENABLE_STRICT_OBJC_MSGSEND and
        GCC_NO_COMMON_BLOCKS.

        * Configurations/Base.xcconfig: Updated LastUpgradeCheck.

2015-07-03  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo][WebGL] Enable HLSL.
        https://bugs.webkit.org/show_bug.cgi?id=146559

        Reviewed by Alex Christensen.

        High Level Shader Language needs to be enabled for WebGL to work on Windows.

        * ANGLE.vcxproj/translatorCommon.props:
        * ANGLE.vcxproj/translator_hlsl.vcxproj:
        * ANGLE.vcxproj/translator_hlsl.vcxproj.filters:

2015-07-01  Alex Christensen  <achristensen@webkit.org>

        Re-enable WebGL on WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=146537

        Reviewed by Csaba Osztrogonác.

        * ANGLE.vcxproj/DirectX32.props:
        * ANGLE.vcxproj/DirectX64.props:
        * ANGLE.vcxproj/libGLESv2Common.props:
        Update DirectX directories to use the Windows SDK instead of the June 2010 DirectX SDK.

2015-07-01  Alex Christensen  <achristensen@webkit.org>

        Fix ANGLE Windows build after r186169.
        https://bugs.webkit.org/show_bug.cgi?id=146532

        Reviewed by Brent Fulgham.

        * ANGLE.vcxproj/libEGL.vcxproj:
        * ANGLE.vcxproj/libEGL.vcxproj.filters:
        * ANGLE.vcxproj/libGLESv2.vcxproj:
        * ANGLE.vcxproj/libGLESv2.vcxproj.filters:
        * ANGLE.vcxproj/libGLESv2Common.props:
        * ANGLE.vcxproj/translator_common.vcxproj:
        * ANGLE.vcxproj/translator_common.vcxproj.filters:
        * ANGLE.vcxproj/translator_glsl.vcxproj:
        * ANGLE.vcxproj/translator_glsl.vcxproj.filters:
        * ANGLE.vcxproj/translator_hlsl.vcxproj:
        * ANGLE.vcxproj/translator_hlsl.vcxproj.filters:
        Update Windows build to build new files.

2015-06-30  Alex Christensen  <achristensen@webkit.org>

        Update ANGLE to b11e2483742db884bd0af41f78f528240577356b.
        https://bugs.webkit.org/show_bug.cgi?id=145010

        Reviewed by Dean Jackson.

        Huge list of source changes omitted.
        ROLL DEPS!

2015-05-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21104551> Update build settings

        Reviewed by Anders Carlsson.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2015-05-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r181571): Build broken when USE(OPENGL_ES_2) is defined.
        https://bugs.webkit.org/show_bug.cgi?id=145156

        Reviewed by Alex Christensen.

        * include/GLES2/gl2softlinking.h: Revert r181589. Vertex Array Objects are not in GLESv2.

2015-05-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] Move Windows build target to Windows 7 (or newer)
        https://bugs.webkit.org/show_bug.cgi?id=144890
        <rdar://problem/20707307>

        Reviewed by Anders Carlsson.

        Update linked SDK and minimal Windows level to be compatible with
        Windows 7 or newer.

        * ANGLE.vcxproj/libEGL.vcxproj:
        * ANGLE.vcxproj/libGLESv2.vcxproj:
        * ANGLE.vcxproj/preprocessor.vcxproj:
        * ANGLE.vcxproj/translator_common.vcxproj:
        * ANGLE.vcxproj/translator_glsl.vcxproj:
        * ANGLE.vcxproj/translator_hlsl.vcxproj:

2015-05-07  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19317140> [Xcode] Remove usage of AspenFamily.xcconfig in Source/
        https://bugs.webkit.org/show_bug.cgi?id=144727

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Don’t include AspenFamily.xcconfig, and define
        INSTALL_PATH_PREFIX and LD_DYLIB_INSTALL_NAME for the iOS 8.x Simulator.

2015-04-01  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Windows and Mac.
        https://bugs.webkit.org/show_bug.cgi?id=143293

        Reviewed by Filip Pizlo.

        * include/GLES2/gl2.h:
        Temporarily disabled WebGL on Windows CMake builds.

2015-03-17  Zan Dobersek  <zdobersek@igalia.com>

        [CMake] Use a forwarding header for ANGLE's ShaderLang.h to avoid picking up ANGLE's EGL headers
        https://bugs.webkit.org/show_bug.cgi?id=142530

        Reviewed by Darin Adler.

        * ANGLE/ShaderLang.h: Added. Includes include/GLSLANG/ShaderLang.h. Used in WebCore
        so we can avoid using ANGLE's EGL headers and use the system-default headers instead.

2015-03-16  Roger Fong  <roger_fong@apple.com>

        [Win] Unreviewed build fix after r181571.

        * include/GLES2/gl2softlinking.h:

2015-03-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix (part 2).

        * ANGLE.vcxproj/libGLESv2Common.props: Missed a directory separator.

2015-03-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix for some DirectX SDK Installs

        * ANGLE.vcxproj/libGLESv2Common.props: Correct path for Lib and
        Include paths based on problems others have had building WebKit
        under different Windows and DirectX revisions.

2015-02-20  Alexey Proskuryakov  <ap@apple.com>

        Remove svn:keywords property.

        As far as I can tell, the property had no effect on any of these files, but also,
        when it has effect it's likely harmful.

        * ANGLE.txt: Removed property svn:keywords.
        * src/common/RefCountObject.cpp: Removed property svn:keywords.
        * src/common/RefCountObject.h: Removed property svn:keywords.
        * src/compiler/translator/BaseTypes.h: Removed property svn:keywords.
        * src/compiler/translator/BuiltInFunctionEmulator.cpp: Removed property svn:keywords.
        * src/compiler/translator/BuiltInFunctionEmulator.h: Removed property svn:keywords.
        * src/compiler/translator/CodeGen.cpp: Removed property svn:keywords.
        * src/compiler/translator/Common.h: Removed property svn:keywords.
        * src/compiler/translator/Compiler.cpp: Removed property svn:keywords.
        * src/compiler/translator/ConstantUnion.h: Removed property svn:keywords.
        * src/compiler/translator/DetectCallDepth.cpp: Removed property svn:keywords.
        * src/compiler/translator/DetectCallDepth.h: Removed property svn:keywords.
        * src/compiler/translator/DetectDiscontinuity.cpp: Removed property svn:keywords.
        * src/compiler/translator/DetectDiscontinuity.h: Removed property svn:keywords.
        * src/compiler/translator/Diagnostics.cpp: Removed property svn:keywords.
        * src/compiler/translator/Diagnostics.h: Removed property svn:keywords.
        * src/compiler/translator/DirectiveHandler.cpp: Removed property svn:keywords.
        * src/compiler/translator/DirectiveHandler.h: Removed property svn:keywords.
        * src/compiler/translator/ExtensionBehavior.h: Removed property svn:keywords.
        * src/compiler/translator/ForLoopUnroll.cpp: Removed property svn:keywords.
        * src/compiler/translator/ForLoopUnroll.h: Removed property svn:keywords.
        * src/compiler/translator/HashNames.h: Removed property svn:keywords.
        * src/compiler/translator/InfoSink.cpp: Removed property svn:keywords.
        * src/compiler/translator/InfoSink.h: Removed property svn:keywords.
        * src/compiler/translator/Initialize.cpp: Removed property svn:keywords.
        * src/compiler/translator/Initialize.h: Removed property svn:keywords.
        * src/compiler/translator/InitializeDll.cpp: Removed property svn:keywords.
        * src/compiler/translator/InitializeDll.h: Removed property svn:keywords.
        * src/compiler/translator/InitializeGlobals.h: Removed property svn:keywords.
        * src/compiler/translator/InitializeParseContext.cpp: Removed property svn:keywords.
        * src/compiler/translator/InitializeParseContext.h: Removed property svn:keywords.
        * src/compiler/translator/InitializeVariables.cpp: Removed property svn:keywords.
        * src/compiler/translator/InitializeVariables.h: Removed property svn:keywords.
        * src/compiler/translator/IntermTraverse.cpp: Removed property svn:keywords.
        * src/compiler/translator/Intermediate.cpp: Removed property svn:keywords.
        * src/compiler/translator/MMap.h: Removed property svn:keywords.
        * src/compiler/translator/NodeSearch.h: Removed property svn:keywords.
        * src/compiler/translator/OutputESSL.cpp: Removed property svn:keywords.
        * src/compiler/translator/OutputESSL.h: Removed property svn:keywords.
        * src/compiler/translator/OutputGLSL.cpp: Removed property svn:keywords.
        * src/compiler/translator/OutputGLSL.h: Removed property svn:keywords.
        * src/compiler/translator/OutputGLSLBase.cpp: Removed property svn:keywords.
        * src/compiler/translator/OutputGLSLBase.h: Removed property svn:keywords.
        * src/compiler/translator/OutputHLSL.cpp: Removed property svn:keywords.
        * src/compiler/translator/OutputHLSL.h: Removed property svn:keywords.
        * src/compiler/translator/ParseContext.cpp: Removed property svn:keywords.
        * src/compiler/translator/ParseContext.h: Removed property svn:keywords.
        * src/compiler/translator/PoolAlloc.cpp: Removed property svn:keywords.
        * src/compiler/translator/PoolAlloc.h: Removed property svn:keywords.
        * src/compiler/translator/Pragma.h: Removed property svn:keywords.
        * src/compiler/translator/QualifierAlive.cpp: Removed property svn:keywords.
        * src/compiler/translator/QualifierAlive.h: Removed property svn:keywords.
        * src/compiler/translator/RemoveTree.cpp: Removed property svn:keywords.
        * src/compiler/translator/RemoveTree.h: Removed property svn:keywords.
        * src/compiler/translator/RenameFunction.h: Removed property svn:keywords.
        * src/compiler/translator/RewriteElseBlocks.cpp: Removed property svn:keywords.
        * src/compiler/translator/RewriteElseBlocks.h: Removed property svn:keywords.
        * src/compiler/translator/SearchSymbol.cpp: Removed property svn:keywords.
        * src/compiler/translator/SearchSymbol.h: Removed property svn:keywords.
        * src/compiler/translator/ShHandle.h: Removed property svn:keywords.
        * src/compiler/translator/ShaderLang.cpp: Removed property svn:keywords.
        * src/compiler/translator/SymbolTable.cpp: Removed property svn:keywords.
        * src/compiler/translator/SymbolTable.h: Removed property svn:keywords.
        * src/compiler/translator/TranslatorESSL.cpp: Removed property svn:keywords.
        * src/compiler/translator/TranslatorESSL.h: Removed property svn:keywords.
        * src/compiler/translator/TranslatorGLSL.cpp: Removed property svn:keywords.
        * src/compiler/translator/TranslatorGLSL.h: Removed property svn:keywords.
        * src/compiler/translator/TranslatorHLSL.cpp: Removed property svn:keywords.
        * src/compiler/translator/TranslatorHLSL.h: Removed property svn:keywords.
        * src/compiler/translator/Types.h: Removed property svn:keywords.
        * src/compiler/translator/UnfoldShortCircuit.cpp: Removed property svn:keywords.
        * src/compiler/translator/UnfoldShortCircuit.h: Removed property svn:keywords.
        * src/compiler/translator/UnfoldShortCircuitAST.cpp: Removed property svn:keywords.
        * src/compiler/translator/UnfoldShortCircuitAST.h: Removed property svn:keywords.
        * src/compiler/translator/ValidateLimitations.cpp: Removed property svn:keywords.
        * src/compiler/translator/ValidateLimitations.h: Removed property svn:keywords.
        * src/compiler/translator/VariableInfo.cpp: Removed property svn:keywords.
        * src/compiler/translator/VariableInfo.h: Removed property svn:keywords.
        * src/compiler/translator/VariablePacker.cpp: Removed property svn:keywords.
        * src/compiler/translator/VariablePacker.h: Removed property svn:keywords.
        * src/compiler/translator/VersionGLSL.cpp: Removed property svn:keywords.
        * src/compiler/translator/VersionGLSL.h: Removed property svn:keywords.
        * src/compiler/translator/compilerdebug.cpp: Removed property svn:keywords.
        * src/compiler/translator/compilerdebug.h: Removed property svn:keywords.
        * src/compiler/translator/depgraph/DependencyGraph.cpp: Removed property svn:keywords.
        * src/compiler/translator/depgraph/DependencyGraph.h: Removed property svn:keywords.
        * src/compiler/translator/depgraph/DependencyGraphBuilder.cpp: Removed property svn:keywords.
        * src/compiler/translator/depgraph/DependencyGraphBuilder.h: Removed property svn:keywords.
        * src/compiler/translator/depgraph/DependencyGraphOutput.cpp: Removed property svn:keywords.
        * src/compiler/translator/depgraph/DependencyGraphOutput.h: Removed property svn:keywords.
        * src/compiler/translator/depgraph/DependencyGraphTraverse.cpp: Removed property svn:keywords.
        * src/compiler/translator/generate_parser.sh: Removed property svn:keywords.
        * src/compiler/translator/glslang.h: Removed property svn:keywords.
        * src/compiler/translator/glslang_lex.cpp: Removed property svn:keywords.
        * src/compiler/translator/glslang_tab.cpp: Removed property svn:keywords.
        * src/compiler/translator/glslang_tab.h: Removed property svn:keywords.
        * src/compiler/translator/intermOut.cpp: Removed property svn:keywords.
        * src/compiler/translator/intermediate.h: Removed property svn:keywords.
        * src/compiler/translator/localintermediate.h: Removed property svn:keywords.
        * src/compiler/translator/osinclude.h: Removed property svn:keywords.
        * src/compiler/translator/ossource_posix.cpp: Removed property svn:keywords.
        * src/compiler/translator/ossource_win.cpp: Removed property svn:keywords.
        * src/compiler/translator/parseConst.cpp: Removed property svn:keywords.
        * src/compiler/translator/timing/RestrictFragmentShaderTiming.cpp: Removed property svn:keywords.
        * src/compiler/translator/timing/RestrictFragmentShaderTiming.h: Removed property svn:keywords.
        * src/compiler/translator/timing/RestrictVertexShaderTiming.cpp: Removed property svn:keywords.
        * src/compiler/translator/timing/RestrictVertexShaderTiming.h: Removed property svn:keywords.
        * src/compiler/translator/util.cpp: Removed property svn:keywords.
        * src/compiler/translator/util.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/BufferStorage11.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/BufferStorage11.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/Fence11.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/Fence11.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/Image11.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/Image11.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/IndexBuffer11.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/IndexBuffer11.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/InputLayoutCache.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/InputLayoutCache.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/Query11.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/Query11.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/RenderStateCache.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/RenderStateCache.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/RenderTarget11.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/RenderTarget11.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/Renderer11.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/Renderer11.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/ShaderExecutable11.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/ShaderExecutable11.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/SwapChain11.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/SwapChain11.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/TextureStorage11.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/TextureStorage11.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/VertexBuffer11.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/VertexBuffer11.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/renderer11_utils.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d11/renderer11_utils.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/BufferStorage9.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/BufferStorage9.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/Fence9.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/Fence9.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/Image9.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/Image9.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/IndexBuffer9.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/IndexBuffer9.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/Query9.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/Query9.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/RenderTarget9.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/RenderTarget9.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/Renderer9.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/Renderer9.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/ShaderExecutable9.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/ShaderExecutable9.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/SwapChain9.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/SwapChain9.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/TextureStorage9.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/TextureStorage9.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/VertexBuffer9.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/VertexBuffer9.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/VertexDeclarationCache.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/VertexDeclarationCache.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/renderer9_utils.cpp: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/renderer9_utils.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/shaders/compiled/componentmaskps.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/shaders/compiled/flipyvs.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/shaders/compiled/luminanceps.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/shaders/compiled/passthroughps.h: Removed property svn:keywords.
        * src/libGLESv2/renderer/d3d9/shaders/compiled/standardvs.h: Removed property svn:keywords.

2015-01-28  Dana Burkart  <dburkart@apple.com>

        Move ASan flag settings from DebugRelease.xcconfig to Base.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=136765

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2014-12-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19348208> REGRESSION (r177027): iOS builds use the wrong toolchain
        https://bugs.webkit.org/show_bug.cgi?id=139950

        Reviewed by David Kilzer.

        * Configurations/Base.xcconfig: Only define TOOLCHAINS when building for OS X, doing so
        in a manner that works with Xcode 5.1.1.

2014-12-24  Dan Bernstein  <mitz@apple.com>

        ANGLE extern symbols are not hidden by default, but should be
        https://bugs.webkit.org/show_bug.cgi?id=139936

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Changed GCC_SYMBOLS_PRIVATE_EXTERN to YES.

2014-12-24  Dan Bernstein  <mitz@apple.com>

        Removed the Derived Sources target.

        It has been empty since r159533.

        * ANGLE.xcodeproj/project.pbxproj:

2014-12-09  David Kilzer  <ddkilzer@apple.com>

        Switch from using PLATFORM_NAME to SDK selectors in ANGLE, bmalloc, gtest, JavaScriptCore, WTF
        <http://webkit.org/b/139212>

        Reviewed by Joseph Pecoraro.

        * Configurations/Base.xcconfig:
        - Only set GCC_ENABLE_OBJC_GC, GCC_MODEL_TUNING and TOOLCHAINS
          on OS X.
        * Configurations/DebugRelease.xcconfig:
        - Only set MACOSX_DEPLOYMENT_TARGET and SDKROOT on OS X.

2014-10-30  Dana Burkart  <dburkart@apple.com>

        <rdar://problem/18821260> Prepare for the mysterious future

        Reviewed by Lucas Forschler.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2014-10-08  Brent Fulgham  <bfulgham@apple.com>

        [Win] Use proper v120 target for 64-bit builds.

        * ANGLE.vcxproj/libEGL.vcxproj:

2014-09-29  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] D3D11 is not used by default.
        https://bugs.webkit.org/show_bug.cgi?id=137215

        Reviewed by Alex Christensen.

        ANGLE_DEFAULT_D3D11 needs to be defined for D3D11 to be used as default.

        * ANGLE.vcxproj/libGLESv2Common.props:

2014-09-19  Daniel Bates  <dabates@apple.com>

        Always assume internal SDK when building configuration Production
        https://bugs.webkit.org/show_bug.cgi?id=136925
        <rdar://problem/18362399>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2014-09-10  Roger Fong  <roger_fong@apple.com>

        Check for varying packing restrictions per program instead of per shader.
        https://bugs.webkit.org/show_bug.cgi?id=136585.
        <rdar://problem/16308409>.

        Reviewed by Dean Jackson.

        Remove varying packing restrictions checks from ANGLE.
        * src/compiler/translator/Compiler.cpp:
        (TCompiler::compile):
        (TCompiler::enforcePackingRestrictions):
        * src/compiler/translator/ShHandle.h:

2014-09-06  Darin Adler  <darin@apple.com>

        Make updates suggested by new version of Xcode
        https://bugs.webkit.org/show_bug.cgi?id=136603

        Reviewed by Mark Rowe.

        * ANGLE.xcodeproj/project.pbxproj: Updated LastUpgradeCheck.

        * Configurations/ANGLE.xcconfig: Added CLANG_WARN_BOOL_CONVERSION,
        CLANG_WARN_ENUM_CONVERSION, CLANG_WARN_INT_CONVERSION, COMBINE_HIDPI_IMAGES,
        and ENABLE_STRICT_OBJC_MSGSEND as suggested by Xcode upgrade check.

2014-09-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r173335.
        https://bugs.webkit.org/show_bug.cgi?id=136597

        Broke webgl/1.0.2/conformance/glsl/misc/shader-varying-
        packing-restrictions.html (Requested by ap on #webkit).

        Reverted changeset:

        "Remove statically used varyings from packing restrictions
        check."
        https://bugs.webkit.org/show_bug.cgi?id=136585
        http://trac.webkit.org/changeset/173335

2014-09-05  Roger Fong  <roger_fong@apple.com>

        Remove statically used varyings from packing restrictions check.
        https://bugs.webkit.org/show_bug.cgi?id=136585.
        <rdar://problem/16308409>

        Reviewed by Dean Jackson.

        * src/compiler/translator/Compiler.cpp:
        (TCompiler::enforcePackingRestrictions):

2014-08-29  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviwed, remove empty directories.

        * src/compiler/depgraph: Removed.
        * src/compiler/timing: Removed.
        * src/libGLESv2/renderer/shaders: Removed.
        * src/libGLESv2/renderer/shaders/compiled: Removed.

2014-08-11  Andy Estes  <aestes@apple.com>

        [iOS] Get rid of iOS.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=135809

        Reviewed by Joseph Pecoraro.

        All iOS.xcconfig did was include AspenFamily.xcconfig, so there's no need for the indirection.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/Base.xcconfig:
        * Configurations/iOS.xcconfig: Removed.

2014-08-07  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening.

        DebugSuffix targets should use our debugsuffix property sheet, and
        will therefore build to the proper output location with the proper
        suffix tags.

        Also, we must use the WebKit_Libraries environment variable, not a set
        of relative paths to the property sheets.

        * ANGLE.vcxproj/libEGL.vcxproj: Use 'debugsuffix.props' sheet.
        * ANGLE.vcxproj/libGLESv2.vcxproj: Ditto.
        * ANGLE.vcxproj/preprocessor.vcxproj: Ditto.
        * ANGLE.vcxproj/translator_common.vcxproj: Ditto.
        * ANGLE.vcxproj/translator_glsl.vcxproj: Ditto.
        * ANGLE.vcxproj/translator_hlsl.vcxproj: Ditto.
        * ANGLE.vcxproj/libEGLCommon.props: Use $(DebugSuffix) endings.
        * ANGLE.vcxproj/libGLESv2Common.props: Ditto.
        * ANGLE.vcxproj/translatorCommon.props: Output to 'lib' folder,
        not 'bin' folder. These are libraries!

2014-08-02  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        * src/libGLESv2/renderer/d3d11/BufferStorage11.cpp:
        (rx::BufferStorage11::copyData): Help compiler make
        decision about types.

2014-07-25  peavo@outlook.com  <peavo@outlook.com>

        [Win][ANGLE] Enable D3D11.
        https://bugs.webkit.org/show_bug.cgi?id=135296

        Reviewed by Alex Christensen.

        Direct3D 11 is not enabled on Windows.

        * ANGLE.vcxproj/libGLESv2.vcxproj: Added files.
        * ANGLE.vcxproj/libGLESv2.vcxproj.filters: Ditto.
        * ANGLE.vcxproj/libGLESv2Common.props: Enable D3D11.
        * src/libGLESv2/precompiled.h: Header file does not exist, avoid include.
        * changes.diff: Updated diff.

2014-06-04  Alex Christensen  <achristensen@webkit.org>

        Enable WebGL on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=133503

        Reviewed by Brent Fulgham.

        * changes.diff
        Recorded additional changes from ANGLE.
        * ANGLE.vcxproj/libEGL.vcxproj:
        * ANGLE.vcxproj/libEGL.vcxproj.filters:
        * ANGLE.vcxproj/libGLESv2.vcxproj:
        * ANGLE.vcxproj/libGLESv2.vcxproj.filters:
        * include/EGL/egl.h:
        * include/EGL/eglsoftlinking.h: Added.
        * include/GLES2/gl2.h:
        * include/GLES2/gl2softlinking.h: Added.
        Resurrected soft linking headers from r153664.
        * src/libGLESv2/renderer/VertexBuffer.cpp:
        (rx::VertexBufferInterface::directStoragePossible):
        Compile fix for Win64.

2014-05-02  Alex Christensen  <achristensen@webkit.org>

        Update ANGLE Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=132456

        Reviewed by Brent Fulgham.

        * ANGLE.vcxproj/libEGLCommon.props:
        * ANGLE.vcxproj/libGLESv2.vcxproj:
        * ANGLE.vcxproj/libGLESv2.vcxproj.filters:
        * ANGLE.vcxproj/libGLESv2Common.props:
        * ANGLE.vcxproj/translator_common.vcxproj:
        * ANGLE.vcxproj/translator_common.vcxproj.filters:
        * ANGLE.vcxproj/translator_glsl.vcxproj:
        * ANGLE.vcxproj/translator_glsl.vcxproj.filters:
        * ANGLE.vcxproj/translator_hlsl.vcxproj:
        * ANGLE.vcxproj/translator_hlsl.vcxproj.filters:
        Updated ANGLE build.
        * src/ANGLE.sln: Removed.
        * src/build_angle.gyp: Removed.
        * src/commit.h: Added.
        * changes.diff:
        * src/libGLESv2/Program.cpp:
        (gl::InfoLog::append):
        Fixed typo.

2014-05-01  Alex Christensen  <achristensen@webkit.org>

        Finish updating ANGLE.
        https://bugs.webkit.org/show_bug.cgi?id=132434

        Reviewed by Dean Jackson.

        * ANGLE.xcodeproj/project.pbxproj:
        Removed Uniform.cpp which is no longer in ANGLE.
        * changes.diff:
        Added more changes from ANGLE which are already included in WebKit.

        Updated ANGLE source files to e7a453a5bd76705ccb151117fa844846d4aa90af.  Long list of changes omitted.

2014-04-30  Alex Christensen  <achristensen@webkit.org>

        Updated ANGLE.
        https://bugs.webkit.org/show_bug.cgi?id=132367
        <rdar://problem/16211451>

        Reviewed by Dean Jackson.

        * ANGLE.plist:
        Updated and xml encoded.
        * ANGLE.xcodeproj/project.pbxproj:
        Added needed new source files.
        * changes.diff: 
        Added to keep track of differences between WebKit's copy of ANGLE and the master repository.
        
        Updated ANGLE source files to e7a453a5bd76705ccb151117fa844846d4aa90af.  Long list of changes omitted.

2014-03-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the autotools build
        https://bugs.webkit.org/show_bug.cgi?id=130717

        Reviewed by Anders Carlsson.

        * GNUmakefile.am: Removed.

2014-03-14  Mark Rowe  <mrowe@apple.com>

        Fix the production build.

        Don't rely on USE_INTERNAL_SDK being set for the Production configuration since UseInternalSDK.xcconfig won't
        be at the expected relative path when working from installed source.

        * Configurations/Base.xcconfig:

2014-03-13  Tim Horton  <timothy_horton@apple.com>

        Fix relative paths to UseInternalSDK.xcconfig for ANGLE and WebKit/mac

        Rubber-stamped by Mark Rowe.

        One-too-few "..".

        * Configurations/Base.xcconfig:

2014-03-13  Radu Stavila  <stavila@adobe.com>

        Webkit not building on XCode 5.1 due to garbage collection no longer being supported
        https://bugs.webkit.org/show_bug.cgi?id=130087

        Reviewed by Mark Rowe.

        Disable garbage collection on macosx when not using internal SDK.

        * Configurations/Base.xcconfig:

2014-02-24  Dean Jackson  <dino@apple.com>

        Unreviewed. This file should not be marked as executable (copied in from ANGLE).

        * include/KHR/khrplatform.h:

2014-02-23  David Kilzer  <ddkilzer@apple.com>

        ANGLE: Stop using unsafe strcpy method
        <http://webkit.org/b/129237>
        <rdar://problem/11077580>

        Reviewed by Dean Jackson.

        * include/GLSLANG/ShaderLang.h:
        - Drive-by fix for header documentation.

        * src/compiler/translator/ShaderLang.cpp:
        (ShGetInfoLog):
        (ShGetObjectCode):
        * src/libGLESv2/Program.cpp:
        (gl::InfoLog::append):
        - Switch to use strncpy(), and explicitly set NULL terminator at
          the end of the buffer.

2014-02-23  Brent Fulgham  <bfulgham@apple.com>

        [WinCairo] Unreviewed build fix after r164565.

        * ANGLE.vcxproj/libEGL.vcxproj: Use correct path to files.
        * ANGLE.vcxproj/libGLESv2.vcxproj: Ditto.
        * ANGLE.vcxproj/libGLESv2.vcxproj.filters: Ditto.
        * ANGLE.vcxproj/preprocessor.vcxproj: Ditto.
        * ANGLE.vcxproj/translator_common.vcxproj: Ditto.
        * ANGLE.vcxproj/translator_common.vcxproj.filters: Ditto.
        * ANGLE.vcxproj/translator_glsl.vcxproj: Ditto.
        * ANGLE.vcxproj/translator_glsl.vcxproj.filters: Ditto.
        * ANGLE.vcxproj/translator_hlsl.vcxproj: Ditto.
        * ANGLE.vcxproj/translator_hlsl.vcxproj.filters: Ditto.

2014-02-23  Dean Jackson  <dino@apple.com>

        Missing files from previous commit.

2014-02-23  Dean Jackson  <dino@apple.com>

        Update ANGLE to 836bd2176e5607b14846cf1fbc5932dbc91318f4
        https://bugs.webkit.org/show_bug.cgi?id=129232

        Reviewed by Brent Fulgham.

        I also reapplied some of our changes from previous updates, including disabling the clang deprecation
        warnings in some files, adding the Apple note about license and defining YY_NO_INPUT.

        Huge list of source changes omitted.

2013-12-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am:

2013-12-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Some ANGLE headers missing from dist
        https://bugs.webkit.org/show_bug.cgi?id=125782

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: add a few headers that were missing from the build,
        causing build failures when the system headers were incompatible.

2013-12-16  Alex Christensen  <achristensen@webkit.org>

        Fixed Win64 build on VS2013.
        https://bugs.webkit.org/show_bug.cgi?id=125753

        Reviewed by Brent Fulgham.

        * ANGLE.vcxproj/libGLESv2.vcxproj:
        * ANGLE.vcxproj/preprocessor.vcxproj:
        * ANGLE.vcxproj/translator_common.vcxproj:
        * ANGLE.vcxproj/translator_glsl.vcxproj:
        * ANGLE.vcxproj/translator_hlsl.vcxproj:
        Added correct PlatformToolset for 64-bit builds.

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r160548

        I missed the ANGLE files, since we aren't building these
        on the Apple Windows port at the moment.

        * ANGLE.vcxproj/libEGL.vcxproj: Update to VS2013
        * ANGLE.vcxproj/libGLESv2.vcxproj: Ditto
        * ANGLE.vcxproj/preprocessor.vcxproj: Ditto
        * ANGLE.vcxproj/translator_common.vcxproj: Ditto
        * ANGLE.vcxproj/translator_glsl.vcxproj: Ditto
        * ANGLE.vcxproj/translator_hlsl.vcxproj: Ditto

2013-12-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159543.
        http://trac.webkit.org/changeset/159543
        https://bugs.webkit.org/show_bug.cgi?id=125371

        Build fix for mac no longer needed (Requested by rfong on
        #webkit).

        * ANGLE.xcodeproj/project.pbxproj:
        * src/compiler/glslang_tab.cpp:
        (yysyntax_error):
        (glslang_parse):
        * src/compiler/glslang_tab.h:
        * src/compiler/preprocessor/ExpressionParser.cpp:
        (yy_symbol_print):
        (yy_stack_print):
        (yy_reduce_print):
        (yytnamerr):
        (yysyntax_error):
        (yydestruct):
        (yyparse):

2013-12-05  Roger Fong  <roger_fong@apple.com>

        [WebGL] Make sure we satisfy uniform and varying packing restrictions.
        https://bugs.webkit.org/show_bug.cgi?id=125124.
        <rdar://problem/15203291>

        Reviewed by Brent Fulgham.

        * src/compiler/Compiler.cpp: 
        Add a check to enforcePackingRestrictions to ensure we make sure packing restrictions for varyings are satisfied as well.
        (TCompiler::TCompiler):
        (TCompiler::Init):
        (TCompiler::compile):
        (TCompiler::enforcePackingRestrictions):
        * src/compiler/ShHandle.h: Keep track of maximum varying vectors.

2013-12-05  Matthew Hanson  <matthew_hanson@apple.com>

        Fix ANGLE build failures by re-comitting the changes in http://trac.webkit.org/changeset/154223
        on top of the library updates introduced by http://trac.webkit.org/changeset/159533.

        Rubber-stamped by Babak Shafiei.

        * src/compiler/glslang.l:
        * src/compiler/glslang_lex.cpp:
        * src/compiler/preprocessor/Tokenizer.cpp:
        * src/compiler/preprocessor/Tokenizer.l:

2013-12-03  Daniel Bates  <dabates@apple.com>

        ANGLE fails to build with trunk clang: unused constant kTraceBufferLen
        https://bugs.webkit.org/show_bug.cgi?id=125164
        https://code.google.com/p/angleproject/issues/detail?id=534

        Reviewed by Darin Adler.

        Move the definition of the constant kTraceBufferLen under the macro
        guard TRACE_ENABLED since it's only referenced in code guarded by
        TRACE_ENABLED.

        * src/compiler/debug.cpp:

2013-11-21  Alex Christensen  <achristensen@webkit.org>

        Remove ANGLEGenerated from Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=124759

        Reviewed by Darin Adler.

        * ANGLE.vcxproj/ANGLEGenerated.vcxproj: Removed.
        * ANGLE.vcxproj/ANGLEGenerated.vcxproj.filters: Removed.

2013-11-21  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix.

        * src/libGLESv2/Constants.h: Added from checkout a60e0805721f62c28a55faf2df74472cc5fc91fc.

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124701> Fix an error in a few Xcode configuration setting files.

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2013-11-21  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed gardening to hide annoying *.user files when.

        * ANGLE.vcxproj: Added property svn:ignore.

2013-11-21  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Building ANGLE libraries fails.
        https://bugs.webkit.org/show_bug.cgi?id=124679

        Reviewed by Brent Fulgham.

        Added/removed files to/from project, and re-added constants.h file.

        * ANGLE.vcxproj/libEGL.vcxproj:
        * ANGLE.vcxproj/libEGL.vcxproj.filters:
        * ANGLE.vcxproj/libGLESv2.vcxproj:
        * ANGLE.vcxproj/libGLESv2.vcxproj.filters:
        * ANGLE.vcxproj/libGLESv2Common.props:
        * ANGLE.vcxproj/translator_common.vcxproj:
        * ANGLE.vcxproj/translator_common.vcxproj.filters:
        * ANGLE.vcxproj/translator_glsl.vcxproj:
        * ANGLE.vcxproj/translator_glsl.vcxproj.filters:
        * ANGLE.vcxproj/translator_hlsl.vcxproj:
        * ANGLE.vcxproj/translator_hlsl.vcxproj.filters:
        * src/libGLESv2/libGLESv2.def:

2013-11-20  Sergio Correia  <sergio.correia@openbossa.org>

        ANGLE doesn't build with bison 3.0
        https://bugs.webkit.org/show_bug.cgi?id=124642

        Reviewed by Gyuyoung Kim.

        This is a reedition of r154109, now that ANGLE source has been updated
        in r159533.

        * src/compiler/glslang.y: Use %lex-param to set YYLEX_PARAM and stop
        using the deprecated YYID macro.

2013-11-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK build.

        * GNUmakefile.am: Remove duplicated entries.

2013-11-19  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build after the ANGLE update in r159533

        * GNUmakefile.am: Update the source list.

2013-11-19  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Build fix for Mac.

        * src/compiler/glslang_tab.cpp:
        (yysyntax_error):
        (yyerror):
        * src/compiler/glslang_tab.h:
        * src/compiler/preprocessor/ExpressionParser.cpp:
        (yysyntax_error):

2013-11-19  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Prospective build fix for GTK port following r159533.

        * GNUmakefile.am:

2013-11-19  Roger Fong  <roger_fong@apple.com>

        Update ANGLE sources.
        https://bugs.webkit.org/show_bug.cgi?id=124615.

        Reviewed by Dean Jackson.

        Update ANGLE to checkout a60e0805721f62c28a55faf2df74472cc5fc91fc.
        Modify xcodeproj files as necessary, update plist.
        Stop using DerivedSources.make and just use the generated sources that are checked into ANGLE.
        Add a note to bison generated files indicating that Apple elects to distribute said files under the BSD license: 
        ExpressionParser.cpp, glslang_tab.cpp, glslang_tab.h.

        * ANGLE.plist:
        * ANGLE.xcodeproj/project.pbxproj:
        * DerivedSources.make: Removed.
        * include/EGL/egl.h:
        * include/EGL/eglsoftlinking.h: Removed.
        * include/GLES2/gl2.h:
        * include/GLES2/gl2softlinking.h: Removed.
        * include/GLSLANG/ShaderLang.h:
        * include/KHR/khrplatform.h:
        * src/ANGLE.sln: Added.
        * src/build_angle.gypi:
        * src/common/debug.h:
        * src/common/event_tracer.cpp: Added.
        (gl::TraceGetTraceCategoryEnabledFlag):
        (gl::TraceAddTraceEvent):
        * src/common/event_tracer.h: Added.
        * src/common/version.h:
        * src/compiler/CodeGen.cpp: Added.
        (ConstructCompiler):
        (DeleteCompiler):
        * src/compiler/CodeGenGLSL.cpp: Removed.
        * src/compiler/CodeGenHLSL.cpp: Removed.
        * src/compiler/Common.h:
        (NewPoolTString):
        * src/compiler/Compiler.cpp:
        (TCompiler::Init):
        (TCompiler::compile):
        (TCompiler::InitBuiltInSymbolTable):
        (TCompiler::clearResults):
        (TCompiler::collectVariables):
        * src/compiler/ConstantUnion.h:
        * src/compiler/DetectDiscontinuity.cpp:
        * src/compiler/InfoSink.h:
        * src/compiler/InitializeDll.cpp:
        (InitProcess):
        (DetachProcess):
        * src/compiler/InitializeDll.h:
        * src/compiler/InitializeGLPosition.cpp: Added.
        (InitializeGLPosition::visitAggregate):
        (InitializeGLPosition::insertCode):
        * src/compiler/InitializeGLPosition.h: Added.
        (InitializeGLPosition::InitializeGLPosition):
        (InitializeGLPosition::visitBinary):
        (InitializeGLPosition::visitUnary):
        (InitializeGLPosition::visitSelection):
        (InitializeGLPosition::visitLoop):
        (InitializeGLPosition::visitBranch):
        * src/compiler/InitializeGlobals.h:
        * src/compiler/InitializeParseContext.cpp:
        (InitializeParseContextIndex):
        (FreeParseContextIndex):
        (SetGlobalParseContext):
        (GetGlobalParseContext):
        * src/compiler/InitializeParseContext.h:
        * src/compiler/IntermTraverse.cpp:
        (TIntermSymbol::traverse):
        (TIntermConstantUnion::traverse):
        (TIntermBinary::traverse):
        (TIntermUnary::traverse):
        (TIntermAggregate::traverse):
        (TIntermSelection::traverse):
        (TIntermLoop::traverse):
        (TIntermBranch::traverse):
        * src/compiler/Intermediate.cpp:
        (GetHigherPrecision):
        (getOperatorString):
        (TIntermLoop::replaceChildNode):
        (TIntermBranch::replaceChildNode):
        (TIntermBinary::replaceChildNode):
        (TIntermUnary::replaceChildNode):
        (TIntermAggregate::replaceChildNode):
        (TIntermSelection::replaceChildNode):
        (TIntermOperator::isAssignment):
        (TIntermediate::promoteConstantUnion):
        * src/compiler/MapLongVariableNames.cpp:
        * src/compiler/MapLongVariableNames.h:
        * src/compiler/NodeSearch.h: Added.
        (sh::NodeSearchTraverser::NodeSearchTraverser):
        (sh::NodeSearchTraverser::found):
        (sh::NodeSearchTraverser::search):
        (sh::FindDiscard::visitBranch):
        (sh::FindSideEffectRewriting::visitBinary):
        * src/compiler/OutputGLSLBase.cpp:
        (TOutputGLSLBase::visitSelection):
        (TOutputGLSLBase::visitAggregate):
        (TOutputGLSLBase::visitLoop):
        * src/compiler/OutputGLSLBase.h:
        * src/compiler/OutputHLSL.cpp:
        (sh::OutputHLSL::OutputHLSL):
        (sh::OutputHLSL::header):
        (sh::OutputHLSL::visitBinary):
        (sh::OutputHLSL::visitSelection):
        (sh::OutputHLSL::visitBranch):
        (sh::OutputHLSL::handleExcessiveLoop):
        (sh::OutputHLSL::addConstructor):
        * src/compiler/OutputHLSL.h:
        * src/compiler/ParseContext.cpp: Added.
        (TParseContext::parseVectorFields):
        (TParseContext::parseMatrixFields):
        (TParseContext::recover):
        (TParseContext::error):
        (TParseContext::warning):
        (TParseContext::trace):
        (TParseContext::assignError):
        (TParseContext::unaryOpError):
        (TParseContext::binaryOpError):
        (TParseContext::precisionErrorCheck):
        (TParseContext::lValueErrorCheck):
        (TParseContext::constErrorCheck):
        (TParseContext::integerErrorCheck):
        (TParseContext::globalErrorCheck):
        (TParseContext::reservedErrorCheck):
        (TParseContext::constructorErrorCheck):
        (TParseContext::voidErrorCheck):
        (TParseContext::boolErrorCheck):
        (TParseContext::samplerErrorCheck):
        (TParseContext::structQualifierErrorCheck):
        (TParseContext::parameterSamplerErrorCheck):
        (TParseContext::containsSampler):
        (TParseContext::arraySizeErrorCheck):
        (TParseContext::arrayQualifierErrorCheck):
        (TParseContext::arrayTypeErrorCheck):
        (TParseContext::arrayErrorCheck):
        (TParseContext::nonInitConstErrorCheck):
        (TParseContext::nonInitErrorCheck):
        (TParseContext::paramErrorCheck):
        (TParseContext::extensionErrorCheck):
        (TParseContext::supportsExtension):
        (TParseContext::isExtensionEnabled):
        (TParseContext::findFunction):
        (TParseContext::executeInitializer):
        (TParseContext::areAllChildConst):
        (TParseContext::addConstructor):
        (TParseContext::foldConstConstructor):
        (TParseContext::constructBuiltIn):
        (TParseContext::constructStruct):
        (TParseContext::addConstVectorNode):
        (TParseContext::addConstMatrixNode):
        (TParseContext::addConstArrayNode):
        (TParseContext::addConstStruct):
        (TParseContext::enterStructDeclaration):
        (TParseContext::exitStructDeclaration):
        (TParseContext::structNestingErrorCheck):
        (TParseContext::addIndexExpression):
        (PaParseStrings):
        * src/compiler/ParseContext.h: Added.
        (TParseContext::TParseContext):
        (TParseContext::numErrors):
        (TParseContext::infoSink):
        (TParseContext::pragma):
        (TParseContext::extensionBehavior):
        * src/compiler/ParseHelper.cpp: Removed.
        * src/compiler/ParseHelper.h: Removed.
        * src/compiler/PoolAlloc.cpp:
        (InitializePoolIndex):
        (FreePoolIndex):
        (GetGlobalPoolAllocator):
        (SetGlobalPoolAllocator):
        * src/compiler/PoolAlloc.h:
        (pool_allocator::pool_allocator):
        * src/compiler/SearchSymbol.h:
        * src/compiler/ShHandle.h:
        (TCompiler::getVaryings):
        * src/compiler/ShaderLang.cpp:
        (checkVariableMaxLengths):
        (ShInitialize):
        (ShFinalize):
        (ShConstructCompiler):
        (ShCompile):
        (ShGetInfo):
        (ShGetVariableInfo):
        (ShCheckVariablesWithinPackingLimits):
        * src/compiler/SymbolTable.cpp:
        (TSymbolTable::~TSymbolTable):
        * src/compiler/SymbolTable.h:
        (TSymbol::TSymbol):
        (TSymbolTableLevel::insert):
        (TSymbolTable::push):
        (TSymbolTable::pop):
        (TSymbolTable::findBuiltIn):
        (TSymbolTable::relateToExtension):
        (TSymbolTable::setDefaultPrecision):
        (TSymbolTable::getDefaultPrecision):
        (TSymbolTable::supportsPrecision):
        * src/compiler/Types.h:
        (NewPoolTFieldList):
        (TType::TType):
        (TType::setNominalSize):
        (TPublicType::setAggregate):
        * src/compiler/UnfoldShortCircuit.cpp:
        (sh::UnfoldShortCircuit::visitBinary):
        (sh::UnfoldShortCircuit::visitSelection):
        * src/compiler/UnfoldShortCircuit.h:
        * src/compiler/UnfoldShortCircuitAST.cpp: Added.
        (UnfoldShortCircuitAST::visitBinary):
        (UnfoldShortCircuitAST::updateTree):
        * src/compiler/UnfoldShortCircuitAST.h: Added.
        (UnfoldShortCircuitAST::UnfoldShortCircuitAST):
        (UnfoldShortCircuitAST::NodeUpdateEntry::NodeUpdateEntry):
        * src/compiler/Uniform.cpp:
        (sh::Uniform::Uniform):
        * src/compiler/Uniform.h:
        * src/compiler/ValidateLimitations.cpp:
        (ValidateLimitations::validateFunctionCall):
        (ValidateLimitations::validateOperation):
        * src/compiler/VariableInfo.cpp:
        (TVariableInfo::TVariableInfo):
        (CollectVariables::CollectVariables):
        (CollectVariables::visitSymbol):
        (CollectVariables::visitAggregate):
        * src/compiler/VariableInfo.h:
        * src/compiler/debug.cpp:
        * src/compiler/depgraph/DependencyGraph.cpp:
        * src/compiler/depgraph/DependencyGraphBuilder.cpp:
        (TDependencyGraphBuilder::visitBinary):
        * src/compiler/generate_parser.sh:
        * src/compiler/glslang.l:
        * src/compiler/glslang.y:
        * src/compiler/glslang_lex.cpp:
        (input):
        (yyerror):
        (int_constant):
        (float_constant):
        (glslang_scan):
        * src/compiler/glslang_tab.cpp:
        (yysyntax_error):
        (glslang_parse):
        * src/compiler/glslang_tab.h:
        * src/compiler/intermediate.h:
        (TIntermSymbol::hasSideEffects):
        (TIntermSymbol::replaceChildNode):
        (TIntermConstantUnion::hasSideEffects):
        (TIntermConstantUnion::getIConst):
        (TIntermConstantUnion::getFConst):
        (TIntermConstantUnion::getBConst):
        (TIntermConstantUnion::replaceChildNode):
        (TIntermOperator::hasSideEffects):
        (TIntermBinary::hasSideEffects):
        (TIntermUnary::hasSideEffects):
        (TIntermAggregate::hasSideEffects):
        (TIntermSelection::hasSideEffects):
        (TIntermTraverser::~TIntermTraverser):
        (TIntermTraverser::incrementDepth):
        (TIntermTraverser::decrementDepth):
        (TIntermTraverser::getParentNode):
        * src/compiler/localintermediate.h:
        * src/compiler/parseConst.cpp:
        * src/compiler/preprocessor/ExpressionParser.cpp:
        (yy_symbol_print):
        (yy_stack_print):
        (yy_reduce_print):
        (yystrlen):
        (yystpcpy):
        (yytnamerr):
        (yysyntax_error):
        (yydestruct):
        (yyparse):
        * src/compiler/preprocessor/ExpressionParser.y:
        * src/compiler/preprocessor/Preprocessor.cpp:
        (pp::Preprocessor::setMaxTokenLength):
        (pp::Preprocessor::lex):
        * src/compiler/preprocessor/Preprocessor.h:
        * src/compiler/preprocessor/Tokenizer.cpp:
        (pp::Tokenizer::Tokenizer):
        (pp::Tokenizer::lex):
        * src/compiler/preprocessor/Tokenizer.h:
        (pp::Tokenizer::setMaxTokenLength):
        * src/compiler/preprocessor/Tokenizer.l:
        * src/compiler/preprocessor/generate_parser.sh:
        * src/compiler/preprocessor/preprocessor.vcxproj: Added.
        * src/compiler/preprocessor/preprocessor.vcxproj.filters: Added.
        * src/compiler/timing/RestrictFragmentShaderTiming.cpp:
        * src/compiler/translator.vcxproj: Added.
        * src/compiler/translator.vcxproj.filters: Added.
        * src/compiler/util.cpp:
        (atof_clamp):
        (atoi_clamp):
        * src/compiler/util.h:
        * src/libEGL/Surface.cpp:
        (egl::Surface::checkForOutOfDateSwapChain):
        * src/libEGL/libEGL.cpp:
        * src/libEGL/libEGL.rc:
        * src/libEGL/libEGL.vcxproj: Added.
        * src/libEGL/libEGL.vcxproj.filters: Added.
        * src/libGLESv2/Buffer.cpp:
        (gl::Buffer::bufferData):
        (gl::Buffer::bufferSubData):
        (gl::Buffer::size):
        (gl::Buffer::getIndexRangeCache):
        * src/libGLESv2/Buffer.h:
        * src/libGLESv2/Context.cpp:
        (gl::Context::applyTextures):
        (gl::Context::getBoundFramebufferTextureSerials):
        * src/libGLESv2/Context.h:
        (gl::Context::getRenderer):
        * src/libGLESv2/Framebuffer.h:
        * src/libGLESv2/ProgramBinary.cpp:
        (gl::DiscardWorkaround):
        (gl::ProgramBinary::load):
        (gl::ProgramBinary::link):
        (gl::ProgramBinary::linkAttributes):
        (gl::AttributeSorter::AttributeSorter):
        (gl::ProgramBinary::initAttributesByLayout):
        (gl::ProgramBinary::sortAttributesByLayout):
        * src/libGLESv2/ProgramBinary.h:
        * src/libGLESv2/Renderbuffer.cpp:
        (gl::RenderbufferTexture2D::getTextureSerial):
        (gl::RenderbufferTextureCubeMap::getTextureSerial):
        (gl::Renderbuffer::getTextureSerial):
        * src/libGLESv2/Renderbuffer.h:
        (gl::RenderbufferStorage::getTextureSerial):
        * src/libGLESv2/Shader.cpp:
        (gl::Shader::parseVaryings):
        (gl::Shader::uncompile):
        * src/libGLESv2/Shader.h:
        * src/libGLESv2/Texture.cpp:
        (gl::TextureCubeMap::storage):
        * src/libGLESv2/Uniform.cpp:
        (gl::Uniform::Uniform):
        (gl::Uniform::~Uniform):
        (gl::Uniform::isArray):
        (gl::Uniform::elementCount):
        * src/libGLESv2/Uniform.h:
        * src/libGLESv2/constants.h: Removed.
        * src/libGLESv2/libGLESv2.def:
        * src/libGLESv2/libGLESv2.rc:
        * src/libGLESv2/libGLESv2.vcxproj: Added.
        * src/libGLESv2/libGLESv2.vcxproj.filters: Added.
        * src/libGLESv2/precompiled.h:
        * src/libGLESv2/renderer/Image11.cpp:
        (rx::Image11::generateMipmap):
        (rx::Image11::loadData):
        (rx::Image11::loadCompressedData):
        (rx::Image11::copy):
        (rx::Image11::createStagingTexture):
        (rx::Image11::map):
        * src/libGLESv2/renderer/Image11.h:
        * src/libGLESv2/renderer/IndexBuffer.cpp:
        (rx::IndexBufferInterface::mapBuffer):
        (rx::StaticIndexBufferInterface::getIndexRangeCache):
        * src/libGLESv2/renderer/IndexBuffer.h:
        * src/libGLESv2/renderer/IndexBuffer11.cpp:
        (rx::IndexBuffer11::mapBuffer):
        * src/libGLESv2/renderer/IndexDataManager.cpp:
        (rx::IndexDataManager::prepareIndexData):
        (rx::IndexDataManager::getCountingIndices):
        * src/libGLESv2/renderer/IndexRangeCache.cpp: Added.
        (rx::IndexRangeCache::addRange):
        (rx::IndexRangeCache::invalidateRange):
        (rx::IndexRangeCache::findRange):
        (rx::IndexRangeCache::clear):
        (rx::IndexRangeCache::IndexRange::IndexRange):
        (rx::IndexRangeCache::IndexRange::operator<):
        (rx::IndexRangeCache::IndexBounds::IndexBounds):
        * src/libGLESv2/renderer/IndexRangeCache.h: Added.
        * src/libGLESv2/renderer/InputLayoutCache.cpp:
        (rx::InputLayoutCache::InputLayoutCache):
        (rx::InputLayoutCache::clear):
        (rx::InputLayoutCache::markDirty):
        (rx::InputLayoutCache::applyVertexBuffers):
        (rx::InputLayoutCache::hashInputLayout):
        (rx::InputLayoutCache::compareInputLayouts):
        * src/libGLESv2/renderer/InputLayoutCache.h:
        (rx::InputLayoutCache::InputLayoutKey::begin):
        (rx::InputLayoutCache::InputLayoutKey::end):
        * src/libGLESv2/renderer/RenderTarget11.cpp:
        (rx::RenderTarget11::getTexture):
        (rx::RenderTarget11::getRenderTargetView):
        (rx::RenderTarget11::getDepthStencilView):
        (rx::RenderTarget11::getShaderResourceView):
        * src/libGLESv2/renderer/RenderTarget11.h:
        * src/libGLESv2/renderer/Renderer.cpp:
        (rx::Renderer::initializeCompiler):
        * src/libGLESv2/renderer/Renderer.h:
        * src/libGLESv2/renderer/Renderer11.cpp:
        (rx::Renderer11::initialize):
        (rx::Renderer11::applyPrimitiveType):
        (rx::Renderer11::applyRenderTarget):
        (rx::Renderer11::drawLineLoop):
        (rx::Renderer11::drawTriangleFan):
        (rx::Renderer11::applyUniforms):
        (rx::Renderer11::clear):
        (rx::Renderer11::markAllStateDirty):
        (rx::Renderer11::copyImage):
        (rx::Renderer11::compileToExecutable):
        (rx::Renderer11::getRenderTargetResource):
        (rx::Renderer11::blitRenderbufferRect):
        * src/libGLESv2/renderer/Renderer11.h:
        * src/libGLESv2/renderer/Renderer9.cpp:
        (rx::Renderer9::initialize):
        (rx::Renderer9::setViewport):
        (rx::Renderer9::drawLineLoop):
        (rx::Renderer9::compileToExecutable):
        * src/libGLESv2/renderer/Renderer9.h:
        * src/libGLESv2/renderer/SwapChain.h:
        * src/libGLESv2/renderer/SwapChain11.cpp:
        (rx::SwapChain11::resetOffscreenTexture):
        (rx::SwapChain11::reset):
        (rx::SwapChain11::swapRect):
        * src/libGLESv2/renderer/SwapChain9.cpp:
        (rx::convertInterval):
        * src/libGLESv2/renderer/TextureStorage11.cpp:
        (rx::TextureStorage11::IsTextureFormatRenderable):
        (rx::TextureStorage11::generateMipmapLayer):
        (rx::TextureStorage11_Cube::getRenderTarget):
        * src/libGLESv2/renderer/VertexBuffer.cpp:
        (rx::VertexBufferInterface::storeVertexAttributes):
        (rx::VertexBufferInterface::storeRawData):
        (rx::VertexBufferInterface::reserveVertexSpace):
        (rx::StaticVertexBufferInterface::lookupAttribute):
        (rx::StaticVertexBufferInterface::storeVertexAttributes):
        * src/libGLESv2/renderer/VertexBuffer.h:
        * src/libGLESv2/renderer/VertexBuffer11.cpp:
        (rx::VertexBuffer11::getSpaceRequired):
        * src/libGLESv2/renderer/VertexBuffer11.h:
        * src/libGLESv2/renderer/VertexBuffer9.cpp:
        (rx::VertexBuffer9::storeVertexAttributes):
        (rx::VertexBuffer9::getSpaceRequired):
        (rx::VertexBuffer9::requiresConversion):
        (rx::VertexBuffer9::getVertexSize):
        (rx::VertexBuffer9::spaceRequired):
        * src/libGLESv2/renderer/VertexBuffer9.h:
        * src/libGLESv2/renderer/VertexDataManager.cpp:
        (rx::elementsInBuffer):
        (rx::StreamingBufferElementCount):
        (rx::VertexDataManager::prepareVertexData):
        * src/libGLESv2/renderer/VertexDataManager.h:
        * src/libGLESv2/renderer/renderer11_utils.cpp:
        (gl_d3d11::ConvertTextureFormat):
        * src/libGLESv2/renderer/shaders/compiled/clear11vs.h:
        * src/libGLESv2/renderer/shaders/compiled/clearmultiple11ps.h:
        * src/libGLESv2/renderer/shaders/compiled/clearsingle11ps.h:
        * src/libGLESv2/renderer/shaders/compiled/componentmaskps.h:
        * src/libGLESv2/renderer/shaders/compiled/flipyvs.h:
        * src/libGLESv2/renderer/shaders/compiled/luminanceps.h:
        * src/libGLESv2/renderer/shaders/compiled/passthrough11vs.h:
        * src/libGLESv2/renderer/shaders/compiled/passthroughlum11ps.h:
        * src/libGLESv2/renderer/shaders/compiled/passthroughlumalpha11ps.h:
        * src/libGLESv2/renderer/shaders/compiled/passthroughps.h:
        * src/libGLESv2/renderer/shaders/compiled/passthroughrgb11ps.h:
        * src/libGLESv2/renderer/shaders/compiled/passthroughrgba11ps.h:
        * src/libGLESv2/renderer/shaders/compiled/standardvs.h:
        * src/libGLESv2/renderer/shaders/generate_shaders.bat:
        * src/libGLESv2/utilities.cpp:
        (gl::ComputeTypeSize):
        * src/libGLESv2/utilities.h:
        * src/third_party/murmurhash/MurmurHash3.cpp:
        (rotl32):
        (rotl64):
        (getblock):
        (fmix):
        (MurmurHash3_x86_32):
        (MurmurHash3_x86_128):
        (MurmurHash3_x64_128):
        * src/third_party/murmurhash/MurmurHash3.h:
        * src/third_party/trace_event: Added.
        * src/third_party/trace_event/trace_event.h: Added.
        (gl::TraceEvent::TraceID::TraceID):
        (gl::TraceEvent::TraceID::data):
        (gl::TraceEvent::TraceStringWithCopy::TraceStringWithCopy):
        (gl::TraceEvent::TraceStringWithCopy::operator const char* ):
        (gl::TraceEvent::setTraceValue):
        (gl::TraceEvent::addTraceEvent):
        (gl::TraceEvent::TraceEndOnScopeClose::TraceEndOnScopeClose):
        (gl::TraceEvent::TraceEndOnScopeClose::~TraceEndOnScopeClose):
        (gl::TraceEvent::TraceEndOnScopeClose::initialize):
        (gl::TraceEvent::TraceEndOnScopeClose::addEventIfEnabled):
        (gl::TraceEvent::SamplingStateScope::SamplingStateScope):
        (gl::TraceEvent::SamplingStateScope::~SamplingStateScope):
        (gl::TraceEvent::SamplingStateScope::current):
        (gl::TraceEvent::SamplingStateScope::set):

2013-11-18  Mark Rowe  <mrowe@apple.com>

        Use hw.activecpu for determining how many processes to spawn.

        It's documented as the preferred way to determine the number of threads
        or processes to create in a SMP aware application.

        Rubber-stamped by Tim Horton.

        * ANGLE.xcodeproj/project.pbxproj:

2013-11-06  Dean Jackson  <dino@apple.com>

        kTraceBufferLen is unused in default builds
        https://bugs.webkit.org/show_bug.cgi?id=123941
        <rdar://problem/15409804>

        Reviewed by Tim Horton.

        kTraceBufferLen is not used in debug.cpp if TRACE_ENABLED is
        not defined. This causes a warning in newer builds of clang.
        For now, skip warnings on unused variables until we
        update from ANGLE.

        * src/compiler/debug.cpp: Add unused-variable ignore pragma.

2013-10-24  Mark Rowe  <mrowe@apple.com>

        Remove references to OS X 10.7 from Xcode configuration settings.

        Now that we're not building for OS X 10.7 they're no longer needed.

        Reviewed by Anders Carlsson.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2013-10-24  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/15312643> Prepare for the mysterious future.

        Reviewed by David Kilzer.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2013-10-10  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/13341666> WebKit should always build against an SDK.

        Have all projects default to building against the OS X Internal SDK for the Production
        configuration. For the Debug and Release configurations, look for UseInternalSDK.xcconfig
        to determine whether the OS X Internal SDK should be used. If not, use the normal OS X SDK.

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2013-10-08  Alex Christensen  <achristensen@webkit.org>

        Generate pdb files for debugging ANGLE DLLs.
        https://bugs.webkit.org/show_bug.cgi?id=122530

        Reviewed by Brent Fulgham.

        * ANGLE.vcxproj/libEGLCommon.props:
        * ANGLE.vcxproj/libGLESv2Common.props:
        Generate debug information.

2013-10-03  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/15116673> [mac] Build failure when the source directory is not named ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=122307

        Reviewed by Mark Rowe.

        * ANGLE.xcodeproj/project.pbxproj: Ensure that the symlink to SRCROOT in
        DerivedSources/ANGLE is named ANGLE.

2013-09-29  Darin Adler  <darin@apple.com>

        Take some Xcode advice about turning on additional warnings in ANGLE and gtest
        https://bugs.webkit.org/show_bug.cgi?id=122087

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Add some of the warnings that Xcode 5 suggested.
        * src/compiler/preprocessor/Tokenizer.l: Defined YY_NO_INPUT so we don't compile
        an unused function and get a warning.

2013-09-29  Darin Adler  <darin@apple.com>

        Use RenderElement instead of RenderObject in many places
        https://bugs.webkit.org/show_bug.cgi?id=122078

        Reviewed by Andreas Kling.

        * ANGLE.xcodeproj/project.pbxproj: Let Xcode do its thing to this file.

2013-09-24  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/14971518> WebKit should build against the Xcode default toolchain when targeting OS X 10.8

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2013-09-06  peavo@outlook.com  <peavo@outlook.com>

        [Win][WebGL] WebGL rendering is slow.
        https://bugs.webkit.org/show_bug.cgi?id=120841

        Reviewed by Brent Fulgham.

        Rendering WebGL content is slow on Windows, because lots of debug information is written to debug.txt.

        * ANGLE.vcxproj/ANGLERelease.props: Disable logging in release builds.

2013-09-05  Dan Bernstein  <mitz@apple.com>

        INSTALL_PATH_PREFIX is used even when not installing
        https://bugs.webkit.org/show_bug.cgi?id=120818

        Reviewed by Darin Adler.

        * Configurations/ANGLE.xcconfig: Changed the definition of PRIVATE_HEADERS_FOLDER_PATH
        to include INSTALL_PATH_PREFIX only when installing.

2013-08-17  David Kilzer  <ddkilzer@apple.com>

        ANGLE fails to build with trunk clang: error: 'register' storage class specifier is deprecated [-Werror,-Wdeprecated-register]
        <http://webkit.org/b/119931>
        <rdar://problem/14763822>

        Reviewed by Darin Adler.

        * src/compiler/glslang.l:
        * src/compiler/glslang_lex.cpp:
        * src/compiler/preprocessor/Tokenizer.cpp:
        * src/compiler/preprocessor/Tokenizer.l:
        Add pragma statements to ignore -Wdeprecated-register warnings
        in generated code.  Also ignore -Wunknown-pragmas so this
        doesn't cause a build failure in older versions of clang.

2013-08-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r153749.
        http://trac.webkit.org/changeset/153749
        https://bugs.webkit.org/show_bug.cgi?id=119892

        The bison generation of the glslang* files has now been fixed. (Requested by zdobersek on #webkit).

        * GNUmakefile.am: Preserve the libANGLE.la dependency on the ANGLE's GNUmakefile.am.

2013-08-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        ANGLE doesn't build with bison 3.0
        https://bugs.webkit.org/show_bug.cgi?id=119798

        Reviewed by Antti Koivisto.

        Make glslang.y compatible with bison 3.0, by using %lex-param
        to set YYLEX_PARAM and getting rid of useless YYID macro.

        * src/compiler/glslang.y:

2013-08-09  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt] Buidfix after r153664. Adding ANGLE_WEBKIT_WIN definition.
        https://bugs.webkit.org/show_bug.cgi?id=119577

        Reviewed by Allan Sandfeld Jensen.

        * Target.pri:

2013-08-08  Alex Christensen  <achristensen@apple.com>

        Link to correct DirectX libraries for Win64 ANGLE build.
        https://bugs.webkit.org/show_bug.cgi?id=119600

        Reviewed by Brent Fulgham.

        * ANGLE.vcxproj/DirectX32.props: Added with x86 DirectX library directory.
        * ANGLE.vcxproj/DirectX64.props: Added with x64 DirectX library directory.
        * ANGLE.vcxproj/libEGL.vcxproj:
        * ANGLE.vcxproj/libGLESv2.vcxproj:
        Use DirectX32.props and DirectX64.props.
        * ANGLE.vcxproj/libEGLCommon.props:
        * ANGLE.vcxproj/libGLESv2Common.props:
        Removed DirectX library directory.

2013-07-23  David Farler  <dfarler@apple.com>

        Provide optional OTHER_CFLAGS, OTHER_CPPFLAGS, OTHER_LDFLAGS additions for building with ASAN
        https://bugs.webkit.org/show_bug.cgi?id=117762

        Reviewed by Mark Rowe.

        * Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS.

2013-08-06  Zan Dobersek  <zdobersek@igalia.com>

        webkit-gtk fails to build with bison-3.0
        https://bugs.webkit.org/show_bug.cgi?id=119373

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Stop relying on generated glslang_tab.(cpp|h) and glslang.cpp sources as Bison 3.0
        produces non-compilable source code. Instead, compile these pregenerated files as they're included in
        the tree. Originally, the ANGLE source tree provides these files as generated by Bison 2.7, but they're
        at the moment regenerated with Bison 2.3 when the third-party ANGLE source is being updated.

2013-08-05  Alex Christensen  <achristensen@apple.com>

        Added optimizations to Windows ANGLE builds.
        https://bugs.webkit.org/show_bug.cgi?id=119500

        Reviewed by Brent Fulgham.

        * ANGLE.vcxproj/ANGLERelease.props: Added.
        * ANGLE.vcxproj/libEGL.vcxproj:
        * ANGLE.vcxproj/libGLESv2.vcxproj:
        * ANGLE.vcxproj/preprocessor.vcxproj:
        * ANGLE.vcxproj/translator_common.vcxproj:
        * ANGLE.vcxproj/translator_glsl.vcxproj:
        * ANGLE.vcxproj/translator_hlsl.vcxproj:
        Use ANGLERelease.props for Release, Release_WinCairo, and Production configurations.

2013-08-02  Alex Christensen  <achristensen@apple.com>

        Soft link ANGLE on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=119452

        Reviewed by Dean Jackson.

        * ANGLE.vcxproj/libEGL.vcxproj:
        * ANGLE.vcxproj/libEGL.vcxproj.filters:
        * ANGLE.vcxproj/libGLESv2.vcxproj:
        * ANGLE.vcxproj/libGLESv2.vcxproj.filters:
        Added soft linking headers.
        * ANGLE.vcxproj/libEGLCommon.props:
        * ANGLE.vcxproj/libGLESv2Common.props:
        * ANGLE.vcxproj/translatorCommon.props:
        Added ANGLE_WEBKIT_WIN macro definition for egl.h and gl2.h.
        * include/EGL/egl.h:
        * include/GLES2/gl2.h:
        Conditionally include soft linking headers based on ANGLE_WEBKIT_WIN macro.
        * include/EGL/eglsoftlinking.h: Added.
        * include/GLES2/gl2softlinking.h: Added.

2013-08-01  Alex Christensen  <achristensen@apple.com>

        Fixed wrong static_casting in ANGLE from r153064.
        https://bugs.webkit.org/show_bug.cgi?id=119296

        Reviewed by Dean Jackson.

        * src/compiler/Intermediate.cpp:
        (TIntermediate::promoteConstantUnion):
        Undid erroneous static_cast change.
        * src/compiler/intermediate.h:
        (TIntermConstantUnion::getIConst):
        (TIntermConstantUnion::getFConst):
        (TIntermConstantUnion::getBConst):
        Made getters use size_t instead of int.

2013-07-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add missing header files to compilation.

2013-07-29  Alex Christensen  <achristensen@apple.com>

        Separated translator into preprocessor, translator_common,
        translator_hlsl (for libGLESv2), and translator_glsl
        (for ANGLEWebKitBridge).
        https://bugs.webkit.org/show_bug.cgi?id=119221

        Reviewed by Brent Fulgham.

        * ANGLE.vcxproj/ANGLEGenerated.vcxproj:
        Removed unused preprocessor definitions.
        * ANGLE.vcxproj/libEGL.vcxproj:
        * ANGLE.vcxproj/libGLESv2.vcxproj:
        Removed dependency on removed translator project.
        * ANGLE.vcxproj/libGLESv2Common.props:
        Link to translator_hlsl libraries.
        * ANGLE.vcxproj/preprocessor.vcxproj: Added.
        * ANGLE.vcxproj/preprocessor.vcxproj.filters: Added.
        * ANGLE.vcxproj/translator.vcxproj: Removed.
        * ANGLE.vcxproj/translator.vcxproj.filters: Removed.
        * ANGLE.vcxproj/translator_common.vcxproj: Added.
        * ANGLE.vcxproj/translator_common.vcxproj.filters: Added.
        * ANGLE.vcxproj/translator_glsl.vcxproj: Added.
        * ANGLE.vcxproj/translator_glsl.vcxproj.filters: Added.
        * ANGLE.vcxproj/translator_hlsl.vcxproj: Added.
        * ANGLE.vcxproj/translator_hlsl.vcxproj.filters: Added.

2013-07-26  Alex Christensen  <achristensen@apple.com>

        Added module definition file for building libEGL.
        https://bugs.webkit.org/show_bug.cgi?id=119162

        Reviewed by Brent Fulgham.

        * ANGLE.vcxproj/libEGLCommon.props: Added reference to libEGL.def.

2013-07-25  Alex Christensen  <achristensen@apple.com>

        Made Windows build system for ANGLE and removed existing broken build system.
        Removed empty src/libGLESv2/shaders directory and old README files.
        https://bugs.webkit.org/show_bug.cgi?id=119103

        Reviewed by Brent Fulgham.

        * ANGLE.vcxproj: Added.
        * ANGLE.vcxproj/ANGLEGenerated.vcxproj: Added.
        * ANGLE.vcxproj/ANGLEGenerated.vcxproj.filters: Added.
        * ANGLE.vcxproj/libEGL.vcxproj: Added.
        * ANGLE.vcxproj/libEGL.vcxproj.filters: Added.
        * ANGLE.vcxproj/libEGLCommon.props: Added.
        * ANGLE.vcxproj/libGLESv2.vcxproj: Added.
        * ANGLE.vcxproj/libGLESv2.vcxproj.filters: Added.
        * ANGLE.vcxproj/libGLESv2Common.props: Added.
        * ANGLE.vcxproj/translator.vcxproj: Added.
        * ANGLE.vcxproj/translator.vcxproj.filters: Added.
        * ANGLE.vcxproj/translatorCommon.props: Added.
        * src/ANGLE.sln: Removed.
        * src/compiler/preprocessor/preprocessor.vcxproj: Removed.
        * src/compiler/preprocessor/preprocessor.vcxproj.filters: Removed.
        * src/compiler/translator_common.vcxproj: Removed.
        * src/compiler/translator_common.vcxproj.filters: Removed.
        * src/compiler/translator_hlsl.vcxproj: Removed.
        * src/compiler/translator_hlsl.vcxproj.filters: Removed.
        * src/libEGL/README: Removed.
        * src/libEGL/libEGL.vcxproj: Removed.
        * src/libEGL/libEGL.vcxproj.filters: Removed.
        * src/libGLESv2/README: Removed.
        * src/libGLESv2/libGLESv2.vcxproj: Removed.
        * src/libGLESv2/libGLESv2.vcxproj.filters: Removed.
        * src/libGLESv2/shaders: Removed.

2013-07-24  Alex Christensen  <achristensen@apple.com>

        Generate derived files in ANGLE at build time rather than when updating from upstream.
        https://bugs.webkit.org/show_bug.cgi?id=118872

        Reviewed by Mark Rowe.

        * ANGLE.xcodeproj/project.pbxproj: Made Derived Sources target which calls DerivedSources.make,
        moved generated files into Derived Sources group.
        * DerivedSources.make: Added.

2013-07-24  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Setting the svn:eol-style=native property on the ANGLE.sln file.

        * src/ANGLE.sln: Added property svn:eol-style.

2013-07-24  Gabor Abraham  <abrhm@inf.u-szeged.hu>

        [Qt] Buildfix after r153064. Add Uniform files to the Target.pri.

        Reviewed by Csaba Osztrogonác.

        * Target.pri:

2013-07-23  Alex Christensen  <achristensen@apple.com>

        Updated ANGLE to latest git commit (047373aa3eb408be62be52ade840fa5f11e72337).
        Added missing ANGLE files except unused tests, extensions, samples, build, and .git directories.
        Ran Bison after making some changes to fix compile errors (see below).

        https://bugs.webkit.org/show_bug.cgi?id=118550

        Reviewed by Dean Jackson.

        * ANGLE.plist: Updated from svn to git.
        * ANGLE.xcodeproj/project.pbxproj: Renamed DetectRecursion to DetectCallDepth.
        * AUTHORS: Added.
        * CONTRIBUTORS: Added.
        * DEPS: Added.
        * GNUmakefile.am: Renamed DetectRecursion to DetectCallDepth and added Uniform.cpp.
        * LICENSE: Added.
        * README.chromium: Added.
        * Target.pri: Renamed DetectRecursion to DetectCallDepth.
        * codereview.settings: Added.
        * include/EGL/eglext.h:
        * include/GLES2/gl2ext.h:
        * include/GLSLANG/ShaderLang.h:
        * src/ANGLE.sln: Added.
        * src/build_angle.gyp: Added.
        * src/build_angle.gypi: Added.
        * src/common/RefCountObject.cpp:
        * src/common/angleutils.h:
        (ArraySize):
        (SafeRelease):
        * src/common/debug.cpp:
        * src/common/debug.h:
        * src/common/system.h:
        * src/common/version.h:
        * src/compiler/64bit-lexer-safety.patch: Added.
        * src/compiler/BaseTypes.h:
        (getQualifierString):
        * src/compiler/CodeGenHLSL.cpp:
        (ConstructCompiler):
        * src/compiler/Common.h:
        * src/compiler/Compiler.cpp:
        (TCompiler::TCompiler):
        (TCompiler::Init):
        (TCompiler::compile):
        (TCompiler::InitBuiltInSymbolTable):
        (TCompiler::detectCallDepth):
        (TCompiler::limitExpressionComplexity):
        (TCompiler::getResources):
        * src/compiler/ConstantUnion.h:
        (ConstantUnion::ConstantUnion):
        * src/compiler/DetectCallDepth.cpp: Added.
        (DetectCallDepth::FunctionNode::FunctionNode):
        (DetectCallDepth::FunctionNode::getName):
        (DetectCallDepth::FunctionNode::addCallee):
        (DetectCallDepth::FunctionNode::detectCallDepth):
        (DetectCallDepth::FunctionNode::reset):
        (DetectCallDepth::DetectCallDepth):
        (DetectCallDepth::~DetectCallDepth):
        (DetectCallDepth::visitAggregate):
        (DetectCallDepth::checkExceedsMaxDepth):
        (DetectCallDepth::resetFunctionNodes):
        (DetectCallDepth::detectCallDepthForFunction):
        (DetectCallDepth::detectCallDepth):
        (DetectCallDepth::findFunctionByName):
        * src/compiler/DetectCallDepth.h: Added.
        (DetectCallDepth::getInfoSink):
        * src/compiler/DetectRecursion.cpp: Removed.
        * src/compiler/DetectRecursion.h: Removed.
        * src/compiler/Diagnostics.cpp:
        (TDiagnostics::writeInfo):
        * src/compiler/ForLoopUnroll.cpp:
        (ForLoopUnroll::evaluateIntConstant):
        * src/compiler/InfoSink.cpp:
        (TInfoSinkBase::prefix):
        (TInfoSinkBase::location):
        (TInfoSinkBase::message):
        * src/compiler/InfoSink.h:
        * src/compiler/Initialize.cpp:
        (InsertBuiltInFunctions):
        (IdentifyBuiltIns):
        (InitExtensionBehavior):
        * src/compiler/Initialize.h:
        * src/compiler/Intermediate.cpp:
        (TIntermediate::addSymbol):
        (TIntermediate::addBinaryMath):
        (TIntermediate::addAssign):
        (TIntermediate::addIndex):
        (TIntermediate::addUnaryMath):
        (TIntermediate::setAggregateOperator):
        (TIntermediate::addConversion):
        (TIntermediate::growAggregate):
        (TIntermediate::makeAggregate):
        (TIntermediate::addSelection):
        (TIntermediate::addComma):
        (TIntermediate::addConstantUnion):
        (TIntermediate::addSwizzle):
        (TIntermediate::addLoop):
        (TIntermediate::addBranch):
        (TIntermUnary::promote):
        (TIntermBinary::promote):
        (CompareStruct):
        (CompareStructure):
        (TIntermConstantUnion::fold): Added implied static_casts to fix compiling errors on Mac.
        (TIntermediate::promoteConstantUnion):
        * src/compiler/OutputGLSL.cpp:
        (TOutputGLSL::visitSymbol):
        * src/compiler/OutputGLSL.h:
        * src/compiler/OutputGLSLBase.cpp:
        (TOutputGLSLBase::writeVariableType):
        (TOutputGLSLBase::writeConstantUnion):
        (TOutputGLSLBase::visitBinary):
        (TOutputGLSLBase::visitAggregate):
        (TOutputGLSLBase::getTypeName):
        (TOutputGLSLBase::structDeclared):
        (TOutputGLSLBase::declareStruct):
        * src/compiler/OutputGLSLBase.h:
        * src/compiler/OutputHLSL.cpp:
        (sh::OutputHLSL::OutputHLSL):
        (sh::OutputHLSL::getUniforms):
        (sh::OutputHLSL::header):
        (sh::OutputHLSL::visitSymbol):
        (sh::OutputHLSL::visitBinary):
        (sh::OutputHLSL::visitAggregate):
        (sh::OutputHLSL::visitSelection):
        (sh::OutputHLSL::visitLoop):
        (sh::OutputHLSL::handleExcessiveLoop):
        (sh::OutputHLSL::argumentString):
        (sh::OutputHLSL::typeString):
        (sh::OutputHLSL::textureString):
        (sh::OutputHLSL::initializer):
        (sh::OutputHLSL::addConstructor):
        (sh::OutputHLSL::writeConstantUnion):
        (sh::OutputHLSL::decorateUniform):
        (sh::OutputHLSL::decorateField):
        (sh::OutputHLSL::registerString):
        (sh::OutputHLSL::samplerRegister):
        (sh::OutputHLSL::uniformRegister):
        (sh::OutputHLSL::declareUniform):
        (sh::OutputHLSL::glVariableType):
        (sh::OutputHLSL::glVariablePrecision):
        * src/compiler/OutputHLSL.h:
        * src/compiler/ParseHelper.cpp:
        (TParseContext::parseVectorFields):
        (TParseContext::parseMatrixFields):
        (TParseContext::error):
        (TParseContext::warning):
        (TParseContext::assignError):
        (TParseContext::unaryOpError):
        (TParseContext::binaryOpError):
        (TParseContext::precisionErrorCheck):
        (TParseContext::lValueErrorCheck):
        (TParseContext::globalErrorCheck):
        (TParseContext::reservedErrorCheck):
        (TParseContext::constructorErrorCheck):
        (TParseContext::voidErrorCheck):
        (TParseContext::boolErrorCheck):
        (TParseContext::samplerErrorCheck):
        (TParseContext::structQualifierErrorCheck):
        (TParseContext::parameterSamplerErrorCheck):
        (TParseContext::containsSampler):
        (TParseContext::arraySizeErrorCheck):
        (TParseContext::arrayQualifierErrorCheck):
        (TParseContext::arrayTypeErrorCheck):
        (TParseContext::arrayErrorCheck):
        (TParseContext::nonInitConstErrorCheck):
        (TParseContext::nonInitErrorCheck):
        (TParseContext::paramErrorCheck):
        (TParseContext::extensionErrorCheck):
        (TParseContext::isExtensionEnabled):
        Replaced auto with std::map<std::string, TBehavior>::const_iterator to fix Qt and EFL compiling errors.
        (TParseContext::findFunction):
        (TParseContext::executeInitializer):
        (TParseContext::addConstructor):
        (TParseContext::constructBuiltIn):
        (TParseContext::constructStruct):
        (TParseContext::addConstVectorNode):
        (TParseContext::addConstMatrixNode):
        (TParseContext::addConstArrayNode):
        (TParseContext::addConstStruct):
        (TParseContext::enterStructDeclaration):
        (TParseContext::structNestingErrorCheck):
        (TParseContext::addIndexExpression):
        * src/compiler/ParseHelper.h:
        (TParseContext::TParseContext):
        (TParseContext::pragma):
        * src/compiler/PoolAlloc.cpp:
        (TPoolAllocator::allocate):
        * src/compiler/ShHandle.h:
        (TShHandleBase::getAsTranslatorHLSL):
        * src/compiler/ShaderLang.cpp:
        (ShInitBuiltInResources):
        (ShGetInfoPointer):
        * src/compiler/SymbolTable.cpp:
        (TType::TType):
        (TType::buildMangledName):
        (TType::getObjectSize):
        (TStructure::containsArrays):
        (TStructure::buildMangledName):
        (TStructure::calculateObjectSize):
        (TStructure::calculateDeepestNesting):
        (TSymbolTableLevel::relateToExtension):
        * src/compiler/SymbolTable.h:
        (TSymbol::relateToExtension):
        (TSymbol::getExtension):
        (TVariable::TVariable):
        (TVariable::setQualifier):
        (TVariable::shareConstPointer):
        (TSymbolTableLevel::insert):
        (TSymbolTable::insertConstInt):
        (TSymbolTable::insertBuiltIn):
        * src/compiler/TranslatorHLSL.cpp:
        (TranslatorHLSL::TranslatorHLSL):
        (TranslatorHLSL::translate):
        * src/compiler/TranslatorHLSL.h:
        (TranslatorHLSL::getAsTranslatorHLSL):
        (TranslatorHLSL::getUniforms):
        * src/compiler/Types.h: Removed enum bit fields to fix gcc compiler errors.
        (TField::TField):
        (TField::type):
        (TField::name):
        (NewPoolTFieldList):
        (TStructure::TStructure):
        (TStructure::name):
        (TStructure::fields):
        (TStructure::mangledName):
        (TStructure::objectSize):
        (TStructure::deepestNesting):
        (TType::TType):
        (TType::elementRegisterCount):
        (TType::totalRegisterCount):
        (TType::clearArrayness):
        (TType::getStruct):
        (TType::setStruct):
        (TType::getMangledName):
        (TType::getDeepestStructNesting):
        (TType::isStructureContainingArrays):
        (TPublicType::setBasic):
        * src/compiler/Uniform.cpp: Added.
        (sh::Uniform::Uniform):
        * src/compiler/Uniform.h: Added.
        * src/compiler/VariableInfo.cpp:
        (getUserDefinedVariableInfo):
        * src/compiler/glslang.l:
        * src/compiler/glslang.y: Moved YYLTYPE definition into %union to work with Bison 2.3.
        * src/compiler/glslang_lex.cpp:
        (yy_get_previous_state):
        (yy_try_NUL_trans):
        (yyget_lloc):
        (yyset_lloc):
        (string_input):
        (check_type):
        (reserved_word):
        (glslang_scan):
        * src/compiler/glslang_tab.cpp:
        (yyerror):
        * src/compiler/glslang_tab.h:
        * src/compiler/intermOut.cpp:
        (TOutputTraverser::visitUnary):
        (TOutputTraverser::visitAggregate):
        (TOutputTraverser::visitConstantUnion):
        * src/compiler/intermediate.h:
        (TIntermNode::TIntermNode):
        (TIntermNode::~TIntermNode):
        (TIntermNode::getLine):
        (TIntermNode::setLine):
        (TIntermNode::getAsLoopNode):
        (TIntermTyped::totalRegisterCount):
        (TIntermTyped::elementRegisterCount):
        (TIntermTyped::getArraySize):
        (TIntermConstantUnion::getIConst):
        (TIntermConstantUnion::getFConst):
        (TIntermConstantUnion::getBConst):
        (TIntermAggregate::TIntermAggregate):
        (TIntermTraverser::TIntermTraverser):
        (TIntermTraverser::getMaxDepth):
        (TIntermTraverser::incrementDepth):
        * src/compiler/localintermediate.h:
        * src/compiler/parseConst.cpp:
        (TConstTraverser::visitSymbol):
        (TConstTraverser::visitBinary):
        (TConstTraverser::visitUnary):
        (TConstTraverser::visitAggregate):
        (TConstTraverser::visitSelection):
        (TConstTraverser::visitConstantUnion):
        (TConstTraverser::visitLoop):
        (TConstTraverser::visitBranch):
        (TIntermediate::parseConstTree):
        * src/compiler/preprocessor/64bit-tokenizer-safety.patch: Added.
        * src/compiler/preprocessor/Tokenizer.cpp:
        (yy_get_previous_state):
        (yy_try_NUL_trans):
        * src/compiler/preprocessor/Tokenizer.l:
        * src/compiler/preprocessor/preprocessor.vcxproj: Added.
        * src/compiler/preprocessor/preprocessor.vcxproj.filters: Added.
        * src/compiler/timing/RestrictVertexShaderTiming.cpp:
        (RestrictVertexShaderTiming::visitSymbol):
        * src/compiler/translator_common.vcxproj: Added.
        * src/compiler/translator_common.vcxproj.filters: Added.
        * src/compiler/translator_hlsl.vcxproj: Added.
        * src/compiler/translator_hlsl.vcxproj.filters: Added.
        * src/libEGL/Config.cpp: Added.
        (egl::Config::Config):
        (egl::Config::getHandle):
        (egl::SortConfig::SortConfig):
        (egl::SortConfig::scanForWantedComponents):
        (egl::SortConfig::wantedComponentsSize):
        (egl::SortConfig::operator()):
        (egl::ConfigSet::ConfigSet):
        (egl::ConfigSet::add):
        (egl::ConfigSet::size):
        (egl::ConfigSet::getConfigs):
        (egl::ConfigSet::get):
        * src/libEGL/Config.h: Added.
        * src/libEGL/Display.cpp: Added.
        (egl::Display::getDisplay):
        (egl::Display::Display):
        (egl::Display::~Display):
        (egl::Display::initialize):
        (egl::Display::terminate):
        (egl::Display::getConfigs):
        (egl::Display::getConfigAttrib):
        (egl::Display::createWindowSurface):
        (egl::Display::createOffscreenSurface):
        (egl::Display::createContext):
        (egl::Display::restoreLostDevice):
        (egl::Display::destroySurface):
        (egl::Display::destroyContext):
        (egl::Display::notifyDeviceLost):
        (egl::Display::recreateSwapChains):
        (egl::Display::isInitialized):
        (egl::Display::isValidConfig):
        (egl::Display::isValidContext):
        (egl::Display::isValidSurface):
        (egl::Display::hasExistingWindowSurface):
        (egl::Display::initExtensionString):
        (egl::Display::getExtensionString):
        (egl::Display::initVendorString):
        (egl::Display::getVendorString):
        * src/libEGL/Display.h: Added.
        (egl::Display::getRenderer):
        * src/libEGL/Surface.cpp: Added.
        (egl::Surface::Surface):
        (egl::Surface::~Surface):
        (egl::Surface::initialize):
        (egl::Surface::release):
        (egl::Surface::resetSwapChain):
        (egl::Surface::resizeSwapChain):
        (egl::Surface::swapRect):
        (egl::Surface::getWindowHandle):
        (egl::SurfaceWindowProc):
        (egl::Surface::subclassWindow):
        (egl::Surface::unsubclassWindow):
        (egl::Surface::checkForOutOfDateSwapChain):
        (egl::Surface::swap):
        (egl::Surface::postSubBuffer):
        (egl::Surface::getWidth):
        (egl::Surface::getHeight):
        (egl::Surface::isPostSubBufferSupported):
        (egl::Surface::getSwapChain):
        (egl::Surface::setSwapInterval):
        (egl::Surface::getTextureFormat):
        (egl::Surface::getTextureTarget):
        (egl::Surface::setBoundTexture):
        (egl::Surface::getBoundTexture):
        (egl::Surface::getFormat):
        * src/libEGL/Surface.h: Added.
        * src/libEGL/libEGL.cpp: Added.
        (validateDisplay):
        (validateConfig):
        (validateContext):
        (validateSurface):
        * src/libEGL/libEGL.def: Added.
        * src/libEGL/libEGL.rc: Added.
        * src/libEGL/libEGL.vcxproj: Added.
        * src/libEGL/libEGL.vcxproj.filters: Added.
        * src/libEGL/main.cpp: Added.
        (DllMain):
        (egl::setCurrentError):
        (egl::getCurrentError):
        (egl::setCurrentAPI):
        (egl::getCurrentAPI):
        (egl::setCurrentDisplay):
        (egl::getCurrentDisplay):
        (egl::setCurrentDrawSurface):
        (egl::getCurrentDrawSurface):
        (egl::setCurrentReadSurface):
        (egl::getCurrentReadSurface):
        (egl::error):
        * src/libEGL/main.h: Added.
        (egl::error):
        (egl::success):
        * src/libEGL/resource.h: Added.
        * src/libGLESv2/BinaryStream.h: Added.
        (gl::BinaryInputStream::BinaryInputStream):
        (gl::BinaryInputStream::read):
        (gl::BinaryInputStream::skip):
        (gl::BinaryInputStream::offset):
        (gl::BinaryInputStream::error):
        (gl::BinaryInputStream::endOfStream):
        (gl::BinaryOutputStream::BinaryOutputStream):
        (gl::BinaryOutputStream::write):
        (gl::BinaryOutputStream::length):
        (gl::BinaryOutputStream::data):
        * src/libGLESv2/Buffer.cpp: Added.
        (gl::Buffer::Buffer):
        (gl::Buffer::~Buffer):
        (gl::Buffer::bufferData):
        (gl::Buffer::bufferSubData):
        (gl::Buffer::getStorage):
        (gl::Buffer::size):
        (gl::Buffer::usage):
        (gl::Buffer::getStaticVertexBuffer):
        (gl::Buffer::getStaticIndexBuffer):
        (gl::Buffer::invalidateStaticData):
        (gl::Buffer::promoteStaticUsage):
        * src/libGLESv2/Buffer.h: Added.
        * src/libGLESv2/Context.cpp: Added.
        (gl::makeStaticString):
        (gl::Context::Context):
        (gl::Context::~Context):
        (gl::Context::makeCurrent):
        (gl::Context::markContextLost):
        (gl::Context::isContextLost):
        (gl::Context::setClearColor):
        (gl::Context::setClearDepth):
        (gl::Context::setClearStencil):
        (gl::Context::setCullFace):
        (gl::Context::isCullFaceEnabled):
        (gl::Context::setCullMode):
        (gl::Context::setFrontFace):
        (gl::Context::setDepthTest):
        (gl::Context::isDepthTestEnabled):
        (gl::Context::setDepthFunc):
        (gl::Context::setDepthRange):
        (gl::Context::setBlend):
        (gl::Context::isBlendEnabled):
        (gl::Context::setBlendFactors):
        (gl::Context::setBlendColor):
        (gl::Context::setBlendEquation):
        (gl::Context::setStencilTest):
        (gl::Context::isStencilTestEnabled):
        (gl::Context::setStencilParams):
        (gl::Context::setStencilBackParams):
        (gl::Context::setStencilWritemask):
        (gl::Context::setStencilBackWritemask):
        (gl::Context::setStencilOperations):
        (gl::Context::setStencilBackOperations):
        (gl::Context::setPolygonOffsetFill):
        (gl::Context::isPolygonOffsetFillEnabled):
        (gl::Context::setPolygonOffsetParams):
        (gl::Context::setSampleAlphaToCoverage):
        (gl::Context::isSampleAlphaToCoverageEnabled):
        (gl::Context::setSampleCoverage):
        (gl::Context::isSampleCoverageEnabled):
        (gl::Context::setSampleCoverageParams):
        (gl::Context::setScissorTest):
        (gl::Context::isScissorTestEnabled):
        (gl::Context::setDither):
        (gl::Context::isDitherEnabled):
        (gl::Context::setLineWidth):
        (gl::Context::setGenerateMipmapHint):
        (gl::Context::setFragmentShaderDerivativeHint):
        (gl::Context::setViewportParams):
        (gl::Context::setScissorParams):
        (gl::Context::setColorMask):
        (gl::Context::setDepthMask):
        (gl::Context::setActiveSampler):
        (gl::Context::getReadFramebufferHandle):
        (gl::Context::getDrawFramebufferHandle):
        (gl::Context::getRenderbufferHandle):
        (gl::Context::getArrayBufferHandle):
        (gl::Context::getActiveQuery):
        (gl::Context::setEnableVertexAttribArray):
        (gl::Context::getVertexAttribState):
        (gl::Context::setVertexAttribState):
        (gl::Context::getVertexAttribPointer):
        (gl::Context::setPackAlignment):
        (gl::Context::getPackAlignment):
        (gl::Context::setUnpackAlignment):
        (gl::Context::getUnpackAlignment):
        (gl::Context::setPackReverseRowOrder):
        (gl::Context::getPackReverseRowOrder):
        (gl::Context::createBuffer):
        (gl::Context::createProgram):
        (gl::Context::createShader):
        (gl::Context::createTexture):
        (gl::Context::createRenderbuffer):
        (gl::Context::createFramebuffer):
        (gl::Context::createFence):
        (gl::Context::createQuery):
        (gl::Context::deleteBuffer):
        (gl::Context::deleteShader):
        (gl::Context::deleteProgram):
        (gl::Context::deleteTexture):
        (gl::Context::deleteRenderbuffer):
        (gl::Context::deleteFramebuffer):
        (gl::Context::deleteFence):
        (gl::Context::deleteQuery):
        (gl::Context::getBuffer):
        (gl::Context::getShader):
        (gl::Context::getProgram):
        (gl::Context::getTexture):
        (gl::Context::getRenderbuffer):
        (gl::Context::getReadFramebuffer):
        (gl::Context::getDrawFramebuffer):
        (gl::Context::bindArrayBuffer):
        (gl::Context::bindElementArrayBuffer):
        (gl::Context::bindTexture2D):
        (gl::Context::bindTextureCubeMap):
        (gl::Context::bindReadFramebuffer):
        (gl::Context::bindDrawFramebuffer):
        (gl::Context::bindRenderbuffer):
        (gl::Context::useProgram):
        (gl::Context::linkProgram):
        (gl::Context::setProgramBinary):
        (gl::Context::beginQuery):
        (gl::Context::endQuery):
        (gl::Context::setFramebufferZero):
        (gl::Context::setRenderbufferStorage):
        (gl::Context::getFramebuffer):
        (gl::Context::getFence):
        (gl::Context::getQuery):
        (gl::Context::getArrayBuffer):
        (gl::Context::getElementArrayBuffer):
        (gl::Context::getCurrentProgramBinary):
        (gl::Context::getTexture2D):
        (gl::Context::getTextureCubeMap):
        (gl::Context::getSamplerTexture):
        (gl::Context::getBooleanv):
        (gl::Context::getFloatv):
        (gl::Context::getIntegerv):
        (gl::Context::getQueryParameterInfo):
        (gl::Context::applyRenderTarget):
        (gl::Context::applyState):
        (gl::Context::applyShaders):
        (gl::Context::applyTextures):
        (gl::Context::readPixels):
        (gl::Context::clear):
        (gl::Context::drawArrays):
        (gl::Context::drawElements):
        (gl::Context::sync):
        (gl::Context::recordInvalidEnum):
        (gl::Context::recordInvalidValue):
        (gl::Context::recordInvalidOperation):
        (gl::Context::recordOutOfMemory):
        (gl::Context::recordInvalidFramebufferOperation):
        (gl::Context::getError):
        (gl::Context::getResetStatus):
        (gl::Context::isResetNotificationEnabled):
        (gl::Context::getMajorShaderModel):
        (gl::Context::getMaximumPointSize):
        (gl::Context::getMaximumCombinedTextureImageUnits):
        (gl::Context::getMaxSupportedSamples):
        (gl::Context::getMaximumRenderTargets):
        (gl::Context::supportsEventQueries):
        (gl::Context::supportsOcclusionQueries):
        (gl::Context::supportsBGRATextures):
        (gl::Context::supportsDXT1Textures):
        (gl::Context::supportsDXT3Textures):
        (gl::Context::supportsDXT5Textures):
        (gl::Context::supportsFloat32Textures):
        (gl::Context::supportsFloat32LinearFilter):
        (gl::Context::supportsFloat32RenderableTextures):
        (gl::Context::supportsFloat16Textures):
        (gl::Context::supportsFloat16LinearFilter):
        (gl::Context::supportsFloat16RenderableTextures):
        (gl::Context::getMaximumRenderbufferDimension):
        (gl::Context::getMaximumTextureDimension):
        (gl::Context::getMaximumCubeTextureDimension):
        (gl::Context::getMaximumTextureLevel):
        (gl::Context::supportsLuminanceTextures):
        (gl::Context::supportsLuminanceAlphaTextures):
        (gl::Context::supportsDepthTextures):
        (gl::Context::supports32bitIndices):
        (gl::Context::supportsNonPower2Texture):
        (gl::Context::supportsInstancing):
        (gl::Context::supportsTextureFilterAnisotropy):
        (gl::Context::getTextureMaxAnisotropy):
        (gl::Context::getCurrentReadFormatType):
        (gl::Context::detachBuffer):
        (gl::Context::detachTexture):
        (gl::Context::detachFramebuffer):
        (gl::Context::detachRenderbuffer):
        (gl::Context::getIncompleteTexture):
        (gl::Context::skipDraw):
        (gl::Context::setVertexAttrib):
        (gl::Context::setVertexAttribDivisor):
        (gl::Context::initExtensionString):
        (gl::Context::getExtensionString):
        (gl::Context::initRendererString):
        (gl::Context::getRendererString):
        (gl::Context::blitFramebuffer):
        * src/libGLESv2/Context.h: Added.
        (gl::VertexAttribute::VertexAttribute):
        (gl::VertexAttribute::typeSize):
        (gl::VertexAttribute::stride):
        * src/libGLESv2/Fence.cpp: Added.
        (gl::Fence::Fence):
        (gl::Fence::~Fence):
        (gl::Fence::isFence):
        (gl::Fence::setFence):
        (gl::Fence::testFence):
        (gl::Fence::finishFence):
        (gl::Fence::getFenceiv):
        * src/libGLESv2/Fence.h: Added.
        * src/libGLESv2/Float16ToFloat32.cpp: Added.
        (gl::float16ToFloat32):
        * src/libGLESv2/Float16ToFloat32.py: Added.
        (convertMantissa):
        (convertExponent):
        (convertOffset):
        * src/libGLESv2/Framebuffer.cpp: Added.
        (gl::Framebuffer::Framebuffer):
        (gl::Framebuffer::~Framebuffer):
        (gl::Framebuffer::lookupRenderbuffer):
        (gl::Framebuffer::setColorbuffer):
        (gl::Framebuffer::setDepthbuffer):
        (gl::Framebuffer::setStencilbuffer):
        (gl::Framebuffer::detachTexture):
        (gl::Framebuffer::detachRenderbuffer):
        (gl::Framebuffer::getRenderTargetSerial):
        (gl::Framebuffer::getDepthbufferSerial):
        (gl::Framebuffer::getStencilbufferSerial):
        (gl::Framebuffer::getColorbuffer):
        (gl::Framebuffer::getDepthbuffer):
        (gl::Framebuffer::getStencilbuffer):
        (gl::Framebuffer::getDepthOrStencilbuffer):
        (gl::Framebuffer::getReadColorbuffer):
        (gl::Framebuffer::getReadColorbufferType):
        (gl::Framebuffer::getFirstColorbuffer):
        (gl::Framebuffer::getColorbufferType):
        (gl::Framebuffer::getDepthbufferType):
        (gl::Framebuffer::getStencilbufferType):
        (gl::Framebuffer::getColorbufferHandle):
        (gl::Framebuffer::getDepthbufferHandle):
        (gl::Framebuffer::getStencilbufferHandle):
        (gl::Framebuffer::getDrawBufferState):
        (gl::Framebuffer::setDrawBufferState):
        (gl::Framebuffer::isEnabledColorAttachment):
        (gl::Framebuffer::hasEnabledColorAttachment):
        (gl::Framebuffer::hasStencil):
        (gl::Framebuffer::usingExtendedDrawBuffers):
        (gl::Framebuffer::completeness):
        (gl::DefaultFramebuffer::DefaultFramebuffer):
        (gl::Framebuffer::getSamples):
        (gl::DefaultFramebuffer::completeness):
        * src/libGLESv2/Framebuffer.h: Added.
        * src/libGLESv2/HandleAllocator.cpp: Added.
        (gl::HandleAllocator::HandleAllocator):
        (gl::HandleAllocator::~HandleAllocator):
        (gl::HandleAllocator::setBaseHandle):
        (gl::HandleAllocator::allocate):
        (gl::HandleAllocator::release):
        * src/libGLESv2/HandleAllocator.h: Added.
        * src/libGLESv2/Program.cpp: Added.
        (gl::AttributeBindings::AttributeBindings):
        (gl::AttributeBindings::~AttributeBindings):
        (gl::InfoLog::InfoLog):
        (gl::InfoLog::~InfoLog):
        (gl::InfoLog::getLength):
        (gl::InfoLog::getLog):
        (gl::InfoLog::appendSanitized):
        (gl::InfoLog::append):
        (gl::InfoLog::reset):
        (gl::Program::Program):
        (gl::Program::~Program):
        (gl::Program::attachShader):
        (gl::Program::detachShader):
        (gl::Program::getAttachedShadersCount):
        (gl::AttributeBindings::bindAttributeLocation):
        (gl::Program::bindAttributeLocation):
        (gl::Program::link):
        (gl::AttributeBindings::getAttributeBinding):
        (gl::Program::unlink):
        (gl::Program::isLinked):
        (gl::Program::getProgramBinary):
        (gl::Program::setProgramBinary):
        (gl::Program::release):
        (gl::Program::addRef):
        (gl::Program::getRefCount):
        (gl::Program::getProgramBinaryLength):
        (gl::Program::getInfoLogLength):
        (gl::Program::getInfoLog):
        (gl::Program::getAttachedShaders):
        (gl::Program::getActiveAttribute):
        (gl::Program::getActiveAttributeCount):
        (gl::Program::getActiveAttributeMaxLength):
        (gl::Program::getActiveUniform):
        (gl::Program::getActiveUniformCount):
        (gl::Program::getActiveUniformMaxLength):
        (gl::Program::flagForDeletion):
        (gl::Program::isFlaggedForDeletion):
        (gl::Program::validate):
        (gl::Program::isValidated):
        * src/libGLESv2/Program.h: Added.
        * src/libGLESv2/ProgramBinary.cpp: Added.
        (gl::str):
        (gl::UniformLocation::UniformLocation):
        (gl::ProgramBinary::ProgramBinary):
        (gl::ProgramBinary::~ProgramBinary):
        (gl::ProgramBinary::getSerial):
        (gl::ProgramBinary::issueSerial):
        (gl::ProgramBinary::getPixelExecutable):
        (gl::ProgramBinary::getVertexExecutable):
        (gl::ProgramBinary::getGeometryExecutable):
        (gl::ProgramBinary::getAttributeLocation):
        (gl::ProgramBinary::getSemanticIndex):
        (gl::ProgramBinary::getUsedSamplerRange):
        (gl::ProgramBinary::usesPointSize):
        (gl::ProgramBinary::usesPointSpriteEmulation):
        (gl::ProgramBinary::usesGeometryShader):
        (gl::ProgramBinary::getSamplerMapping):
        (gl::ProgramBinary::getSamplerTextureType):
        (gl::ProgramBinary::getUniformLocation):
        (gl::ProgramBinary::setUniform1fv):
        (gl::ProgramBinary::setUniform2fv):
        (gl::ProgramBinary::setUniform3fv):
        (gl::ProgramBinary::setUniform4fv):
        (gl::transposeMatrix):
        (gl::ProgramBinary::setUniformMatrix2fv):
        (gl::ProgramBinary::setUniformMatrix3fv):
        (gl::ProgramBinary::setUniformMatrix4fv):
        (gl::ProgramBinary::setUniform1iv):
        (gl::ProgramBinary::setUniform2iv):
        (gl::ProgramBinary::setUniform3iv):
        (gl::ProgramBinary::setUniform4iv):
        (gl::ProgramBinary::getUniformfv):
        (gl::ProgramBinary::getUniformiv):
        (gl::ProgramBinary::dirtyAllUniforms):
        (gl::ProgramBinary::applyUniforms):
        (gl::ProgramBinary::packVaryings):
        (gl::ProgramBinary::linkVaryings):
        (gl::ProgramBinary::load):
        (gl::ProgramBinary::save):
        (gl::ProgramBinary::getLength):
        (gl::ProgramBinary::link):
        (gl::ProgramBinary::linkAttributes):
        (gl::ProgramBinary::linkUniforms):
        (gl::ProgramBinary::defineUniform):
        (gl::ProgramBinary::generateGeometryShaderHLSL):
        (gl::ProgramBinary::generatePointSpriteHLSL):
        (gl::ProgramBinary::decorateAttribute):
        (gl::ProgramBinary::isValidated):
        (gl::ProgramBinary::getActiveAttribute):
        (gl::ProgramBinary::getActiveAttributeCount):
        (gl::ProgramBinary::getActiveAttributeMaxLength):
        (gl::ProgramBinary::getActiveUniform):
        (gl::ProgramBinary::getActiveUniformCount):
        (gl::ProgramBinary::getActiveUniformMaxLength):
        (gl::ProgramBinary::validate):
        (gl::ProgramBinary::validateSamplers):
        (gl::ProgramBinary::Sampler::Sampler):
        (gl::AttributeSorter::AttributeSorter):
        (gl::AttributeSorter::operator()):
        (gl::ProgramBinary::sortAttributesByLayout):
        * src/libGLESv2/ProgramBinary.h: Added.
        (gl::UniformLocation::UniformLocation):
        * src/libGLESv2/Query.cpp: Added.
        (gl::Query::Query):
        (gl::Query::~Query):
        (gl::Query::begin):
        (gl::Query::end):
        (gl::Query::getResult):
        (gl::Query::isResultAvailable):
        (gl::Query::getType):
        * src/libGLESv2/Query.h: Added.
        * src/libGLESv2/Renderbuffer.cpp: Added.
        (gl::RenderbufferInterface::RenderbufferInterface):
        (gl::RenderbufferInterface::addProxyRef):
        (gl::RenderbufferInterface::releaseProxy):
        (gl::RenderbufferInterface::getRedSize):
        (gl::RenderbufferInterface::getGreenSize):
        (gl::RenderbufferInterface::getBlueSize):
        (gl::RenderbufferInterface::getAlphaSize):
        (gl::RenderbufferInterface::getDepthSize):
        (gl::RenderbufferInterface::getStencilSize):
        (gl::RenderbufferTexture2D::RenderbufferTexture2D):
        (gl::RenderbufferTexture2D::~RenderbufferTexture2D):
        (gl::RenderbufferTexture2D::addProxyRef):
        (gl::RenderbufferTexture2D::releaseProxy):
        (gl::RenderbufferTexture2D::getRenderTarget):
        (gl::RenderbufferTexture2D::getDepthStencil):
        (gl::RenderbufferTexture2D::getWidth):
        (gl::RenderbufferTexture2D::getHeight):
        (gl::RenderbufferTexture2D::getInternalFormat):
        (gl::RenderbufferTexture2D::getActualFormat):
        (gl::RenderbufferTexture2D::getSamples):
        (gl::RenderbufferTexture2D::getSerial):
        (gl::RenderbufferTextureCubeMap::RenderbufferTextureCubeMap):
        (gl::RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap):
        (gl::RenderbufferTextureCubeMap::addProxyRef):
        (gl::RenderbufferTextureCubeMap::releaseProxy):
        (gl::RenderbufferTextureCubeMap::getRenderTarget):
        (gl::RenderbufferTextureCubeMap::getDepthStencil):
        (gl::RenderbufferTextureCubeMap::getWidth):
        (gl::RenderbufferTextureCubeMap::getHeight):
        (gl::RenderbufferTextureCubeMap::getInternalFormat):
        (gl::RenderbufferTextureCubeMap::getActualFormat):
        (gl::RenderbufferTextureCubeMap::getSamples):
        (gl::RenderbufferTextureCubeMap::getSerial):
        (gl::Renderbuffer::Renderbuffer):
        (gl::Renderbuffer::~Renderbuffer):
        (gl::Renderbuffer::addRef):
        (gl::Renderbuffer::release):
        (gl::Renderbuffer::getRenderTarget):
        (gl::Renderbuffer::getDepthStencil):
        (gl::Renderbuffer::getWidth):
        (gl::Renderbuffer::getHeight):
        (gl::Renderbuffer::getInternalFormat):
        (gl::Renderbuffer::getActualFormat):
        (gl::Renderbuffer::getRedSize):
        (gl::Renderbuffer::getGreenSize):
        (gl::Renderbuffer::getBlueSize):
        (gl::Renderbuffer::getAlphaSize):
        (gl::Renderbuffer::getDepthSize):
        (gl::Renderbuffer::getStencilSize):
        (gl::Renderbuffer::getSamples):
        (gl::Renderbuffer::getSerial):
        (gl::Renderbuffer::setStorage):
        (gl::RenderbufferStorage::RenderbufferStorage):
        (gl::RenderbufferStorage::~RenderbufferStorage):
        (gl::RenderbufferStorage::getRenderTarget):
        (gl::RenderbufferStorage::getDepthStencil):
        (gl::RenderbufferStorage::getWidth):
        (gl::RenderbufferStorage::getHeight):
        (gl::RenderbufferStorage::getInternalFormat):
        (gl::RenderbufferStorage::getActualFormat):
        (gl::RenderbufferStorage::getSamples):
        (gl::RenderbufferStorage::getSerial):
        (gl::RenderbufferStorage::issueSerial):
        (gl::RenderbufferStorage::issueCubeSerials):
        (gl::Colorbuffer::Colorbuffer):
        (gl::Colorbuffer::~Colorbuffer):
        (gl::Colorbuffer::getRenderTarget):
        (gl::DepthStencilbuffer::DepthStencilbuffer):
        (gl::DepthStencilbuffer::~DepthStencilbuffer):
        (gl::DepthStencilbuffer::getDepthStencil):
        (gl::Depthbuffer::Depthbuffer):
        (gl::Depthbuffer::~Depthbuffer):
        (gl::Stencilbuffer::Stencilbuffer):
        (gl::Stencilbuffer::~Stencilbuffer):
        * src/libGLESv2/Renderbuffer.h: Added.
        (gl::RenderbufferInterface::~RenderbufferInterface):
        * src/libGLESv2/ResourceManager.cpp: Added.
        (gl::ResourceManager::ResourceManager):
        (gl::ResourceManager::~ResourceManager):
        (gl::ResourceManager::addRef):
        (gl::ResourceManager::release):
        (gl::ResourceManager::createBuffer):
        (gl::ResourceManager::createShader):
        (gl::ResourceManager::createProgram):
        (gl::ResourceManager::createTexture):
        (gl::ResourceManager::createRenderbuffer):
        (gl::ResourceManager::deleteBuffer):
        (gl::ResourceManager::deleteShader):
        (gl::ResourceManager::deleteProgram):
        (gl::ResourceManager::deleteTexture):
        (gl::ResourceManager::deleteRenderbuffer):
        (gl::ResourceManager::getBuffer):
        (gl::ResourceManager::getShader):
        (gl::ResourceManager::getTexture):
        (gl::ResourceManager::getProgram):
        (gl::ResourceManager::getRenderbuffer):
        (gl::ResourceManager::setRenderbuffer):
        (gl::ResourceManager::checkBufferAllocation):
        (gl::ResourceManager::checkTextureAllocation):
        (gl::ResourceManager::checkRenderbufferAllocation):
        * src/libGLESv2/ResourceManager.h: Added.
        * src/libGLESv2/Shader.cpp: Added.
        (gl::Shader::Shader):
        (gl::Shader::~Shader):
        (gl::Shader::getHandle):
        (gl::Shader::setSource):
        (gl::Shader::getInfoLogLength):
        (gl::Shader::getInfoLog):
        (gl::Shader::getSourceLength):
        (gl::Shader::getTranslatedSourceLength):
        (gl::Shader::getSourceImpl):
        (gl::Shader::getSource):
        (gl::Shader::getTranslatedSource):
        (gl::Shader::getUniforms):
        (gl::Shader::isCompiled):
        (gl::Shader::getHLSL):
        (gl::Shader::addRef):
        (gl::Shader::release):
        (gl::Shader::getRefCount):
        (gl::Shader::isFlaggedForDeletion):
        (gl::Shader::flagForDeletion):
        (gl::Shader::initializeCompiler):
        (gl::Shader::releaseCompiler):
        (gl::Shader::parseVaryings):
        (gl::Shader::resetVaryingsRegisterAssignment):
        (gl::Shader::uncompile):
        (gl::Shader::compileToHLSL):
        (gl::Shader::parseType):
        (gl::Shader::compareVarying):
        (gl::VertexShader::VertexShader):
        (gl::VertexShader::~VertexShader):
        (gl::VertexShader::getType):
        (gl::VertexShader::uncompile):
        (gl::VertexShader::compile):
        (gl::VertexShader::getSemanticIndex):
        (gl::VertexShader::parseAttributes):
        (gl::FragmentShader::FragmentShader):
        (gl::FragmentShader::~FragmentShader):
        (gl::FragmentShader::getType):
        (gl::FragmentShader::compile):
        * src/libGLESv2/Shader.h: Added.
        (gl::Varying::Varying):
        (gl::Attribute::Attribute):
        * src/libGLESv2/Texture.cpp: Added.
        (gl::Texture::Texture):
        (gl::Texture::~Texture):
        (gl::Texture::setMinFilter):
        (gl::Texture::setMagFilter):
        (gl::Texture::setWrapS):
        (gl::Texture::setWrapT):
        (gl::Texture::setMaxAnisotropy):
        (gl::Texture::setUsage):
        (gl::Texture::getMinFilter):
        (gl::Texture::getMagFilter):
        (gl::Texture::getWrapS):
        (gl::Texture::getWrapT):
        (gl::Texture::getMaxAnisotropy):
        (gl::Texture::getLodOffset):
        (gl::Texture::getSamplerState):
        (gl::Texture::getUsage):
        (gl::Texture::isMipmapFiltered):
        (gl::Texture::setImage):
        (gl::Texture::setCompressedImage):
        (gl::Texture::subImage):
        (gl::Texture::subImageCompressed):
        (gl::Texture::getNativeTexture):
        (gl::Texture::hasDirtyImages):
        (gl::Texture::resetDirty):
        (gl::Texture::getTextureSerial):
        (gl::Texture::getRenderTargetSerial):
        (gl::Texture::isImmutable):
        (gl::Texture::creationLevels):
        (gl::Texture2D::Texture2D):
        (gl::Texture2D::~Texture2D):
        (gl::Texture2D::addProxyRef):
        (gl::Texture2D::releaseProxy):
        (gl::Texture2D::getTarget):
        (gl::Texture2D::getWidth):
        (gl::Texture2D::getHeight):
        (gl::Texture2D::getInternalFormat):
        (gl::Texture2D::getActualFormat):
        (gl::Texture2D::redefineImage):
        (gl::Texture2D::setImage):
        (gl::Texture2D::bindTexImage):
        (gl::Texture2D::releaseTexImage):
        (gl::Texture2D::setCompressedImage):
        (gl::Texture2D::commitRect):
        (gl::Texture2D::subImage):
        (gl::Texture2D::subImageCompressed):
        (gl::Texture2D::copyImage):
        (gl::Texture2D::copySubImage):
        (gl::Texture2D::storage):
        (gl::Texture2D::isSamplerComplete):
        (gl::Texture2D::isMipmapComplete):
        (gl::Texture2D::isCompressed):
        (gl::Texture2D::isDepth):
        (gl::Texture2D::createTexture):
        (gl::Texture2D::updateTexture):
        (gl::Texture2D::convertToRenderTarget):
        (gl::Texture2D::generateMipmaps):
        (gl::Texture2D::getRenderbuffer):
        (gl::Texture2D::getRenderTarget):
        (gl::Texture2D::getDepthStencil):
        (gl::Texture2D::levelCount):
        (gl::Texture2D::getStorage):
        (gl::TextureCubeMap::TextureCubeMap):
        (gl::TextureCubeMap::~TextureCubeMap):
        (gl::TextureCubeMap::addProxyRef):
        (gl::TextureCubeMap::releaseProxy):
        (gl::TextureCubeMap::getTarget):
        (gl::TextureCubeMap::getWidth):
        (gl::TextureCubeMap::getHeight):
        (gl::TextureCubeMap::getInternalFormat):
        (gl::TextureCubeMap::getActualFormat):
        (gl::TextureCubeMap::setImagePosX):
        (gl::TextureCubeMap::setImageNegX):
        (gl::TextureCubeMap::setImagePosY):
        (gl::TextureCubeMap::setImageNegY):
        (gl::TextureCubeMap::setImagePosZ):
        (gl::TextureCubeMap::setImageNegZ):
        (gl::TextureCubeMap::setCompressedImage):
        (gl::TextureCubeMap::commitRect):
        (gl::TextureCubeMap::subImage):
        (gl::TextureCubeMap::subImageCompressed):
        (gl::TextureCubeMap::isSamplerComplete):
        (gl::TextureCubeMap::isCubeComplete):
        (gl::TextureCubeMap::isMipmapCubeComplete):
        (gl::TextureCubeMap::isCompressed):
        (gl::TextureCubeMap::createTexture):
        (gl::TextureCubeMap::updateTexture):
        (gl::TextureCubeMap::convertToRenderTarget):
        (gl::TextureCubeMap::setImage):
        (gl::TextureCubeMap::faceIndex):
        (gl::TextureCubeMap::redefineImage):
        (gl::TextureCubeMap::copyImage):
        (gl::TextureCubeMap::copySubImage):
        (gl::TextureCubeMap::storage):
        (gl::TextureCubeMap::generateMipmaps):
        (gl::TextureCubeMap::getRenderbuffer):
        (gl::TextureCubeMap::getRenderTarget):
        (gl::TextureCubeMap::levelCount):
        (gl::TextureCubeMap::getStorage):
        * src/libGLESv2/Texture.h: Added.
        * src/libGLESv2/Uniform.cpp: Added.
        (gl::Uniform::Uniform):
        (gl::Uniform::~Uniform):
        (gl::Uniform::isArray):
        (gl::Uniform::elementCount):
        * src/libGLESv2/Uniform.h: Added.
        * src/libGLESv2/angletypes.h: Added.
        * src/libGLESv2/constants.h: Added.
        * src/libGLESv2/libGLESv2.cpp: Added.
        (validImageSize):
        (checkTextureFormatType):
        (validateSubImageParams2D):
        (validateSubImageParamsCube):
        (validReadFormatType):
        * src/libGLESv2/libGLESv2.def: Added.
        * src/libGLESv2/libGLESv2.rc: Added.
        * src/libGLESv2/libGLESv2.vcxproj: Added.
        * src/libGLESv2/libGLESv2.vcxproj.filters: Added.
        * src/libGLESv2/main.cpp: Added.
        (DllMain):
        (gl::makeCurrent):
        (gl::getContext):
        (gl::getNonLostContext):
        (gl::getDisplay):
        (gl::error):
        * src/libGLESv2/main.h: Added.
        (gl::error):
        * src/libGLESv2/mathutil.h: Added.
        (gl::Vector4::Vector4):
        (gl::isPow2):
        (gl::log2):
        (gl::ceilPow2):
        (gl::clamp):
        (gl::clamp01):
        (gl::unorm):
        (gl::supportsSSE2):
        (gl::float32ToFloat16):
        (rx::Range::Range):
        * src/libGLESv2/precompiled.cpp: Added.
        * src/libGLESv2/precompiled.h: Added.
        * src/libGLESv2/renderer: Added.
        * src/libGLESv2/renderer/Blit.cpp: Added.
        (rx::Blit::Blit):
        (rx::Blit::~Blit):
        (rx::Blit::initGeometry):
        (rx::Blit::setShader):
        (rx::Blit::setVertexShader):
        (rx::Blit::setPixelShader):
        (rx::Blit::getSurfaceRect):
        (rx::Blit::boxFilter):
        (rx::Blit::copy):
        (rx::Blit::formatConvert):
        (rx::Blit::setFormatConvertShaders):
        (rx::Blit::copySurfaceToTexture):
        (rx::Blit::setViewport):
        (rx::Blit::setCommonBlitState):
        (rx::Blit::render):
        (rx::Blit::saveState):
        (rx::Blit::restoreState):
        * src/libGLESv2/renderer/Blit.h: Added.
        * src/libGLESv2/renderer/BufferStorage.cpp: Added.
        (rx::BufferStorage::BufferStorage):
        (rx::BufferStorage::~BufferStorage):
        (rx::BufferStorage::getSerial):
        (rx::BufferStorage::updateSerial):
        (rx::BufferStorage::markBufferUsage):
        * src/libGLESv2/renderer/BufferStorage.h: Added.
        * src/libGLESv2/renderer/BufferStorage11.cpp: Added.
        (rx::BufferStorage11::BufferStorage11):
        (rx::BufferStorage11::~BufferStorage11):
        (rx::BufferStorage11::makeBufferStorage11):
        (rx::BufferStorage11::getData):
        (rx::BufferStorage11::setData):
        (rx::BufferStorage11::clear):
        (rx::BufferStorage11::getSize):
        (rx::BufferStorage11::supportsDirectBinding):
        (rx::BufferStorage11::markBufferUsage):
        (rx::BufferStorage11::getBuffer):
        * src/libGLESv2/renderer/BufferStorage11.h: Added.
        * src/libGLESv2/renderer/BufferStorage9.cpp: Added.
        (rx::BufferStorage9::BufferStorage9):
        (rx::BufferStorage9::~BufferStorage9):
        (rx::BufferStorage9::makeBufferStorage9):
        (rx::BufferStorage9::getData):
        (rx::BufferStorage9::setData):
        (rx::BufferStorage9::clear):
        (rx::BufferStorage9::getSize):
        (rx::BufferStorage9::supportsDirectBinding):
        * src/libGLESv2/renderer/BufferStorage9.h: Added.
        * src/libGLESv2/renderer/Fence11.cpp: Added.
        (rx::Fence11::Fence11):
        (rx::Fence11::~Fence11):
        (rx::Fence11::isFence):
        (rx::Fence11::setFence):
        (rx::Fence11::testFence):
        (rx::Fence11::finishFence):
        (rx::Fence11::getFenceiv):
        * src/libGLESv2/renderer/Fence11.h: Added.
        * src/libGLESv2/renderer/Fence9.cpp: Added.
        (rx::Fence9::Fence9):
        (rx::Fence9::~Fence9):
        (rx::Fence9::isFence):
        (rx::Fence9::setFence):
        (rx::Fence9::testFence):
        (rx::Fence9::finishFence):
        (rx::Fence9::getFenceiv):
        * src/libGLESv2/renderer/Fence9.h: Added.
        * src/libGLESv2/renderer/FenceImpl.h: Added.
        (rx::FenceImpl::FenceImpl):
        (rx::FenceImpl::~FenceImpl):
        (rx::FenceImpl::setStatus):
        (rx::FenceImpl::getStatus):
        (rx::FenceImpl::setCondition):
        (rx::FenceImpl::getCondition):
        * src/libGLESv2/renderer/Image.cpp: Added.
        (rx::Image::Image):
        (rx::Image::loadAlphaDataToBGRA):
        (rx::Image::loadAlphaDataToNative):
        (rx::Image::loadAlphaFloatDataToRGBA):
        (rx::Image::loadAlphaHalfFloatDataToRGBA):
        (rx::Image::loadLuminanceDataToNativeOrBGRA):
        (rx::Image::loadLuminanceFloatDataToRGBA):
        (rx::Image::loadLuminanceFloatDataToRGB):
        (rx::Image::loadLuminanceHalfFloatDataToRGBA):
        (rx::Image::loadLuminanceAlphaDataToNativeOrBGRA):
        (rx::Image::loadLuminanceAlphaFloatDataToRGBA):
        (rx::Image::loadLuminanceAlphaHalfFloatDataToRGBA):
        (rx::Image::loadRGBUByteDataToBGRX):
        (rx::Image::loadRGBUByteDataToRGBA):
        (rx::Image::loadRGB565DataToBGRA):
        (rx::Image::loadRGB565DataToRGBA):
        (rx::Image::loadRGBFloatDataToRGBA):
        (rx::Image::loadRGBFloatDataToNative):
        (rx::Image::loadRGBHalfFloatDataToRGBA):
        (rx::Image::loadRGBAUByteDataToBGRA):
        (rx::Image::loadRGBAUByteDataToNative):
        (rx::Image::loadRGBA4444DataToBGRA):
        (rx::Image::loadRGBA4444DataToRGBA):
        (rx::Image::loadRGBA5551DataToBGRA):
        (rx::Image::loadRGBA5551DataToRGBA):
        (rx::Image::loadRGBAFloatDataToRGBA):
        (rx::Image::loadRGBAHalfFloatDataToRGBA):
        (rx::Image::loadBGRADataToBGRA):
        * src/libGLESv2/renderer/Image.h: Added.
        (rx::Image::~Image):
        (rx::Image::getWidth):
        (rx::Image::getHeight):
        (rx::Image::getInternalFormat):
        (rx::Image::getActualFormat):
        (rx::Image::markDirty):
        (rx::Image::markClean):
        (rx::Image::setManagedSurface):
        * src/libGLESv2/renderer/Image11.cpp: Added.
        (rx::Image11::Image11):
        (rx::Image11::~Image11):
        (rx::Image11::makeImage11):
        (rx::Image11::generateMipmap):
        (rx::Image11::isDirty):
        (rx::Image11::updateSurface):
        (rx::Image11::redefine):
        (rx::Image11::isRenderableFormat):
        (rx::Image11::getDXGIFormat):
        (rx::Image11::loadData):
        (rx::Image11::loadCompressedData):
        (rx::Image11::copy):
        (rx::Image11::getStagingTexture):
        (rx::Image11::getStagingSubresource):
        (rx::Image11::createStagingTexture):
        (rx::Image11::map):
        (rx::Image11::unmap):
        * src/libGLESv2/renderer/Image11.h: Added.
        * src/libGLESv2/renderer/Image9.cpp: Added.
        (rx::Image9::Image9):
        (rx::Image9::~Image9):
        (rx::Image9::generateMip):
        (rx::Image9::makeImage9):
        (rx::Image9::generateMipmap):
        (rx::Image9::copyLockableSurfaces):
        (rx::Image9::redefine):
        (rx::Image9::createSurface):
        (rx::Image9::lock):
        (rx::Image9::unlock):
        (rx::Image9::isRenderableFormat):
        (rx::Image9::getD3DFormat):
        (rx::Image9::getSurface):
        (rx::Image9::setManagedSurface):
        (rx::Image9::updateSurface):
        (rx::Image9::loadData):
        (rx::Image9::loadCompressedData):
        (rx::Image9::copy):
        * src/libGLESv2/renderer/Image9.h: Added.
        (rx::Image9::isDirty):
        * src/libGLESv2/renderer/ImageSSE2.cpp: Added.
        (rx::Image::loadRGBAUByteDataToBGRASSE2):
        (rx::Image::loadAlphaDataToBGRASSE2):
        * src/libGLESv2/renderer/IndexBuffer.cpp: Added.
        (rx::IndexBuffer::IndexBuffer):
        (rx::IndexBuffer::~IndexBuffer):
        (rx::IndexBuffer::getSerial):
        (rx::IndexBuffer::updateSerial):
        (rx::IndexBufferInterface::IndexBufferInterface):
        (rx::IndexBufferInterface::~IndexBufferInterface):
        (rx::IndexBufferInterface::getIndexType):
        (rx::IndexBufferInterface::getBufferSize):
        (rx::IndexBufferInterface::getSerial):
        (rx::IndexBufferInterface::mapBuffer):
        (rx::IndexBufferInterface::unmapBuffer):
        (rx::IndexBufferInterface::getIndexBuffer):
        (rx::IndexBufferInterface::getWritePosition):
        (rx::IndexBufferInterface::setWritePosition):
        (rx::IndexBufferInterface::discard):
        (rx::IndexBufferInterface::setBufferSize):
        (rx::StreamingIndexBufferInterface::StreamingIndexBufferInterface):
        (rx::StreamingIndexBufferInterface::~StreamingIndexBufferInterface):
        (rx::StreamingIndexBufferInterface::reserveBufferSpace):
        (rx::StaticIndexBufferInterface::StaticIndexBufferInterface):
        (rx::StaticIndexBufferInterface::~StaticIndexBufferInterface):
        (rx::StaticIndexBufferInterface::reserveBufferSpace):
        (rx::StaticIndexBufferInterface::lookupRange):
        (rx::StaticIndexBufferInterface::addRange):
        * src/libGLESv2/renderer/IndexBuffer.h: Added.
        (rx::StaticIndexBufferInterface::IndexRange::operator<):
        * src/libGLESv2/renderer/IndexBuffer11.cpp: Added.
        (rx::IndexBuffer11::IndexBuffer11):
        (rx::IndexBuffer11::~IndexBuffer11):
        (rx::IndexBuffer11::initialize):
        (rx::IndexBuffer11::makeIndexBuffer11):
        (rx::IndexBuffer11::mapBuffer):
        (rx::IndexBuffer11::unmapBuffer):
        (rx::IndexBuffer11::getIndexType):
        (rx::IndexBuffer11::getBufferSize):
        (rx::IndexBuffer11::setSize):
        (rx::IndexBuffer11::discard):
        (rx::IndexBuffer11::getIndexFormat):
        (rx::IndexBuffer11::getBuffer):
        * src/libGLESv2/renderer/IndexBuffer11.h: Added.
        * src/libGLESv2/renderer/IndexBuffer9.cpp: Added.
        (rx::IndexBuffer9::IndexBuffer9):
        (rx::IndexBuffer9::~IndexBuffer9):
        (rx::IndexBuffer9::initialize):
        (rx::IndexBuffer9::makeIndexBuffer9):
        (rx::IndexBuffer9::mapBuffer):
        (rx::IndexBuffer9::unmapBuffer):
        (rx::IndexBuffer9::getIndexType):
        (rx::IndexBuffer9::getBufferSize):
        (rx::IndexBuffer9::setSize):
        (rx::IndexBuffer9::discard):
        (rx::IndexBuffer9::getIndexFormat):
        (rx::IndexBuffer9::getBuffer):
        * src/libGLESv2/renderer/IndexBuffer9.h: Added.
        * src/libGLESv2/renderer/IndexDataManager.cpp: Added.
        (rx::IndexDataManager::IndexDataManager):
        (rx::IndexDataManager::~IndexDataManager):
        (rx::indexTypeSize):
        (rx::convertIndices):
        (rx::computeRange):
        (rx::IndexDataManager::prepareIndexData):
        (rx::IndexDataManager::getCountingIndices):
        * src/libGLESv2/renderer/IndexDataManager.h: Added.
        * src/libGLESv2/renderer/InputLayoutCache.cpp: Added.
        (rx::InputLayoutCache::InputLayoutCache):
        (rx::InputLayoutCache::~InputLayoutCache):
        (rx::InputLayoutCache::initialize):
        (rx::InputLayoutCache::clear):
        (rx::InputLayoutCache::applyVertexBuffers):
        (rx::InputLayoutCache::hashInputLayout):
        (rx::InputLayoutCache::compareInputLayouts):
        * src/libGLESv2/renderer/InputLayoutCache.h: Added.
        * src/libGLESv2/renderer/Query11.cpp: Added.
        (rx::Query11::Query11):
        (rx::Query11::~Query11):
        (rx::Query11::begin):
        (rx::Query11::end):
        (rx::Query11::getResult):
        (rx::Query11::isResultAvailable):
        (rx::Query11::testQuery):
        * src/libGLESv2/renderer/Query11.h: Added.
        * src/libGLESv2/renderer/Query9.cpp: Added.
        (rx::Query9::Query9):
        (rx::Query9::~Query9):
        (rx::Query9::begin):
        (rx::Query9::end):
        (rx::Query9::getResult):
        (rx::Query9::isResultAvailable):
        (rx::Query9::testQuery):
        * src/libGLESv2/renderer/Query9.h: Added.
        * src/libGLESv2/renderer/QueryImpl.h: Added.
        (rx::QueryImpl::QueryImpl):
        (rx::QueryImpl::~QueryImpl):
        (rx::QueryImpl::getType):
        * src/libGLESv2/renderer/RenderStateCache.cpp: Added.
        (rx::RenderStateCache::RenderStateCache):
        (rx::RenderStateCache::~RenderStateCache):
        (rx::RenderStateCache::initialize):
        (rx::RenderStateCache::clear):
        (rx::RenderStateCache::hashBlendState):
        (rx::RenderStateCache::compareBlendStates):
        (rx::RenderStateCache::getBlendState):
        (rx::RenderStateCache::hashRasterizerState):
        (rx::RenderStateCache::compareRasterizerStates):
        (rx::RenderStateCache::getRasterizerState):
        (rx::RenderStateCache::hashDepthStencilState):
        (rx::RenderStateCache::compareDepthStencilStates):
        (rx::RenderStateCache::getDepthStencilState):
        (rx::RenderStateCache::hashSamplerState):
        (rx::RenderStateCache::compareSamplerStates):
        (rx::RenderStateCache::getSamplerState):
        * src/libGLESv2/renderer/RenderStateCache.h: Added.
        * src/libGLESv2/renderer/RenderTarget.h: Added.
        (rx::RenderTarget::RenderTarget):
        (rx::RenderTarget::~RenderTarget):
        (rx::RenderTarget::getWidth):
        (rx::RenderTarget::getHeight):
        (rx::RenderTarget::getInternalFormat):
        (rx::RenderTarget::getActualFormat):
        (rx::RenderTarget::getSamples):
        * src/libGLESv2/renderer/RenderTarget11.cpp: Added.
        (rx::getRTVSubresourceIndex):
        (rx::getDSVSubresourceIndex):
        (rx::RenderTarget11::RenderTarget11):
        (rx::RenderTarget11::~RenderTarget11):
        (rx::RenderTarget11::makeRenderTarget11):
        (rx::RenderTarget11::getTexture):
        (rx::RenderTarget11::getRenderTargetView):
        (rx::RenderTarget11::getDepthStencilView):
        (rx::RenderTarget11::getShaderResourceView):
        (rx::RenderTarget11::getSubresourceIndex):
        * src/libGLESv2/renderer/RenderTarget11.h: Added.
        * src/libGLESv2/renderer/RenderTarget9.cpp: Added.
        (rx::RenderTarget9::RenderTarget9):
        (rx::RenderTarget9::~RenderTarget9):
        (rx::RenderTarget9::makeRenderTarget9):
        (rx::RenderTarget9::getSurface):
        * src/libGLESv2/renderer/RenderTarget9.h: Added.
        * src/libGLESv2/renderer/Renderer.cpp: Added.
        (rx::Renderer::Renderer):
        (rx::Renderer::~Renderer):
        (rx::Renderer::initializeCompiler):
        (rx::Renderer::compileToBinary):
        * src/libGLESv2/renderer/Renderer.h: Added.
        (getComparableOSVersion):
        (rx::Renderer::getVertexTextureSupport):
        * src/libGLESv2/renderer/Renderer11.cpp: Added.
        (rx::Renderer11::Renderer11):
        (rx::Renderer11::~Renderer11):
        (rx::Renderer11::makeRenderer11):
        (rx::Renderer11::initialize):
        (rx::Renderer11::initializeDevice):
        (rx::Renderer11::generateConfigs):
        (rx::Renderer11::deleteConfigs):
        (rx::Renderer11::sync):
        (rx::Renderer11::createSwapChain):
        (rx::Renderer11::setSamplerState):
        (rx::Renderer11::setTexture):
        (rx::Renderer11::setRasterizerState):
        (rx::Renderer11::setBlendState):
        (rx::Renderer11::setDepthStencilState):
        (rx::Renderer11::setScissorRectangle):
        (rx::Renderer11::setViewport):
        (rx::Renderer11::applyPrimitiveType):
        (rx::Renderer11::applyRenderTarget):
        (rx::Renderer11::applyVertexBuffer):
        (rx::Renderer11::applyIndexBuffer):
        (rx::Renderer11::drawArrays):
        (rx::Renderer11::drawElements):
        (rx::Renderer11::drawLineLoop):
        (rx::Renderer11::drawTriangleFan):
        (rx::Renderer11::applyShaders):
        (rx::Renderer11::applyUniforms):
        (rx::Renderer11::clear):
        (rx::Renderer11::maskedClear):
        (rx::Renderer11::markAllStateDirty):
        (rx::Renderer11::releaseDeviceResources):
        (rx::Renderer11::notifyDeviceLost):
        (rx::Renderer11::isDeviceLost):
        (rx::Renderer11::testDeviceLost):
        (rx::Renderer11::testDeviceResettable):
        (rx::Renderer11::release):
        (rx::Renderer11::resetDevice):
        (rx::Renderer11::getAdapterVendor):
        (rx::Renderer11::getRendererDescription):
        (rx::Renderer11::getAdapterIdentifier):
        (rx::Renderer11::getBGRATextureSupport):
        (rx::Renderer11::getDXT1TextureSupport):
        (rx::Renderer11::getDXT3TextureSupport):
        (rx::Renderer11::getDXT5TextureSupport):
        (rx::Renderer11::getDepthTextureSupport):
        (rx::Renderer11::getFloat32TextureSupport):
        (rx::Renderer11::getFloat16TextureSupport):
        (rx::Renderer11::getLuminanceTextureSupport):
        (rx::Renderer11::getLuminanceAlphaTextureSupport):
        (rx::Renderer11::getTextureFilterAnisotropySupport):
        (rx::Renderer11::getTextureMaxAnisotropy):
        (rx::Renderer11::getEventQuerySupport):
        (rx::Renderer11::getViewportBounds):
        (rx::Renderer11::getMaxVertexTextureImageUnits):
        (rx::Renderer11::getMaxCombinedTextureImageUnits):
        (rx::Renderer11::getReservedVertexUniformVectors):
        (rx::Renderer11::getReservedFragmentUniformVectors):
        (rx::Renderer11::getMaxVertexUniformVectors):
        (rx::Renderer11::getMaxFragmentUniformVectors):
        (rx::Renderer11::getMaxVaryingVectors):
        (rx::Renderer11::getNonPower2TextureSupport):
        (rx::Renderer11::getOcclusionQuerySupport):
        (rx::Renderer11::getInstancingSupport):
        (rx::Renderer11::getShareHandleSupport):
        (rx::Renderer11::getDerivativeInstructionSupport):
        (rx::Renderer11::getPostSubBufferSupport):
        (rx::Renderer11::getMajorShaderModel):
        (rx::Renderer11::getMinorShaderModel):
        (rx::Renderer11::getMaxPointSize):
        (rx::Renderer11::getMaxViewportDimension):
        (rx::Renderer11::getMaxTextureWidth):
        (rx::Renderer11::getMaxTextureHeight):
        (rx::Renderer11::get32BitIndexSupport):
        (rx::Renderer11::getMinSwapInterval):
        (rx::Renderer11::getMaxSwapInterval):
        (rx::Renderer11::getMaxSupportedSamples):
        (rx::Renderer11::getNearestSupportedSamples):
        (rx::Renderer11::getMaxRenderTargets):
        (rx::Renderer11::copyToRenderTarget):
        (rx::Renderer11::copyImage):
        (rx::Renderer11::copyTexture):
        (rx::Renderer11::unapplyRenderTargets):
        (rx::Renderer11::setOneTimeRenderTarget):
        (rx::Renderer11::createRenderTarget):
        (rx::Renderer11::loadExecutable):
        (rx::Renderer11::compileToExecutable):
        (rx::Renderer11::createVertexBuffer):
        (rx::Renderer11::createIndexBuffer):
        (rx::Renderer11::createBufferStorage):
        (rx::Renderer11::createQuery):
        (rx::Renderer11::createFence):
        (rx::Renderer11::getRenderTargetResource):
        (rx::Renderer11::blitRect):
        (rx::Renderer11::readPixels):
        (rx::Renderer11::createImage):
        (rx::Renderer11::generateMipmap):
        (rx::Renderer11::createTextureStorage2D):
        (rx::Renderer11::createTextureStorageCube):
        (rx::getFastPixelCopySize):
        (rx::readPixelColor):
        (rx::writePixelColor):
        (rx::Renderer11::readTextureData):
        (rx::Renderer11::blitRenderbufferRect):
        (rx::Renderer11::resolveMultisampledTexture):
        (rx::Renderer11::getLUID):
        * src/libGLESv2/renderer/Renderer11.h: Added.
        (rx::Renderer11::getDevice):
        (rx::Renderer11::getDeviceContext):
        (rx::Renderer11::getDxgiFactory):
        * src/libGLESv2/renderer/Renderer9.cpp: Added.
        (rx::Renderer9::Renderer9):
        (rx::Renderer9::~Renderer9):
        (rx::Renderer9::makeRenderer9):
        (rx::Renderer9::initialize):
        (rx::Renderer9::initializeDevice):
        (rx::Renderer9::getDefaultPresentParameters):
        (rx::Renderer9::generateConfigs):
        (rx::Renderer9::deleteConfigs):
        (rx::Renderer9::startScene):
        (rx::Renderer9::endScene):
        (rx::Renderer9::sync):
        (rx::Renderer9::createSwapChain):
        (rx::Renderer9::allocateEventQuery):
        (rx::Renderer9::freeEventQuery):
        (rx::Renderer9::createVertexShader):
        (rx::Renderer9::createPixelShader):
        (rx::Renderer9::createVertexBuffer):
        (rx::Renderer9::createIndexBuffer):
        (rx::Renderer9::createBufferStorage):
        (rx::Renderer9::createQuery):
        (rx::Renderer9::createFence):
        (rx::Renderer9::setSamplerState):
        (rx::Renderer9::setTexture):
        (rx::Renderer9::setRasterizerState):
        (rx::Renderer9::setBlendState):
        (rx::Renderer9::setDepthStencilState):
        (rx::Renderer9::setScissorRectangle):
        (rx::Renderer9::setViewport):
        (rx::Renderer9::applyPrimitiveType):
        (rx::Renderer9::getNullColorbuffer):
        (rx::Renderer9::applyRenderTarget):
        (rx::Renderer9::applyVertexBuffer):
        (rx::Renderer9::applyIndexBuffer):
        (rx::Renderer9::drawArrays):
        (rx::Renderer9::drawElements):
        (rx::Renderer9::drawLineLoop):
        (rx::drawPoints):
        (rx::Renderer9::drawIndexedPoints):
        (rx::Renderer9::applyShaders):
        (rx::Renderer9::applyUniforms):
        (rx::Renderer9::applyUniformnfv):
        (rx::Renderer9::applyUniformniv):
        (rx::Renderer9::applyUniformnbv):
        (rx::Renderer9::clear):
        (rx::Renderer9::markAllStateDirty):
        (rx::Renderer9::releaseDeviceResources):
        (rx::Renderer9::notifyDeviceLost):
        (rx::Renderer9::isDeviceLost):
        (rx::Renderer9::testDeviceLost):
        (rx::Renderer9::testDeviceResettable):
        (rx::Renderer9::resetDevice):
        (rx::Renderer9::getAdapterVendor):
        (rx::Renderer9::getRendererDescription):
        (rx::Renderer9::getAdapterIdentifier):
        (rx::Renderer9::getMultiSampleSupport):
        (rx::Renderer9::getBGRATextureSupport):
        (rx::Renderer9::getDXT1TextureSupport):
        (rx::Renderer9::getDXT3TextureSupport):
        (rx::Renderer9::getDXT5TextureSupport):
        (rx::Renderer9::getDepthTextureSupport):
        (rx::Renderer9::getFloat32TextureSupport):
        (rx::Renderer9::getFloat16TextureSupport):
        (rx::Renderer9::getLuminanceTextureSupport):
        (rx::Renderer9::getLuminanceAlphaTextureSupport):
        (rx::Renderer9::getTextureFilterAnisotropySupport):
        (rx::Renderer9::getTextureMaxAnisotropy):
        (rx::Renderer9::getEventQuerySupport):
        (rx::Renderer9::getMaxVertexTextureImageUnits):
        (rx::Renderer9::getMaxCombinedTextureImageUnits):
        (rx::Renderer9::getReservedVertexUniformVectors):
        (rx::Renderer9::getReservedFragmentUniformVectors):
        (rx::Renderer9::getMaxVertexUniformVectors):
        (rx::Renderer9::getMaxFragmentUniformVectors):
        (rx::Renderer9::getMaxVaryingVectors):
        (rx::Renderer9::getNonPower2TextureSupport):
        (rx::Renderer9::getOcclusionQuerySupport):
        (rx::Renderer9::getInstancingSupport):
        (rx::Renderer9::getShareHandleSupport):
        (rx::Renderer9::getDerivativeInstructionSupport):
        (rx::Renderer9::getPostSubBufferSupport):
        (rx::Renderer9::getMajorShaderModel):
        (rx::Renderer9::getMaxPointSize):
        (rx::Renderer9::getMaxViewportDimension):
        (rx::Renderer9::getMaxTextureWidth):
        (rx::Renderer9::getMaxTextureHeight):
        (rx::Renderer9::get32BitIndexSupport):
        (rx::Renderer9::getCapsDeclTypes):
        (rx::Renderer9::getMinSwapInterval):
        (rx::Renderer9::getMaxSwapInterval):
        (rx::Renderer9::getMaxSupportedSamples):
        (rx::Renderer9::getNearestSupportedSamples):
        (rx::Renderer9::getMaxRenderTargets):
        (rx::Renderer9::ConvertTextureInternalFormat):
        (rx::Renderer9::copyToRenderTarget):
        (rx::Renderer9::getBufferPool):
        (rx::Renderer9::copyImage):
        (rx::Renderer9::blitRect):
        (rx::Renderer9::readPixels):
        (rx::Renderer9::createRenderTarget):
        (rx::Renderer9::loadExecutable):
        (rx::Renderer9::compileToExecutable):
        (rx::Renderer9::boxFilter):
        (rx::Renderer9::getTexturePool):
        (rx::Renderer9::createImage):
        (rx::Renderer9::generateMipmap):
        (rx::Renderer9::createTextureStorage2D):
        (rx::Renderer9::createTextureStorageCube):
        (rx::Renderer9::getLUID):
        * src/libGLESv2/renderer/Renderer9.h: Added.
        (rx::Renderer9::getDevice):
        * src/libGLESv2/renderer/ShaderCache.h: Added.
        (rx::ShaderCache::ShaderCache):
        (rx::ShaderCache::~ShaderCache):
        (rx::ShaderCache::initialize):
        (rx::ShaderCache::create):
        (rx::ShaderCache::clear):
        (rx::ShaderCache::createShader):
        * src/libGLESv2/renderer/ShaderExecutable.h: Added.
        (rx::ShaderExecutable::ShaderExecutable):
        (rx::ShaderExecutable::~ShaderExecutable):
        (rx::ShaderExecutable::getFunction):
        (rx::ShaderExecutable::getLength):
        * src/libGLESv2/renderer/ShaderExecutable11.cpp: Added.
        (rx::ShaderExecutable11::ShaderExecutable11):
        (rx::ShaderExecutable11::~ShaderExecutable11):
        (rx::ShaderExecutable11::makeShaderExecutable11):
        (rx::ShaderExecutable11::getVertexShader):
        (rx::ShaderExecutable11::getPixelShader):
        (rx::ShaderExecutable11::getGeometryShader):
        (rx::ShaderExecutable11::getConstantBuffer):
        * src/libGLESv2/renderer/ShaderExecutable11.h: Added.
        * src/libGLESv2/renderer/ShaderExecutable9.cpp: Added.
        (rx::ShaderExecutable9::ShaderExecutable9):
        (rx::ShaderExecutable9::~ShaderExecutable9):
        (rx::ShaderExecutable9::makeShaderExecutable9):
        (rx::ShaderExecutable9::getVertexShader):
        (rx::ShaderExecutable9::getPixelShader):
        * src/libGLESv2/renderer/ShaderExecutable9.h: Added.
        * src/libGLESv2/renderer/SwapChain.h: Added.
        (rx::SwapChain::SwapChain):
        (rx::SwapChain::~SwapChain):
        (rx::SwapChain::getShareHandle):
        * src/libGLESv2/renderer/SwapChain11.cpp: Added.
        (rx::SwapChain11::SwapChain11):
        (rx::SwapChain11::~SwapChain11):
        (rx::SwapChain11::release):
        (rx::SwapChain11::releaseOffscreenTexture):
        (rx::SwapChain11::resetOffscreenTexture):
        (rx::SwapChain11::resize):
        (rx::SwapChain11::reset):
        (rx::SwapChain11::initPassThroughResources):
        (rx::SwapChain11::swapRect):
        (rx::SwapChain11::getOffscreenTexture):
        (rx::SwapChain11::getRenderTarget):
        (rx::SwapChain11::getRenderTargetShaderResource):
        (rx::SwapChain11::getDepthStencil):
        (rx::SwapChain11::getDepthStencilTexture):
        (rx::SwapChain11::makeSwapChain11):
        (rx::SwapChain11::recreate):
        * src/libGLESv2/renderer/SwapChain11.h: Added.
        (rx::SwapChain11::getWidth):
        (rx::SwapChain11::getHeight):
        * src/libGLESv2/renderer/SwapChain9.cpp: Added.
        (rx::SwapChain9::SwapChain9):
        (rx::SwapChain9::~SwapChain9):
        (rx::SwapChain9::release):
        (rx::convertInterval):
        (rx::SwapChain9::resize):
        (rx::SwapChain9::reset):
        (rx::SwapChain9::swapRect):
        (rx::SwapChain9::getRenderTarget):
        (rx::SwapChain9::getDepthStencil):
        (rx::SwapChain9::getOffscreenTexture):
        (rx::SwapChain9::makeSwapChain9):
        (rx::SwapChain9::recreate):
        * src/libGLESv2/renderer/SwapChain9.h: Added.
        * src/libGLESv2/renderer/TextureStorage.cpp: Added.
        (rx::TextureStorageInterface::TextureStorageInterface):
        (rx::TextureStorageInterface::~TextureStorageInterface):
        (rx::TextureStorageInterface::isRenderTarget):
        (rx::TextureStorageInterface::isManaged):
        (rx::TextureStorageInterface::getTextureSerial):
        (rx::TextureStorageInterface::issueTextureSerial):
        (rx::TextureStorageInterface::getLodOffset):
        (rx::TextureStorageInterface::levelCount):
        (rx::TextureStorageInterface2D::TextureStorageInterface2D):
        (rx::TextureStorageInterface2D::~TextureStorageInterface2D):
        (rx::TextureStorageInterface2D::getRenderTarget):
        (rx::TextureStorageInterface2D::generateMipmap):
        (rx::TextureStorageInterface2D::getRenderTargetSerial):
        (rx::TextureStorageInterfaceCube::TextureStorageInterfaceCube):
        (rx::TextureStorageInterfaceCube::~TextureStorageInterfaceCube):
        (rx::TextureStorageInterfaceCube::getRenderTarget):
        (rx::TextureStorageInterfaceCube::generateMipmap):
        (rx::TextureStorageInterfaceCube::getRenderTargetSerial):
        * src/libGLESv2/renderer/TextureStorage.h: Added.
        (rx::TextureStorage::TextureStorage):
        (rx::TextureStorage::~TextureStorage):
        (rx::TextureStorageInterface::getStorageInstance):
        * src/libGLESv2/renderer/TextureStorage11.cpp: Added.
        (rx::TextureStorage11::TextureStorage11):
        (rx::TextureStorage11::~TextureStorage11):
        (rx::TextureStorage11::makeTextureStorage11):
        (rx::TextureStorage11::GetTextureBindFlags):
        (rx::TextureStorage11::IsTextureFormatRenderable):
        (rx::TextureStorage11::getBindFlags):
        (rx::TextureStorage11::getBaseTexture):
        (rx::TextureStorage11::getLodOffset):
        (rx::TextureStorage11::isRenderTarget):
        (rx::TextureStorage11::isManaged):
        (rx::TextureStorage11::levelCount):
        (rx::TextureStorage11::getSubresourceIndex):
        (rx::TextureStorage11::updateSubresourceLevel):
        (rx::TextureStorage11::generateMipmapLayer):
        (rx::TextureStorage11_2D::TextureStorage11_2D):
        (rx::TextureStorage11_2D::~TextureStorage11_2D):
        (rx::TextureStorage11_2D::makeTextureStorage11_2D):
        (rx::TextureStorage11_2D::getRenderTarget):
        (rx::TextureStorage11_2D::getSRV):
        (rx::TextureStorage11_2D::generateMipmap):
        (rx::TextureStorage11_Cube::TextureStorage11_Cube):
        (rx::TextureStorage11_Cube::~TextureStorage11_Cube):
        (rx::TextureStorage11_Cube::makeTextureStorage11_Cube):
        (rx::TextureStorage11_Cube::getRenderTarget):
        (rx::TextureStorage11_Cube::getSRV):
        (rx::TextureStorage11_Cube::generateMipmap):
        * src/libGLESv2/renderer/TextureStorage11.h: Added.
        (rx::TextureStorage11::getRenderTarget):
        (rx::TextureStorage11::generateMipmap):
        * src/libGLESv2/renderer/TextureStorage9.cpp: Added.
        (rx::TextureStorage9::TextureStorage9):
        (rx::TextureStorage9::~TextureStorage9):
        (rx::TextureStorage9::makeTextureStorage9):
        (rx::TextureStorage9::GetTextureUsage):
        (rx::TextureStorage9::IsTextureFormatRenderable):
        (rx::TextureStorage9::isRenderTarget):
        (rx::TextureStorage9::isManaged):
        (rx::TextureStorage9::getPool):
        (rx::TextureStorage9::getUsage):
        (rx::TextureStorage9::getLodOffset):
        (rx::TextureStorage9::levelCount):
        (rx::TextureStorage9_2D::TextureStorage9_2D):
        (rx::TextureStorage9_2D::~TextureStorage9_2D):
        (rx::TextureStorage9_2D::makeTextureStorage9_2D):
        (rx::TextureStorage9_2D::getSurfaceLevel):
        (rx::TextureStorage9_2D::getRenderTarget):
        (rx::TextureStorage9_2D::generateMipmap):
        (rx::TextureStorage9_2D::getBaseTexture):
        (rx::TextureStorage9_2D::initializeRenderTarget):
        (rx::TextureStorage9_Cube::TextureStorage9_Cube):
        (rx::TextureStorage9_Cube::~TextureStorage9_Cube):
        (rx::TextureStorage9_Cube::makeTextureStorage9_Cube):
        (rx::TextureStorage9_Cube::getCubeMapSurface):
        (rx::TextureStorage9_Cube::getRenderTarget):
        (rx::TextureStorage9_Cube::generateMipmap):
        (rx::TextureStorage9_Cube::getBaseTexture):
        (rx::TextureStorage9_Cube::initializeRenderTarget):
        * src/libGLESv2/renderer/TextureStorage9.h: Added.
        (rx::TextureStorage9::getRenderTarget):
        (rx::TextureStorage9::generateMipmap):
        * src/libGLESv2/renderer/VertexBuffer.cpp: Added.
        (rx::VertexBuffer::VertexBuffer):
        (rx::VertexBuffer::~VertexBuffer):
        (rx::VertexBuffer::updateSerial):
        (rx::VertexBuffer::getSerial):
        (rx::VertexBufferInterface::VertexBufferInterface):
        (rx::VertexBufferInterface::~VertexBufferInterface):
        (rx::VertexBufferInterface::getSerial):
        (rx::VertexBufferInterface::getBufferSize):
        (rx::VertexBufferInterface::setBufferSize):
        (rx::VertexBufferInterface::getWritePosition):
        (rx::VertexBufferInterface::setWritePosition):
        (rx::VertexBufferInterface::discard):
        (rx::VertexBufferInterface::storeVertexAttributes):
        (rx::VertexBufferInterface::storeRawData):
        (rx::VertexBufferInterface::reserveVertexSpace):
        (rx::VertexBufferInterface::reserveRawDataSpace):
        (rx::VertexBufferInterface::getVertexBuffer):
        (rx::StreamingVertexBufferInterface::StreamingVertexBufferInterface):
        (rx::StreamingVertexBufferInterface::~StreamingVertexBufferInterface):
        (rx::StreamingVertexBufferInterface::reserveSpace):
        (rx::StaticVertexBufferInterface::StaticVertexBufferInterface):
        (rx::StaticVertexBufferInterface::~StaticVertexBufferInterface):
        (rx::StaticVertexBufferInterface::lookupAttribute):
        (rx::StaticVertexBufferInterface::reserveSpace):
        (rx::StaticVertexBufferInterface::storeVertexAttributes):
        * src/libGLESv2/renderer/VertexBuffer.h: Added.
        * src/libGLESv2/renderer/VertexBuffer11.cpp: Added.
        (rx::VertexBuffer11::VertexBuffer11):
        (rx::VertexBuffer11::~VertexBuffer11):
        (rx::VertexBuffer11::initialize):
        (rx::VertexBuffer11::makeVertexBuffer11):
        (rx::VertexBuffer11::storeVertexAttributes):
        (rx::VertexBuffer11::storeRawData):
        (rx::VertexBuffer11::getSpaceRequired):
        (rx::VertexBuffer11::requiresConversion):
        (rx::VertexBuffer11::getBufferSize):
        (rx::VertexBuffer11::setBufferSize):
        (rx::VertexBuffer11::discard):
        (rx::VertexBuffer11::getVertexSize):
        (rx::VertexBuffer11::getDXGIFormat):
        (rx::VertexBuffer11::getBuffer):
        (rx::copyVertexData):
        (rx::copyFixedVertexData):
        (rx::copyToFloatVertexData):
        (rx::VertexBuffer11::getVertexConversion):
        * src/libGLESv2/renderer/VertexBuffer11.h: Added.
        * src/libGLESv2/renderer/VertexBuffer9.cpp: Added.
        (rx::VertexBuffer9::VertexBuffer9):
        (rx::VertexBuffer9::~VertexBuffer9):
        (rx::VertexBuffer9::initialize):
        (rx::VertexBuffer9::makeVertexBuffer9):
        (rx::VertexBuffer9::storeVertexAttributes):
        (rx::VertexBuffer9::storeRawData):
        (rx::VertexBuffer9::getSpaceRequired):
        (rx::VertexBuffer9::requiresConversion):
        (rx::VertexBuffer9::getVertexSize):
        (rx::VertexBuffer9::getDeclType):
        (rx::VertexBuffer9::getBufferSize):
        (rx::VertexBuffer9::setBufferSize):
        (rx::VertexBuffer9::discard):
        (rx::VertexBuffer9::getBuffer):
        (rx::VertexBuffer9::initializeTranslations):
        (rx::VertexBuffer9::typeIndex):
        (rx::VertexBuffer9::formatConverter):
        (rx::VertexBuffer9::spaceRequired):
        * src/libGLESv2/renderer/VertexBuffer9.h: Added.
        * src/libGLESv2/renderer/VertexDataManager.cpp: Added.
        (rx::elementsInBuffer):
        (rx::VertexDataManager::VertexDataManager):
        (rx::VertexDataManager::~VertexDataManager):
        (rx::directStoragePossible):
        (rx::VertexDataManager::prepareVertexData):
        * src/libGLESv2/renderer/VertexDataManager.h: Added.
        * src/libGLESv2/renderer/VertexDeclarationCache.cpp: Added.
        (rx::VertexDeclarationCache::VertexDeclarationCache):
        (rx::VertexDeclarationCache::~VertexDeclarationCache):
        (rx::VertexDeclarationCache::applyDeclaration):
        (rx::VertexDeclarationCache::markStateDirty):
        * src/libGLESv2/renderer/VertexDeclarationCache.h: Added.
        * src/libGLESv2/renderer/generatemip.h: Added.
        (rx::L8::average):
        (rx::A8L8::average):
        (rx::A8R8G8B8::average):
        (rx::A16B16G16R16F::average):
        (rx::R16F::average):
        (rx::R16G16F::average):
        (rx::A32B32G32R32F::average):
        (rx::R32F::average):
        (rx::R32G32F::average):
        (rx::R32G32B32F::average):
        (rx::GenerateMip):
        * src/libGLESv2/renderer/renderer11_utils.cpp: Added.
        (gl_d3d11::ConvertBlendFunc):
        (gl_d3d11::ConvertBlendOp):
        (gl_d3d11::ConvertColorMask):
        (gl_d3d11::ConvertCullMode):
        (gl_d3d11::ConvertComparison):
        (gl_d3d11::ConvertDepthMask):
        (gl_d3d11::ConvertStencilMask):
        (gl_d3d11::ConvertStencilOp):
        (gl_d3d11::ConvertFilter):
        (gl_d3d11::ConvertTextureWrap):
        (gl_d3d11::ConvertMinLOD):
        (gl_d3d11::ConvertMaxLOD):
        (d3d11_gl::ConvertBackBufferFormat):
        (d3d11_gl::ConvertDepthStencilFormat):
        (d3d11_gl::ConvertRenderbufferFormat):
        (d3d11_gl::ConvertTextureInternalFormat):
        (gl_d3d11::ConvertRenderbufferFormat):
        (gl_d3d11::ConvertTextureFormat):
        (d3d11::SetPositionTexCoordVertex):
        (d3d11::SetPositionDepthColorVertex):
        (d3d11::ComputePixelSizeBits):
        (d3d11::ComputeBlockSizeBits):
        (d3d11::IsCompressed):
        (d3d11::GetTextureFormatDimensionAlignment):
        (d3d11::IsDepthStencilFormat):
        (d3d11::GetDepthTextureFormat):
        (d3d11::GetDepthShaderResourceFormat):
        (d3d11::SetDebugName):
        * src/libGLESv2/renderer/renderer11_utils.h: Added.
        (d3d11::isDeviceLostError):
        * src/libGLESv2/renderer/renderer9_utils.cpp: Added.
        (gl_d3d9::ConvertComparison):
        (gl_d3d9::ConvertColor):
        (gl_d3d9::ConvertBlendFunc):
        (gl_d3d9::ConvertBlendOp):
        (gl_d3d9::ConvertStencilOp):
        (gl_d3d9::ConvertTextureWrap):
        (gl_d3d9::ConvertCullMode):
        (gl_d3d9::ConvertCubeFace):
        (gl_d3d9::ConvertColorMask):
        (gl_d3d9::ConvertMagFilter):
        (gl_d3d9::ConvertMinFilter):
        (gl_d3d9::ConvertRenderbufferFormat):
        (gl_d3d9::GetMultisampleTypeFromSamples):
        (d3d9_gl::GetStencilSize):
        (d3d9_gl::GetAlphaSize):
        (d3d9_gl::GetSamplesFromMultisampleType):
        (d3d9_gl::IsFormatChannelEquivalent):
        (d3d9_gl::ConvertBackBufferFormat):
        (d3d9_gl::ConvertDepthStencilFormat):
        (d3d9_gl::ConvertRenderTargetFormat):
        (d3d9_gl::GetEquivalentFormat):
        (d3d9::IsCompressedFormat):
        (d3d9::ComputeRowSize):
        * src/libGLESv2/renderer/renderer9_utils.h: Added.
        (d3d9::isDeviceLostError):
        * src/libGLESv2/renderer/shaders: Added.
        * src/libGLESv2/renderer/shaders/Blit.ps: Added.
        * src/libGLESv2/renderer/shaders/Blit.vs: Added.
        * src/libGLESv2/renderer/shaders/Clear11.hlsl: Added.
        * src/libGLESv2/renderer/shaders/Passthrough11.hlsl: Added.
        * src/libGLESv2/renderer/shaders/compiled: Added.
        * src/libGLESv2/renderer/shaders/compiled/clear11vs.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/clearmultiple11ps.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/clearsingle11ps.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/componentmaskps.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/flipyvs.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/luminanceps.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/passthrough11vs.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/passthroughlum11ps.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/passthroughlumalpha11ps.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/passthroughps.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/passthroughrgb11ps.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/passthroughrgba11ps.h: Added.
        * src/libGLESv2/renderer/shaders/compiled/standardvs.h: Added.
        * src/libGLESv2/renderer/shaders/generate_shaders.bat: Added.
        * src/libGLESv2/renderer/vertexconversion.h: Added.
        (rx::Identity::convert):
        (rx::Cast::convert):
        (rx::Normalize::convert):
        (rx::FixedToFloat::convert):
        (rx::SimpleDefaultValues::zero):
        (rx::SimpleDefaultValues::one):
        (rx::NormalizedDefaultValues::zero):
        (rx::NormalizedDefaultValues::one):
        (rx::VertexDataConverter::convertArray):
        (rx::VertexDataConverter::pointerAddBytes):
        (rx::VertexDataConverter::copyComponent):
        * src/libGLESv2/resource.h: Added.
        * src/libGLESv2/utilities.cpp: Added.
        (gl::UniformComponentCount):
        (gl::UniformComponentType):
        (gl::UniformComponentSize):
        (gl::UniformInternalSize):
        (gl::UniformExternalSize):
        (gl::VariableRowCount):
        (gl::VariableColumnCount):
        (gl::AllocateFirstFreeBits):
        (gl::ComputePitch):
        (gl::ComputeCompressedPitch):
        (gl::ComputeCompressedSize):
        (gl::IsCompressed):
        (gl::IsDepthTexture):
        (gl::IsStencilTexture):
        (gl::MakeValidSize):
        (gl::ComputePixelSize):
        (gl::IsCubemapTextureTarget):
        (gl::IsInternalTextureTarget):
        (gl::ConvertSizedInternalFormat):
        (gl::ExtractFormat):
        (gl::ExtractType):
        (gl::IsColorRenderable):
        (gl::IsDepthRenderable):
        (gl::IsStencilRenderable):
        (gl::IsFloat32Format):
        (gl::IsFloat16Format):
        (gl::GetAlphaSize):
        (gl::GetRedSize):
        (gl::GetGreenSize):
        (gl::GetBlueSize):
        (gl::GetDepthSize):
        (gl::GetStencilSize):
        (gl::IsTriangleMode):
        (getTempPath):
        (writeFile):
        * src/libGLESv2/utilities.h: Added.
        * src/third_party/murmurhash: Added.
        * src/third_party/murmurhash/LICENSE: Added.
        * src/third_party/murmurhash/MurmurHash3.cpp: Added, replaced tabs with spaces.
        (rotl32):
        (rotl64):
        (getblock):
        (fmix):
        (MurmurHash3_x86_32):
        (MurmurHash3_x86_128):
        (MurmurHash3_x64_128):
        * src/third_party/murmurhash/MurmurHash3.h: Added, replaced tabs with spaces.

2013-07-20  Dean Jackson  <dino@apple.com>

        Updated ANGLE is leaking like a sieve
        https://bugs.webkit.org/show_bug.cgi?id=118939

        Rollout 152863, r152821, r152929 and r152755.

        * ANGLE.plist:
        * ANGLE.xcodeproj/project.pbxproj:
        * DerivedSources.make: Removed.
        * GNUmakefile.am:
        * Target.pri:
        * include/GLSLANG/ShaderLang.h:
        * src/compiler/BaseTypes.h:
        (getQualifierString):
        * src/compiler/Common.h:
        (EncodeSourceLoc):
        (DecodeSourceLoc):
        * src/compiler/Compiler.cpp:
        (TCompiler::TCompiler):
        (TCompiler::Init):
        (TCompiler::compile):
        (TCompiler::detectRecursion):
        * src/compiler/ConstantUnion.h:
        (ConstantUnion::ConstantUnion):
        * src/compiler/DetectCallDepth.cpp: Removed.
        * src/compiler/DetectRecursion.cpp: Added.
        (DetectRecursion::FunctionNode::FunctionNode):
        (DetectRecursion::FunctionNode::getName):
        (DetectRecursion::FunctionNode::addCallee):
        (DetectRecursion::FunctionNode::detectRecursion):
        (DetectRecursion::DetectRecursion):
        (DetectRecursion::~DetectRecursion):
        (DetectRecursion::visitAggregate):
        (DetectRecursion::detectRecursion):
        (DetectRecursion::findFunctionByName):
        * src/compiler/DetectRecursion.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/DetectCallDepth.h.
        * src/compiler/Diagnostics.cpp:
        (TDiagnostics::writeInfo):
        * src/compiler/ForLoopUnroll.cpp:
        (ForLoopUnroll::evaluateIntConstant):
        * src/compiler/InfoSink.cpp:
        (TInfoSinkBase::prefix):
        (TInfoSinkBase::location):
        (TInfoSinkBase::message):
        * src/compiler/InfoSink.h:
        * src/compiler/Initialize.cpp:
        (BuiltInFunctionsCommon):
        (BuiltInFunctionsVertex):
        (TBuiltIns::initialize):
        (IdentifyBuiltIns):
        (InitExtensionBehavior):
        * src/compiler/Intermediate.cpp:
        (TIntermediate::addSymbol):
        (TIntermediate::addBinaryMath):
        (TIntermediate::addAssign):
        (TIntermediate::addIndex):
        (TIntermediate::addUnaryMath):
        (TIntermediate::setAggregateOperator):
        (TIntermediate::addConversion):
        (TIntermediate::growAggregate):
        (TIntermediate::makeAggregate):
        (TIntermediate::addSelection):
        (TIntermediate::addComma):
        (TIntermediate::addConstantUnion):
        (TIntermediate::addSwizzle):
        (TIntermediate::addLoop):
        (TIntermediate::addBranch):
        (TIntermUnary::promote):
        (TIntermBinary::promote):
        (CompareStruct):
        (CompareStructure):
        (TIntermConstantUnion::fold):
        (TIntermediate::promoteConstantUnion):
        * src/compiler/OutputGLSL.cpp:
        (TOutputGLSL::writeVariablePrecision):
        * src/compiler/OutputGLSL.h:
        * src/compiler/OutputGLSLBase.cpp:
        (TOutputGLSLBase::writeVariableType):
        (TOutputGLSLBase::writeConstantUnion):
        (TOutputGLSLBase::visitBinary):
        (TOutputGLSLBase::visitAggregate):
        (TOutputGLSLBase::getTypeName):
        (TOutputGLSLBase::hashFunctionName):
        * src/compiler/OutputGLSLBase.h:
        * src/compiler/OutputHLSL.cpp:
        (sh::OutputHLSL::OutputHLSL):
        (sh::OutputHLSL::header):
        (sh::OutputHLSL::visitSymbol):
        (sh::OutputHLSL::visitBinary):
        (sh::OutputHLSL::visitAggregate):
        (sh::OutputHLSL::visitSelection):
        (sh::OutputHLSL::visitLoop):
        (sh::OutputHLSL::handleExcessiveLoop):
        (sh::OutputHLSL::typeString):
        (sh::OutputHLSL::initializer):
        (sh::OutputHLSL::addConstructor):
        (sh::OutputHLSL::writeConstantUnion):
        (sh::OutputHLSL::decorateField):
        * src/compiler/OutputHLSL.h:
        * src/compiler/ParseHelper.cpp:
        (TParseContext::parseVectorFields):
        (TParseContext::parseMatrixFields):
        (TParseContext::error):
        (TParseContext::warning):
        (TParseContext::assignError):
        (TParseContext::unaryOpError):
        (TParseContext::binaryOpError):
        (TParseContext::precisionErrorCheck):
        (TParseContext::lValueErrorCheck):
        (TParseContext::globalErrorCheck):
        (TParseContext::reservedErrorCheck):
        (TParseContext::constructorErrorCheck):
        (TParseContext::voidErrorCheck):
        (TParseContext::boolErrorCheck):
        (TParseContext::samplerErrorCheck):
        (TParseContext::structQualifierErrorCheck):
        (TParseContext::parameterSamplerErrorCheck):
        (TParseContext::containsSampler):
        (TParseContext::arraySizeErrorCheck):
        (TParseContext::arrayQualifierErrorCheck):
        (TParseContext::arrayTypeErrorCheck):
        (TParseContext::arrayErrorCheck):
        (TParseContext::arraySetMaxSize):
        (TParseContext::nonInitConstErrorCheck):
        (TParseContext::nonInitErrorCheck):
        (TParseContext::paramErrorCheck):
        (TParseContext::extensionErrorCheck):
        (TParseContext::handleExtensionDirective):
        (TParseContext::handlePragmaDirective):
        (TParseContext::findFunction):
        (TParseContext::executeInitializer):
        (TParseContext::addConstructor):
        (TParseContext::constructBuiltIn):
        (TParseContext::constructStruct):
        (TParseContext::addConstVectorNode):
        (TParseContext::addConstMatrixNode):
        (TParseContext::addConstArrayNode):
        (TParseContext::addConstStruct):
        (TParseContext::enterStructDeclaration):
        (TParseContext::structNestingErrorCheck):
        * src/compiler/ParseHelper.h:
        (TParseContext::TParseContext):
        (TParseContext::pragma):
        * src/compiler/PoolAlloc.cpp:
        (TPoolAllocator::allocate):
        * src/compiler/ShHandle.h:
        * src/compiler/ShaderLang.cpp:
        (ShInitBuiltInResources):
        * src/compiler/SymbolTable.cpp:
        (TType::TType):
        (TType::buildMangledName):
        (TType::getStructSize):
        (TType::computeDeepestStructNesting):
        (TType::isStructureContainingArrays):
        (TSymbolTableLevel::relateToExtension):
        (TSymbol::TSymbol):
        (TVariable::TVariable):
        (TVariable::clone):
        (TFunction::TFunction):
        (TFunction::clone):
        (TSymbolTableLevel::clone):
        (TSymbolTable::copyTable):
        * src/compiler/SymbolTable.h:
        (TVariable::TVariable):
        (TVariable::updateArrayInformationType):
        (TVariable::getArrayInformationType):
        (TParameter::copyParam):
        (TFunction::relateToExtension):
        (TFunction::getExtension):
        * src/compiler/Types.h:
        (NewPoolTTypeList):
        (TType::TType):
        (TType::copyType):
        (TType::clone):
        (TType::getObjectSize):
        (TType::getMaxArraySize):
        (TType::setMaxArraySize):
        (TType::clearArrayness):
        (TType::setArrayInformationType):
        (TType::getArrayInformationType):
        (TType::getStruct):
        (TType::setStruct):
        (TType::getTypeName):
        (TType::setTypeName):
        (TType::isField):
        (TType::getFieldName):
        (TType::setFieldName):
        (TType::getMangledName):
        (TType::getDeepestStructNesting):
        (TPublicType::setBasic):
        * src/compiler/VariableInfo.cpp:
        (getUserDefinedVariableInfo):
        * src/compiler/builtin_symbol_table.cpp: Removed.
        * src/compiler/builtin_symbol_table.h: Removed.
        * src/compiler/builtin_symbols.json: Removed.
        * src/compiler/generate_builtin_symbol_table.py: Removed.
        * src/compiler/glslang.l:
        * src/compiler/glslang.y:
        * src/compiler/glslang_lex.cpp:
        (yy_get_previous_state):
        (yy_try_NUL_trans):
        (yy_push_state):
        (yy_pop_state):
        (yy_top_state):
        (string_input):
        (check_type):
        (reserved_word):
        (yyerror):
        (glslang_scan):
        * src/compiler/glslang_tab.cpp:
        * src/compiler/glslang_tab.h:
        * src/compiler/intermOut.cpp:
        (TOutputTraverser::visitUnary):
        (TOutputTraverser::visitAggregate):
        (TOutputTraverser::visitConstantUnion):
        * src/compiler/intermediate.h:
        (TIntermNode::TIntermNode):
        (TIntermNode::getLine):
        (TIntermNode::setLine):
        (TIntermNode::~TIntermNode):
        (TIntermConstantUnion::setUnionArrayPointer):
        (TIntermAggregate::TIntermAggregate):
        (TIntermAggregate::setEndLine):
        (TIntermAggregate::getEndLine):
        (TIntermTraverser::TIntermTraverser):
        (TIntermTraverser::incrementDepth):
        * src/compiler/localintermediate.h:
        * src/compiler/parseConst.cpp:
        (TConstTraverser::visitSymbol):
        (TConstTraverser::visitBinary):
        (TConstTraverser::visitUnary):
        (TConstTraverser::visitAggregate):
        (TConstTraverser::visitSelection):
        (TConstTraverser::visitConstantUnion):
        (TConstTraverser::visitLoop):
        (TConstTraverser::visitBranch):
        (TIntermediate::parseConstTree):
        * src/compiler/timing/RestrictVertexShaderTiming.cpp:
        (RestrictVertexShaderTiming::visitSymbol):
        * src/libEGL/Config.cpp: Removed.
        * src/libEGL/Config.h: Removed.
        * src/libEGL/Display.cpp: Removed.
        * src/libEGL/Display.h: Removed.
        * src/libEGL/README: Added.
        * src/libEGL/ShaderCache.h: Removed.
        * src/libEGL/Surface.cpp: Removed.
        * src/libEGL/Surface.h: Removed.
        * src/libEGL/libEGL.cpp: Removed.
        * src/libEGL/libEGL.def: Removed.
        * src/libEGL/libEGL.rc: Removed.
        * src/libEGL/libEGL.vcxproj: Removed.
        * src/libEGL/libEGL.vcxproj.filters: Removed.
        * src/libEGL/main.cpp: Removed.
        * src/libEGL/main.h: Removed.
        * src/libEGL/resource.h: Removed.
        * src/libGLESv2/BinaryStream.h: Removed.
        * src/libGLESv2/Blit.cpp: Removed.
        * src/libGLESv2/Blit.h: Removed.
        * src/libGLESv2/Buffer.cpp: Removed.
        * src/libGLESv2/Buffer.h: Removed.
        * src/libGLESv2/Context.cpp: Removed.
        * src/libGLESv2/Context.h: Removed.
        * src/libGLESv2/D3DConstantTable.cpp: Removed.
        * src/libGLESv2/D3DConstantTable.h: Removed.
        * src/libGLESv2/Fence.cpp: Removed.
        * src/libGLESv2/Fence.h: Removed.
        * src/libGLESv2/Float16ToFloat32.cpp: Removed.
        * src/libGLESv2/Float16ToFloat32.py: Removed.
        * src/libGLESv2/Framebuffer.cpp: Removed.
        * src/libGLESv2/Framebuffer.h: Removed.
        * src/libGLESv2/HandleAllocator.cpp: Removed.
        * src/libGLESv2/HandleAllocator.h: Removed.
        * src/libGLESv2/IndexDataManager.cpp: Removed.
        * src/libGLESv2/IndexDataManager.h: Removed.
        * src/libGLESv2/Program.cpp: Removed.
        * src/libGLESv2/Program.h: Removed.
        * src/libGLESv2/ProgramBinary.cpp: Removed.
        * src/libGLESv2/ProgramBinary.h: Removed.
        * src/libGLESv2/Query.cpp: Removed.
        * src/libGLESv2/Query.h: Removed.
        * src/libGLESv2/README: Added.
        * src/libGLESv2/Renderbuffer.cpp: Removed.
        * src/libGLESv2/Renderbuffer.h: Removed.
        * src/libGLESv2/ResourceManager.cpp: Removed.
        * src/libGLESv2/ResourceManager.h: Removed.
        * src/libGLESv2/Shader.cpp: Removed.
        * src/libGLESv2/Shader.h: Removed.
        * src/libGLESv2/Texture.cpp: Removed.
        * src/libGLESv2/Texture.h: Removed.
        * src/libGLESv2/TextureSSE2.cpp: Removed.
        * src/libGLESv2/VertexDataManager.cpp: Removed.
        * src/libGLESv2/VertexDataManager.h: Removed.
        * src/libGLESv2/libGLESv2.cpp: Removed.
        * src/libGLESv2/libGLESv2.def: Removed.
        * src/libGLESv2/libGLESv2.rc: Removed.
        * src/libGLESv2/libGLESv2.vcxproj: Removed.
        * src/libGLESv2/libGLESv2.vcxproj.filters: Removed.
        * src/libGLESv2/main.cpp: Removed.
        * src/libGLESv2/main.h: Removed.
        * src/libGLESv2/mathutil.h: Removed.
        * src/libGLESv2/resource.h: Removed.
        * src/libGLESv2/shaders/Blit.ps: Removed.
        * src/libGLESv2/shaders/Blit.vs: Removed.
        * src/libGLESv2/shaders/componentmaskps.h: Removed.
        * src/libGLESv2/shaders/flipyvs.h: Removed.
        * src/libGLESv2/shaders/generate_shaders.bat: Removed.
        * src/libGLESv2/shaders/luminanceps.h: Removed.
        * src/libGLESv2/shaders/passthroughps.h: Removed.
        * src/libGLESv2/shaders/standardvs.h: Removed.
        * src/libGLESv2/utilities.cpp: Removed.
        * src/libGLESv2/utilities.h: Removed.
        * src/libGLESv2/vertexconversion.h: Removed.

2013-07-19  Alex Christensen  <achristensen@apple.com>

        Generate derived files in ANGLE at build time rather than when updating from upstream.
        https://bugs.webkit.org/show_bug.cgi?id=118872

        Reviewed by Mark Rowe.

        * ANGLE.xcodeproj/project.pbxproj: Made Derived Sources target which calls DerivedSources.make,
        moved generated files into Derived Sources group.
        * DerivedSources.make: Added.

2013-07-18  Alex Christensen  <achristensen@apple.com>

        Added previously unincluded files from ANGLE r2426 with these exceptions:
        No gyp files are included.  No WebKit ports use them.
        ANGLE.sln is not included.  I will not use that.
        translator_common and translator_hlsl projects and filters are not included.
        I will need to make a customized translator  project that uses the GLSL translator instead of the HLSL.
        https://bugs.webkit.org/show_bug.cgi?id=118833

        Reviewed by Dean Jackson.

        * src/compiler/builtin_symbols.json: Added.
        * src/compiler/generate_builtin_symbol_table.py: Added.
        (parseBuiltin):
        * src/libEGL: Replaced.
        * src/libEGL/Config.cpp: Added.
        (egl::Config::Config):
        (egl::Config::setDefaults):
        (egl::Config::set):
        (egl::Config::getHandle):
        (egl::SortConfig::SortConfig):
        (egl::SortConfig::scanForWantedComponents):
        (egl::SortConfig::wantedComponentsSize):
        (egl::SortConfig::operator()):
        (egl::ConfigSet::ConfigSet):
        (egl::ConfigSet::add):
        (egl::ConfigSet::size):
        (egl::ConfigSet::getConfigs):
        (egl::ConfigSet::get):
        * src/libEGL/Config.h: Added.
        * src/libEGL/Display.cpp: Added.
        (egl::Display::getDisplay):
        (egl::Display::Display):
        (egl::Display::~Display):
        (egl::Display::initialize):
        (egl::Display::terminate):
        (egl::Display::startScene):
        (egl::Display::endScene):
        (egl::Display::getConfigs):
        (egl::Display::getConfigAttrib):
        (egl::Display::createDevice):
        (egl::Display::initializeDevice):
        (egl::Display::resetDevice):
        (egl::Display::createWindowSurface):
        (egl::Display::createOffscreenSurface):
        (egl::Display::createContext):
        (egl::Display::restoreLostDevice):
        (egl::Display::destroySurface):
        (egl::Display::destroyContext):
        (egl::Display::notifyDeviceLost):
        (egl::Display::isDeviceLost):
        (egl::Display::isInitialized):
        (egl::Display::isValidConfig):
        (egl::Display::isValidContext):
        (egl::Display::isValidSurface):
        (egl::Display::hasExistingWindowSurface):
        (egl::Display::getMinSwapInterval):
        (egl::Display::getMaxSwapInterval):
        (egl::Display::getDevice):
        (egl::Display::getDeviceCaps):
        (egl::Display::getAdapterIdentifier):
        (egl::Display::testDeviceLost):
        (egl::Display::testDeviceResettable):
        (egl::Display::sync):
        (egl::Display::allocateEventQuery):
        (egl::Display::freeEventQuery):
        (egl::Display::getMultiSampleSupport):
        (egl::Display::getDXT1TextureSupport):
        (egl::Display::getDXT3TextureSupport):
        (egl::Display::getDXT5TextureSupport):
        (egl::Display::getDepthTextureSupport):
        (egl::Display::getFloat32TextureSupport):
        (egl::Display::getFloat16TextureSupport):
        (egl::Display::getLuminanceTextureSupport):
        (egl::Display::getLuminanceAlphaTextureSupport):
        (egl::Display::getTextureFilterAnisotropySupport):
        (egl::Display::getBufferPool):
        (egl::Display::getTexturePool):
        (egl::Display::getEventQuerySupport):
        (egl::Display::getDefaultPresentParameters):
        (egl::Display::initExtensionString):
        (egl::Display::getExtensionString):
        (egl::Display::initVendorString):
        (egl::Display::getVendorString):
        (egl::Display::shareHandleSupported):
        (egl::Display::createVertexShader):
        (egl::Display::compileShaderSource):
        (egl::Display::createPixelShader):
        (egl::Display::getVertexTextureSupport):
        (egl::Display::getNonPower2TextureSupport):
        (egl::Display::getOcclusionQuerySupport):
        (egl::Display::getInstancingSupport):
        * src/libEGL/Display.h: Added.
        (getComparableOSVersion):
        (egl::Display::isD3d9ExDevice):
        * src/libEGL/README: Removed.
        * src/libEGL/ShaderCache.h: Added.
        (egl::ShaderCache::ShaderCache):
        (egl::ShaderCache::~ShaderCache):
        (egl::ShaderCache::initialize):
        (egl::ShaderCache::create):
        (egl::ShaderCache::clear):
        (egl::ShaderCache::createShader):
        * src/libEGL/Surface.cpp: Added.
        (egl::Surface::Surface):
        (egl::Surface::~Surface):
        (egl::Surface::initialize):
        (egl::Surface::release):
        (egl::Surface::resetSwapChain):
        (egl::Surface::swapRect):
        (egl::Surface::getWindowHandle):
        (egl::SurfaceWindowProc):
        (egl::Surface::subclassWindow):
        (egl::Surface::unsubclassWindow):
        (egl::Surface::checkForOutOfDateSwapChain):
        (egl::Surface::convertInterval):
        (egl::Surface::swap):
        (egl::Surface::postSubBuffer):
        (egl::Surface::getWidth):
        (egl::Surface::getHeight):
        (egl::Surface::isPostSubBufferSupported):
        (egl::Surface::getRenderTarget):
        (egl::Surface::getDepthStencil):
        (egl::Surface::getOffscreenTexture):
        (egl::Surface::setSwapInterval):
        (egl::Surface::getTextureFormat):
        (egl::Surface::getTextureTarget):
        (egl::Surface::setBoundTexture):
        (egl::Surface::getBoundTexture):
        (egl::Surface::getFormat):
        * src/libEGL/Surface.h: Added.
        (egl::Surface::getShareHandle):
        * src/libEGL/libEGL.cpp: Added.
        (validateDisplay):
        (validateConfig):
        (validateContext):
        (validateSurface):
        * src/libEGL/libEGL.def: Added.
        * src/libEGL/libEGL.rc: Added.
        * src/libEGL/libEGL.vcxproj: Added.
        * src/libEGL/libEGL.vcxproj.filters: Added.
        * src/libEGL/main.cpp: Added.
        (DllMain):
        (egl::setCurrentError):
        (egl::getCurrentError):
        (egl::setCurrentAPI):
        (egl::getCurrentAPI):
        (egl::setCurrentDisplay):
        (egl::getCurrentDisplay):
        (egl::setCurrentDrawSurface):
        (egl::getCurrentDrawSurface):
        (egl::setCurrentReadSurface):
        (egl::getCurrentReadSurface):
        (error):
        * src/libEGL/main.h: Added.
        (error):
        (success):
        * src/libEGL/resource.h: Added.
        * src/libGLESv2: Replaced.
        * src/libGLESv2/BinaryStream.h: Added.
        (gl::BinaryInputStream::BinaryInputStream):
        (gl::BinaryInputStream::read):
        (gl::BinaryInputStream::skip):
        (gl::BinaryInputStream::offset):
        (gl::BinaryInputStream::error):
        (gl::BinaryInputStream::endOfStream):
        (gl::BinaryOutputStream::BinaryOutputStream):
        (gl::BinaryOutputStream::write):
        (gl::BinaryOutputStream::length):
        (gl::BinaryOutputStream::data):
        * src/libGLESv2/Blit.cpp: Added.
        (gl::Blit::Blit):
        (gl::Blit::~Blit):
        (gl::Blit::initGeometry):
        (gl::Blit::setShader):
        (gl::Blit::setVertexShader):
        (gl::Blit::setPixelShader):
        (gl::Blit::getSurfaceRect):
        (gl::Blit::boxFilter):
        (gl::Blit::copy):
        (gl::Blit::formatConvert):
        (gl::Blit::setFormatConvertShaders):
        (gl::Blit::copySurfaceToTexture):
        (gl::Blit::setViewport):
        (gl::Blit::setCommonBlitState):
        (gl::Blit::render):
        (gl::Blit::saveState):
        (gl::Blit::restoreState):
        * src/libGLESv2/Blit.h: Added.
        * src/libGLESv2/Buffer.cpp: Added.
        (gl::Buffer::Buffer):
        (gl::Buffer::~Buffer):
        (gl::Buffer::bufferData):
        (gl::Buffer::bufferSubData):
        (gl::Buffer::getStaticVertexBuffer):
        (gl::Buffer::getStaticIndexBuffer):
        (gl::Buffer::invalidateStaticData):
        (gl::Buffer::promoteStaticUsage):
        * src/libGLESv2/Buffer.h: Added.
        (gl::Buffer::data):
        (gl::Buffer::size):
        (gl::Buffer::usage):
        * src/libGLESv2/Context.cpp: Added.
        (gl::makeStaticString):
        (gl::Context::Context):
        (gl::Context::~Context):
        (gl::Context::makeCurrent):
        (gl::Context::markAllStateDirty):
        (gl::Context::markDxUniformsDirty):
        (gl::Context::markContextLost):
        (gl::Context::isContextLost):
        (gl::Context::setClearColor):
        (gl::Context::setClearDepth):
        (gl::Context::setClearStencil):
        (gl::Context::setCullFace):
        (gl::Context::isCullFaceEnabled):
        (gl::Context::setCullMode):
        (gl::Context::setFrontFace):
        (gl::Context::setDepthTest):
        (gl::Context::isDepthTestEnabled):
        (gl::Context::setDepthFunc):
        (gl::Context::setDepthRange):
        (gl::Context::setBlend):
        (gl::Context::isBlendEnabled):
        (gl::Context::setBlendFactors):
        (gl::Context::setBlendColor):
        (gl::Context::setBlendEquation):
        (gl::Context::setStencilTest):
        (gl::Context::isStencilTestEnabled):
        (gl::Context::setStencilParams):
        (gl::Context::setStencilBackParams):
        (gl::Context::setStencilWritemask):
        (gl::Context::setStencilBackWritemask):
        (gl::Context::setStencilOperations):
        (gl::Context::setStencilBackOperations):
        (gl::Context::setPolygonOffsetFill):
        (gl::Context::isPolygonOffsetFillEnabled):
        (gl::Context::setPolygonOffsetParams):
        (gl::Context::setSampleAlphaToCoverage):
        (gl::Context::isSampleAlphaToCoverageEnabled):
        (gl::Context::setSampleCoverage):
        (gl::Context::isSampleCoverageEnabled):
        (gl::Context::setSampleCoverageParams):
        (gl::Context::setScissorTest):
        (gl::Context::isScissorTestEnabled):
        (gl::Context::setDither):
        (gl::Context::isDitherEnabled):
        (gl::Context::setLineWidth):
        (gl::Context::setGenerateMipmapHint):
        (gl::Context::setFragmentShaderDerivativeHint):
        (gl::Context::setViewportParams):
        (gl::Context::setScissorParams):
        (gl::Context::setColorMask):
        (gl::Context::setDepthMask):
        (gl::Context::setActiveSampler):
        (gl::Context::getReadFramebufferHandle):
        (gl::Context::getDrawFramebufferHandle):
        (gl::Context::getRenderbufferHandle):
        (gl::Context::getArrayBufferHandle):
        (gl::Context::getActiveQuery):
        (gl::Context::setEnableVertexAttribArray):
        (gl::Context::getVertexAttribState):
        (gl::Context::setVertexAttribState):
        (gl::Context::getVertexAttribPointer):
        (gl::Context::getVertexAttributes):
        (gl::Context::setPackAlignment):
        (gl::Context::getPackAlignment):
        (gl::Context::setUnpackAlignment):
        (gl::Context::getUnpackAlignment):
        (gl::Context::setPackReverseRowOrder):
        (gl::Context::getPackReverseRowOrder):
        (gl::Context::createBuffer):
        (gl::Context::createProgram):
        (gl::Context::createShader):
        (gl::Context::createTexture):
        (gl::Context::createRenderbuffer):
        (gl::Context::createFramebuffer):
        (gl::Context::createFence):
        (gl::Context::createQuery):
        (gl::Context::deleteBuffer):
        (gl::Context::deleteShader):
        (gl::Context::deleteProgram):
        (gl::Context::deleteTexture):
        (gl::Context::deleteRenderbuffer):
        (gl::Context::deleteFramebuffer):
        (gl::Context::deleteFence):
        (gl::Context::deleteQuery):
        (gl::Context::getBuffer):
        (gl::Context::getShader):
        (gl::Context::getProgram):
        (gl::Context::getTexture):
        (gl::Context::getRenderbuffer):
        (gl::Context::getReadFramebuffer):
        (gl::Context::getDrawFramebuffer):
        (gl::Context::bindArrayBuffer):
        (gl::Context::bindElementArrayBuffer):
        (gl::Context::bindTexture2D):
        (gl::Context::bindTextureCubeMap):
        (gl::Context::bindReadFramebuffer):
        (gl::Context::bindDrawFramebuffer):
        (gl::Context::bindRenderbuffer):
        (gl::Context::useProgram):
        (gl::Context::linkProgram):
        (gl::Context::setProgramBinary):
        (gl::Context::beginQuery):
        (gl::Context::endQuery):
        (gl::Context::setFramebufferZero):
        (gl::Context::setRenderbufferStorage):
        (gl::Context::getFramebuffer):
        (gl::Context::getFence):
        (gl::Context::getQuery):
        (gl::Context::getArrayBuffer):
        (gl::Context::getElementArrayBuffer):
        (gl::Context::getCurrentProgramBinary):
        (gl::Context::getTexture2D):
        (gl::Context::getTextureCubeMap):
        (gl::Context::getSamplerTexture):
        (gl::Context::getBooleanv):
        (gl::Context::getFloatv):
        (gl::Context::getIntegerv):
        (gl::Context::getQueryParameterInfo):
        (gl::Context::applyRenderTarget):
        (gl::Context::applyState):
        (gl::Context::applyVertexBuffer):
        (gl::Context::applyIndexBuffer):
        (gl::Context::applyShaders):
        (gl::Context::applyTextures):
        (gl::Context::readPixels):
        (gl::Context::clear):
        (gl::Context::drawArrays):
        (gl::Context::drawElements):
        (gl::Context::sync):
        (gl::Context::drawLineLoop):
        (gl::Context::recordInvalidEnum):
        (gl::Context::recordInvalidValue):
        (gl::Context::recordInvalidOperation):
        (gl::Context::recordOutOfMemory):
        (gl::Context::recordInvalidFramebufferOperation):
        (gl::Context::getError):
        (gl::Context::getResetStatus):
        (gl::Context::isResetNotificationEnabled):
        (gl::Context::supportsShaderModel3):
        (gl::Context::getMaximumPointSize):
        (gl::Context::getMaximumVaryingVectors):
        (gl::Context::getMaximumVertexTextureImageUnits):
        (gl::Context::getMaximumCombinedTextureImageUnits):
        (gl::Context::getMaximumFragmentUniformVectors):
        (gl::Context::getMaxSupportedSamples):
        (gl::Context::getNearestSupportedSamples):
        (gl::Context::supportsEventQueries):
        (gl::Context::supportsOcclusionQueries):
        (gl::Context::supportsDXT1Textures):
        (gl::Context::supportsDXT3Textures):
        (gl::Context::supportsDXT5Textures):
        (gl::Context::supportsFloat32Textures):
        (gl::Context::supportsFloat32LinearFilter):
        (gl::Context::supportsFloat32RenderableTextures):
        (gl::Context::supportsFloat16Textures):
        (gl::Context::supportsFloat16LinearFilter):
        (gl::Context::supportsFloat16RenderableTextures):
        (gl::Context::getMaximumRenderbufferDimension):
        (gl::Context::getMaximumTextureDimension):
        (gl::Context::getMaximumCubeTextureDimension):
        (gl::Context::getMaximumTextureLevel):
        (gl::Context::supportsLuminanceTextures):
        (gl::Context::supportsLuminanceAlphaTextures):
        (gl::Context::supportsDepthTextures):
        (gl::Context::supports32bitIndices):
        (gl::Context::supportsNonPower2Texture):
        (gl::Context::supportsInstancing):
        (gl::Context::supportsTextureFilterAnisotropy):
        (gl::Context::supportsDerivativeInstructions):
        (gl::Context::getTextureMaxAnisotropy):
        (gl::Context::getCurrentReadFormatType):
        (gl::Context::detachBuffer):
        (gl::Context::detachTexture):
        (gl::Context::detachFramebuffer):
        (gl::Context::detachRenderbuffer):
        (gl::Context::getIncompleteTexture):
        (gl::Context::skipDraw):
        (gl::Context::isTriangleMode):
        (gl::Context::setVertexAttrib):
        (gl::Context::setVertexAttribDivisor):
        (gl::Context::initExtensionString):
        (gl::Context::getExtensionString):
        (gl::Context::initRendererString):
        (gl::Context::getRendererString):
        (gl::Context::blitFramebuffer):
        (gl::VertexDeclarationCache::VertexDeclarationCache):
        (gl::VertexDeclarationCache::~VertexDeclarationCache):
        (gl::VertexDeclarationCache::applyDeclaration):
        (gl::VertexDeclarationCache::markStateDirty):
        * src/libGLESv2/Context.h: Added.
        (gl::VertexAttribute::VertexAttribute):
        (gl::VertexAttribute::typeSize):
        (gl::VertexAttribute::stride):
        (gl::Context::getBlitter):
        (gl::Context::getDeviceCaps):
        * src/libGLESv2/D3DConstantTable.cpp: Added.
        (gl::D3DConstant::D3DConstant):
        (gl::D3DConstant::~D3DConstant):
        (gl::D3DConstant::addStructMembers):
        (gl::D3DConstantTable::D3DConstantTable):
        (gl::D3DConstantTable::~D3DConstantTable):
        (gl::D3DConstantTable::getConstant):
        (gl::D3DConstantTable::getConstantByName):
        * src/libGLESv2/D3DConstantTable.h: Added.
        (gl::D3DConstantTable::error):
        (gl::D3DConstantTable::constants):
        * src/libGLESv2/Fence.cpp: Added.
        (gl::Fence::Fence):
        (gl::Fence::~Fence):
        (gl::Fence::isFence):
        (gl::Fence::setFence):
        (gl::Fence::testFence):
        (gl::Fence::finishFence):
        (gl::Fence::getFenceiv):
        * src/libGLESv2/Fence.h: Added.
        * src/libGLESv2/Float16ToFloat32.cpp: Added.
        (gl::float16ToFloat32):
        * src/libGLESv2/Float16ToFloat32.py: Added.
        (convertMantissa):
        (convertExponent):
        (convertOffset):
        * src/libGLESv2/Framebuffer.cpp: Added.
        (gl::Framebuffer::Framebuffer):
        (gl::Framebuffer::~Framebuffer):
        (gl::Framebuffer::lookupRenderbuffer):
        (gl::Framebuffer::setColorbuffer):
        (gl::Framebuffer::setDepthbuffer):
        (gl::Framebuffer::setStencilbuffer):
        (gl::Framebuffer::detachTexture):
        (gl::Framebuffer::detachRenderbuffer):
        (gl::Framebuffer::getRenderTargetSerial):
        (gl::Framebuffer::getRenderTarget):
        (gl::Framebuffer::getDepthStencil):
        (gl::Framebuffer::getDepthbufferSerial):
        (gl::Framebuffer::getStencilbufferSerial):
        (gl::Framebuffer::getColorbuffer):
        (gl::Framebuffer::getDepthbuffer):
        (gl::Framebuffer::getStencilbuffer):
        (gl::Framebuffer::getNullColorbuffer):
        (gl::Framebuffer::getColorbufferType):
        (gl::Framebuffer::getDepthbufferType):
        (gl::Framebuffer::getStencilbufferType):
        (gl::Framebuffer::getColorbufferHandle):
        (gl::Framebuffer::getDepthbufferHandle):
        (gl::Framebuffer::getStencilbufferHandle):
        (gl::Framebuffer::hasStencil):
        (gl::Framebuffer::completeness):
        (gl::DefaultFramebuffer::DefaultFramebuffer):
        (gl::Framebuffer::getSamples):
        (gl::DefaultFramebuffer::completeness):
        * src/libGLESv2/Framebuffer.h: Added.
        * src/libGLESv2/HandleAllocator.cpp: Added.
        (gl::HandleAllocator::HandleAllocator):
        (gl::HandleAllocator::~HandleAllocator):
        (gl::HandleAllocator::setBaseHandle):
        (gl::HandleAllocator::allocate):
        (gl::HandleAllocator::release):
        * src/libGLESv2/HandleAllocator.h: Added.
        * src/libGLESv2/IndexDataManager.cpp: Added.
        (gl::IndexDataManager::IndexDataManager):
        (gl::IndexDataManager::~IndexDataManager):
        (gl::convertIndices):
        (gl::computeRange):
        (gl::IndexDataManager::prepareIndexData):
        (gl::IndexDataManager::indexSize):
        (gl::IndexDataManager::typeSize):
        (gl::IndexDataManager::getCountingIndices):
        (gl::IndexBuffer::IndexBuffer):
        (gl::IndexBuffer::~IndexBuffer):
        (gl::IndexBuffer::getBuffer):
        (gl::IndexBuffer::getSerial):
        (gl::IndexBuffer::issueSerial):
        (gl::IndexBuffer::unmap):
        (gl::StreamingIndexBuffer::StreamingIndexBuffer):
        (gl::StreamingIndexBuffer::~StreamingIndexBuffer):
        (gl::StreamingIndexBuffer::map):
        (gl::StreamingIndexBuffer::reserveSpace):
        (gl::StaticIndexBuffer::StaticIndexBuffer):
        (gl::StaticIndexBuffer::~StaticIndexBuffer):
        (gl::StaticIndexBuffer::map):
        (gl::StaticIndexBuffer::reserveSpace):
        (gl::StaticIndexBuffer::lookupType):
        (gl::StaticIndexBuffer::lookupRange):
        (gl::StaticIndexBuffer::addRange):
        * src/libGLESv2/IndexDataManager.h: Added.
        (gl::IndexBuffer::size):
        (gl::StaticIndexBuffer::IndexRange::operator<):
        * src/libGLESv2/Program.cpp: Added.
        (gl::AttributeBindings::AttributeBindings):
        (gl::AttributeBindings::~AttributeBindings):
        (gl::InfoLog::InfoLog):
        (gl::InfoLog::~InfoLog):
        (gl::InfoLog::getLength):
        (gl::InfoLog::getLog):
        (gl::InfoLog::appendSanitized):
        (gl::InfoLog::append):
        (gl::InfoLog::reset):
        (gl::Program::Program):
        (gl::Program::~Program):
        (gl::Program::attachShader):
        (gl::Program::detachShader):
        (gl::Program::getAttachedShadersCount):
        (gl::AttributeBindings::bindAttributeLocation):
        (gl::Program::bindAttributeLocation):
        (gl::Program::link):
        (gl::AttributeBindings::getAttributeBinding):
        (gl::Program::unlink):
        (gl::Program::isLinked):
        (gl::Program::getProgramBinary):
        (gl::Program::setProgramBinary):
        (gl::Program::release):
        (gl::Program::addRef):
        (gl::Program::getRefCount):
        (gl::Program::getProgramBinaryLength):
        (gl::Program::getInfoLogLength):
        (gl::Program::getInfoLog):
        (gl::Program::getAttachedShaders):
        (gl::Program::getActiveAttribute):
        (gl::Program::getActiveAttributeCount):
        (gl::Program::getActiveAttributeMaxLength):
        (gl::Program::getActiveUniform):
        (gl::Program::getActiveUniformCount):
        (gl::Program::getActiveUniformMaxLength):
        (gl::Program::flagForDeletion):
        (gl::Program::isFlaggedForDeletion):
        (gl::Program::validate):
        (gl::Program::isValidated):
        * src/libGLESv2/Program.h: Added.
        * src/libGLESv2/ProgramBinary.cpp: Added.
        (gl::str):
        (gl::Uniform::Uniform):
        (gl::Uniform::~Uniform):
        (gl::Uniform::isArray):
        (gl::UniformLocation::UniformLocation):
        (gl::ProgramBinary::ProgramBinary):
        (gl::ProgramBinary::~ProgramBinary):
        (gl::ProgramBinary::getSerial):
        (gl::ProgramBinary::issueSerial):
        (gl::ProgramBinary::getPixelShader):
        (gl::ProgramBinary::getVertexShader):
        (gl::ProgramBinary::getAttributeLocation):
        (gl::ProgramBinary::getSemanticIndex):
        (gl::ProgramBinary::getUsedSamplerRange):
        (gl::ProgramBinary::usesPointSize):
        (gl::ProgramBinary::getSamplerMapping):
        (gl::ProgramBinary::getSamplerTextureType):
        (gl::ProgramBinary::getUniformLocation):
        (gl::ProgramBinary::setUniform1fv):
        (gl::ProgramBinary::setUniform2fv):
        (gl::ProgramBinary::setUniform3fv):
        (gl::ProgramBinary::setUniform4fv):
        (gl::transposeMatrix):
        (gl::ProgramBinary::setUniformMatrix2fv):
        (gl::ProgramBinary::setUniformMatrix3fv):
        (gl::ProgramBinary::setUniformMatrix4fv):
        (gl::ProgramBinary::setUniform1iv):
        (gl::ProgramBinary::setUniform2iv):
        (gl::ProgramBinary::setUniform3iv):
        (gl::ProgramBinary::setUniform4iv):
        (gl::ProgramBinary::getUniformfv):
        (gl::ProgramBinary::getUniformiv):
        (gl::ProgramBinary::dirtyAllUniforms):
        (gl::ProgramBinary::applyUniforms):
        (gl::ProgramBinary::compileToBinary):
        (gl::ProgramBinary::packVaryings):
        (gl::ProgramBinary::linkVaryings):
        (gl::ProgramBinary::load):
        (gl::ProgramBinary::save):
        (gl::ProgramBinary::getLength):
        (gl::ProgramBinary::link):
        (gl::ProgramBinary::linkAttributes):
        (gl::ProgramBinary::linkUniforms):
        (gl::ProgramBinary::defineUniform):
        (gl::ProgramBinary::createUniform):
        (gl::ProgramBinary::decorateAttribute):
        (gl::ProgramBinary::undecorateUniform):
        (gl::ProgramBinary::applyUniformnbv):
        (gl::ProgramBinary::applyUniformnfv):
        (gl::ProgramBinary::applyUniform1iv):
        (gl::ProgramBinary::applyUniform2iv):
        (gl::ProgramBinary::applyUniform3iv):
        (gl::ProgramBinary::applyUniform4iv):
        (gl::ProgramBinary::applyUniformniv):
        (gl::ProgramBinary::isValidated):
        (gl::ProgramBinary::getActiveAttribute):
        (gl::ProgramBinary::getActiveAttributeCount):
        (gl::ProgramBinary::getActiveAttributeMaxLength):
        (gl::ProgramBinary::getActiveUniform):
        (gl::ProgramBinary::getActiveUniformCount):
        (gl::ProgramBinary::getActiveUniformMaxLength):
        (gl::ProgramBinary::validate):
        (gl::ProgramBinary::validateSamplers):
        (gl::ProgramBinary::getDxDepthRangeLocation):
        (gl::ProgramBinary::getDxDepthLocation):
        (gl::ProgramBinary::getDxCoordLocation):
        (gl::ProgramBinary::getDxHalfPixelSizeLocation):
        (gl::ProgramBinary::getDxFrontCCWLocation):
        (gl::ProgramBinary::getDxPointsOrLinesLocation):
        (gl::ProgramBinary::Sampler::Sampler):
        * src/libGLESv2/ProgramBinary.h: Added.
        (gl::Uniform::RegisterInfo::RegisterInfo):
        (gl::Uniform::RegisterInfo::set):
        (gl::UniformLocation::UniformLocation):
        * src/libGLESv2/Query.cpp: Added.
        (gl::Query::Query):
        (gl::Query::~Query):
        (gl::Query::begin):
        (gl::Query::end):
        (gl::Query::getResult):
        (gl::Query::isResultAvailable):
        (gl::Query::getType):
        (gl::Query::testQuery):
        * src/libGLESv2/Query.h: Added.
        * src/libGLESv2/README: Removed.
        * src/libGLESv2/Renderbuffer.cpp: Added.
        (gl::RenderbufferInterface::RenderbufferInterface):
        (gl::RenderbufferInterface::addProxyRef):
        (gl::RenderbufferInterface::releaseProxy):
        (gl::RenderbufferInterface::getRedSize):
        (gl::RenderbufferInterface::getGreenSize):
        (gl::RenderbufferInterface::getBlueSize):
        (gl::RenderbufferInterface::getAlphaSize):
        (gl::RenderbufferInterface::getDepthSize):
        (gl::RenderbufferInterface::getStencilSize):
        (gl::RenderbufferTexture2D::RenderbufferTexture2D):
        (gl::RenderbufferTexture2D::~RenderbufferTexture2D):
        (gl::RenderbufferTexture2D::addProxyRef):
        (gl::RenderbufferTexture2D::releaseProxy):
        (gl::RenderbufferTexture2D::getRenderTarget):
        (gl::RenderbufferTexture2D::getDepthStencil):
        (gl::RenderbufferTexture2D::getWidth):
        (gl::RenderbufferTexture2D::getHeight):
        (gl::RenderbufferTexture2D::getInternalFormat):
        (gl::RenderbufferTexture2D::getD3DFormat):
        (gl::RenderbufferTexture2D::getSamples):
        (gl::RenderbufferTexture2D::getSerial):
        (gl::RenderbufferTextureCubeMap::RenderbufferTextureCubeMap):
        (gl::RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap):
        (gl::RenderbufferTextureCubeMap::addProxyRef):
        (gl::RenderbufferTextureCubeMap::releaseProxy):
        (gl::RenderbufferTextureCubeMap::getRenderTarget):
        (gl::RenderbufferTextureCubeMap::getDepthStencil):
        (gl::RenderbufferTextureCubeMap::getWidth):
        (gl::RenderbufferTextureCubeMap::getHeight):
        (gl::RenderbufferTextureCubeMap::getInternalFormat):
        (gl::RenderbufferTextureCubeMap::getD3DFormat):
        (gl::RenderbufferTextureCubeMap::getSamples):
        (gl::RenderbufferTextureCubeMap::getSerial):
        (gl::Renderbuffer::Renderbuffer):
        (gl::Renderbuffer::~Renderbuffer):
        (gl::Renderbuffer::addRef):
        (gl::Renderbuffer::release):
        (gl::Renderbuffer::getRenderTarget):
        (gl::Renderbuffer::getDepthStencil):
        (gl::Renderbuffer::getWidth):
        (gl::Renderbuffer::getHeight):
        (gl::Renderbuffer::getInternalFormat):
        (gl::Renderbuffer::getD3DFormat):
        (gl::Renderbuffer::getRedSize):
        (gl::Renderbuffer::getGreenSize):
        (gl::Renderbuffer::getBlueSize):
        (gl::Renderbuffer::getAlphaSize):
        (gl::Renderbuffer::getDepthSize):
        (gl::Renderbuffer::getStencilSize):
        (gl::Renderbuffer::getSamples):
        (gl::Renderbuffer::getSerial):
        (gl::Renderbuffer::setStorage):
        (gl::RenderbufferStorage::RenderbufferStorage):
        (gl::RenderbufferStorage::~RenderbufferStorage):
        (gl::RenderbufferStorage::getRenderTarget):
        (gl::RenderbufferStorage::getDepthStencil):
        (gl::RenderbufferStorage::getWidth):
        (gl::RenderbufferStorage::getHeight):
        (gl::RenderbufferStorage::getInternalFormat):
        (gl::RenderbufferStorage::getD3DFormat):
        (gl::RenderbufferStorage::getSamples):
        (gl::RenderbufferStorage::getSerial):
        (gl::RenderbufferStorage::issueSerial):
        (gl::RenderbufferStorage::issueCubeSerials):
        (gl::Colorbuffer::Colorbuffer):
        (gl::Colorbuffer::~Colorbuffer):
        (gl::Colorbuffer::getRenderTarget):
        (gl::DepthStencilbuffer::DepthStencilbuffer):
        (gl::DepthStencilbuffer::~DepthStencilbuffer):
        (gl::DepthStencilbuffer::getDepthStencil):
        (gl::Depthbuffer::Depthbuffer):
        (gl::Depthbuffer::~Depthbuffer):
        (gl::Stencilbuffer::Stencilbuffer):
        (gl::Stencilbuffer::~Stencilbuffer):
        * src/libGLESv2/Renderbuffer.h: Added.
        (gl::RenderbufferInterface::~RenderbufferInterface):
        * src/libGLESv2/ResourceManager.cpp: Added.
        (gl::ResourceManager::ResourceManager):
        (gl::ResourceManager::~ResourceManager):
        (gl::ResourceManager::addRef):
        (gl::ResourceManager::release):
        (gl::ResourceManager::createBuffer):
        (gl::ResourceManager::createShader):
        (gl::ResourceManager::createProgram):
        (gl::ResourceManager::createTexture):
        (gl::ResourceManager::createRenderbuffer):
        (gl::ResourceManager::deleteBuffer):
        (gl::ResourceManager::deleteShader):
        (gl::ResourceManager::deleteProgram):
        (gl::ResourceManager::deleteTexture):
        (gl::ResourceManager::deleteRenderbuffer):
        (gl::ResourceManager::getBuffer):
        (gl::ResourceManager::getShader):
        (gl::ResourceManager::getTexture):
        (gl::ResourceManager::getProgram):
        (gl::ResourceManager::getRenderbuffer):
        (gl::ResourceManager::setRenderbuffer):
        (gl::ResourceManager::checkBufferAllocation):
        (gl::ResourceManager::checkTextureAllocation):
        (gl::ResourceManager::checkRenderbufferAllocation):
        * src/libGLESv2/ResourceManager.h: Added.
        * src/libGLESv2/Shader.cpp: Added.
        (gl::Shader::Shader):
        (gl::Shader::~Shader):
        (gl::Shader::getHandle):
        (gl::Shader::setSource):
        (gl::Shader::getInfoLogLength):
        (gl::Shader::getInfoLog):
        (gl::Shader::getSourceLength):
        (gl::Shader::getTranslatedSourceLength):
        (gl::Shader::getSourceImpl):
        (gl::Shader::getSource):
        (gl::Shader::getTranslatedSource):
        (gl::Shader::isCompiled):
        (gl::Shader::getHLSL):
        (gl::Shader::addRef):
        (gl::Shader::release):
        (gl::Shader::getRefCount):
        (gl::Shader::isFlaggedForDeletion):
        (gl::Shader::flagForDeletion):
        (gl::Shader::initializeCompiler):
        (gl::Shader::releaseCompiler):
        (gl::Shader::parseVaryings):
        (gl::Shader::uncompile):
        (gl::Shader::compileToHLSL):
        (gl::Shader::parseType):
        (gl::Shader::compareVarying):
        (gl::VertexShader::VertexShader):
        (gl::VertexShader::~VertexShader):
        (gl::VertexShader::getType):
        (gl::VertexShader::uncompile):
        (gl::VertexShader::compile):
        (gl::VertexShader::getSemanticIndex):
        (gl::VertexShader::parseAttributes):
        (gl::FragmentShader::FragmentShader):
        (gl::FragmentShader::~FragmentShader):
        (gl::FragmentShader::getType):
        (gl::FragmentShader::compile):
        * src/libGLESv2/Shader.h: Added.
        (gl::Varying::Varying):
        (gl::Attribute::Attribute):
        * src/libGLESv2/Texture.cpp: Added.
        (gl::ConvertTextureInternalFormat):
        (gl::IsTextureFormatRenderable):
        (gl::GetTextureUsage):
        (gl::MakeValidSize):
        (gl::CopyLockableSurfaces):
        (gl::Image::Image):
        (gl::Image::~Image):
        (gl::Image::redefine):
        (gl::Image::createSurface):
        (gl::Image::lock):
        (gl::Image::unlock):
        (gl::Image::isRenderableFormat):
        (gl::Image::getD3DFormat):
        (gl::Image::getSurface):
        (gl::Image::setManagedSurface):
        (gl::Image::updateSurface):
        (gl::Image::loadData):
        (gl::Image::loadAlphaData):
        (gl::Image::loadAlphaFloatData):
        (gl::Image::loadAlphaHalfFloatData):
        (gl::Image::loadLuminanceData):
        (gl::Image::loadLuminanceFloatData):
        (gl::Image::loadLuminanceHalfFloatData):
        (gl::Image::loadLuminanceAlphaData):
        (gl::Image::loadLuminanceAlphaFloatData):
        (gl::Image::loadLuminanceAlphaHalfFloatData):
        (gl::Image::loadRGBUByteData):
        (gl::Image::loadRGB565Data):
        (gl::Image::loadRGBFloatData):
        (gl::Image::loadRGBHalfFloatData):
        (gl::Image::loadRGBAUByteData):
        (gl::Image::loadRGBA4444Data):
        (gl::Image::loadRGBA5551Data):
        (gl::Image::loadRGBAFloatData):
        (gl::Image::loadRGBAHalfFloatData):
        (gl::Image::loadBGRAData):
        (gl::Image::loadCompressedData):
        (gl::Image::copy):
        (gl::TextureStorage::TextureStorage):
        (gl::TextureStorage::~TextureStorage):
        (gl::TextureStorage::isRenderTarget):
        (gl::TextureStorage::isManaged):
        (gl::TextureStorage::getPool):
        (gl::TextureStorage::getUsage):
        (gl::TextureStorage::getTextureSerial):
        (gl::TextureStorage::issueTextureSerial):
        (gl::TextureStorage::getLodOffset):
        (gl::Texture::Texture):
        (gl::Texture::~Texture):
        (gl::Texture::setMinFilter):
        (gl::Texture::setMagFilter):
        (gl::Texture::setWrapS):
        (gl::Texture::setWrapT):
        (gl::Texture::setMaxAnisotropy):
        (gl::Texture::setUsage):
        (gl::Texture::getMinFilter):
        (gl::Texture::getMagFilter):
        (gl::Texture::getWrapS):
        (gl::Texture::getWrapT):
        (gl::Texture::getMaxAnisotropy):
        (gl::Texture::getUsage):
        (gl::Texture::isMipmapFiltered):
        (gl::Texture::setImage):
        (gl::Texture::setCompressedImage):
        (gl::Texture::subImage):
        (gl::Texture::subImageCompressed):
        (gl::Texture::getTexture):
        (gl::Texture::hasDirtyParameters):
        (gl::Texture::hasDirtyImages):
        (gl::Texture::resetDirty):
        (gl::Texture::getTextureSerial):
        (gl::Texture::getRenderTargetSerial):
        (gl::Texture::isImmutable):
        (gl::Texture::getLodOffset):
        (gl::Texture::creationLevels):
        (gl::Texture::levelCount):
        (gl::Texture::getBlitter):
        (gl::Texture::copyToRenderTarget):
        (gl::TextureStorage2D::TextureStorage2D):
        (gl::TextureStorage2D::~TextureStorage2D):
        (gl::TextureStorage2D::getSurfaceLevel):
        (gl::TextureStorage2D::getBaseTexture):
        (gl::TextureStorage2D::getRenderTargetSerial):
        (gl::Texture2D::Texture2D):
        (gl::Texture2D::~Texture2D):
        (gl::Texture2D::addProxyRef):
        (gl::Texture2D::releaseProxy):
        (gl::Texture2D::getTarget):
        (gl::Texture2D::getWidth):
        (gl::Texture2D::getHeight):
        (gl::Texture2D::getInternalFormat):
        (gl::Texture2D::getD3DFormat):
        (gl::Texture2D::redefineImage):
        (gl::Texture2D::setImage):
        (gl::Texture2D::bindTexImage):
        (gl::Texture2D::releaseTexImage):
        (gl::Texture2D::setCompressedImage):
        (gl::Texture2D::commitRect):
        (gl::Texture2D::subImage):
        (gl::Texture2D::subImageCompressed):
        (gl::Texture2D::copyImage):
        (gl::Texture2D::copySubImage):
        (gl::Texture2D::storage):
        (gl::Texture2D::isSamplerComplete):
        (gl::Texture2D::isMipmapComplete):
        (gl::Texture2D::isCompressed):
        (gl::Texture2D::isDepth):
        (gl::Texture2D::getBaseTexture):
        (gl::Texture2D::createTexture):
        (gl::Texture2D::updateTexture):
        (gl::Texture2D::convertToRenderTarget):
        (gl::Texture2D::generateMipmaps):
        (gl::Texture2D::getRenderbuffer):
        (gl::Texture2D::getRenderTarget):
        (gl::Texture2D::getDepthStencil):
        (gl::Texture2D::getStorage):
        (gl::TextureStorageCubeMap::TextureStorageCubeMap):
        (gl::TextureStorageCubeMap::~TextureStorageCubeMap):
        (gl::TextureStorageCubeMap::getCubeMapSurface):
        (gl::TextureStorageCubeMap::getBaseTexture):
        (gl::TextureStorageCubeMap::getRenderTargetSerial):
        (gl::TextureCubeMap::TextureCubeMap):
        (gl::TextureCubeMap::~TextureCubeMap):
        (gl::TextureCubeMap::addProxyRef):
        (gl::TextureCubeMap::releaseProxy):
        (gl::TextureCubeMap::getTarget):
        (gl::TextureCubeMap::getWidth):
        (gl::TextureCubeMap::getHeight):
        (gl::TextureCubeMap::getInternalFormat):
        (gl::TextureCubeMap::getD3DFormat):
        (gl::TextureCubeMap::setImagePosX):
        (gl::TextureCubeMap::setImageNegX):
        (gl::TextureCubeMap::setImagePosY):
        (gl::TextureCubeMap::setImageNegY):
        (gl::TextureCubeMap::setImagePosZ):
        (gl::TextureCubeMap::setImageNegZ):
        (gl::TextureCubeMap::setCompressedImage):
        (gl::TextureCubeMap::commitRect):
        (gl::TextureCubeMap::subImage):
        (gl::TextureCubeMap::subImageCompressed):
        (gl::TextureCubeMap::isSamplerComplete):
        (gl::TextureCubeMap::isCubeComplete):
        (gl::TextureCubeMap::isMipmapCubeComplete):
        (gl::TextureCubeMap::isCompressed):
        (gl::TextureCubeMap::getBaseTexture):
        (gl::TextureCubeMap::createTexture):
        (gl::TextureCubeMap::updateTexture):
        (gl::TextureCubeMap::convertToRenderTarget):
        (gl::TextureCubeMap::setImage):
        (gl::TextureCubeMap::faceIndex):
        (gl::TextureCubeMap::redefineImage):
        (gl::TextureCubeMap::copyImage):
        (gl::TextureCubeMap::copySubImage):
        (gl::TextureCubeMap::storage):
        (gl::TextureCubeMap::generateMipmaps):
        (gl::TextureCubeMap::getRenderbuffer):
        (gl::TextureCubeMap::getRenderTarget):
        (gl::TextureCubeMap::getStorage):
        * src/libGLESv2/Texture.h: Added.
        (gl::Image::markDirty):
        (gl::Image::markClean):
        (gl::Image::getWidth):
        (gl::Image::getHeight):
        (gl::Image::getInternalFormat):
        (gl::Image::isDirty):
        * src/libGLESv2/TextureSSE2.cpp: Added.
        (gl::Image::loadRGBAUByteDataSSE2):
        (gl::Image::loadAlphaDataSSE2):
        * src/libGLESv2/VertexDataManager.cpp: Added.
        (gl::elementsInBuffer):
        (gl::VertexDataManager::VertexDataManager):
        (gl::VertexDataManager::~VertexDataManager):
        (gl::VertexDataManager::writeAttributeData):
        (gl::VertexDataManager::prepareVertexData):
        (gl::VertexDataManager::spaceRequired):
        (gl::VertexDataManager::checkVertexCaps):
        (gl::VertexDataManager::typeIndex):
        (gl::VertexBuffer::VertexBuffer):
        (gl::VertexBuffer::~VertexBuffer):
        (gl::VertexBuffer::unmap):
        (gl::VertexBuffer::getBuffer):
        (gl::VertexBuffer::getSerial):
        (gl::VertexBuffer::issueSerial):
        (gl::ArrayVertexBuffer::ArrayVertexBuffer):
        (gl::ArrayVertexBuffer::~ArrayVertexBuffer):
        (gl::ArrayVertexBuffer::addRequiredSpace):
        (gl::StreamingVertexBuffer::StreamingVertexBuffer):
        (gl::StreamingVertexBuffer::~StreamingVertexBuffer):
        (gl::StreamingVertexBuffer::map):
        (gl::StreamingVertexBuffer::reserveRequiredSpace):
        (gl::StaticVertexBuffer::StaticVertexBuffer):
        (gl::StaticVertexBuffer::~StaticVertexBuffer):
        (gl::StaticVertexBuffer::map):
        (gl::StaticVertexBuffer::reserveRequiredSpace):
        (gl::StaticVertexBuffer::lookupAttribute):
        (gl::VertexDataManager::formatConverter):
        * src/libGLESv2/VertexDataManager.h: Added.
        (gl::ArrayVertexBuffer::size):
        (gl::VertexDataManager::dirtyCurrentValue):
        * src/libGLESv2/libGLESv2.cpp: Added.
        (validImageSize):
        (checkTextureFormatType):
        (validateSubImageParams2D):
        (validateSubImageParamsCube):
        (validReadFormatType):
        * src/libGLESv2/libGLESv2.def: Added.
        * src/libGLESv2/libGLESv2.rc: Added.
        * src/libGLESv2/libGLESv2.vcxproj: Added.
        * src/libGLESv2/libGLESv2.vcxproj.filters: Added.
        * src/libGLESv2/main.cpp: Added.
        (DllMain):
        (gl::makeCurrent):
        (gl::getContext):
        (gl::getNonLostContext):
        (gl::getDisplay):
        (gl::getDevice):
        (gl::checkDeviceLost):
        (error):
        * src/libGLESv2/main.h: Added.
        (error):
        * src/libGLESv2/mathutil.h: Added.
        (gl::Vector4::Vector4):
        (gl::isPow2):
        (gl::log2):
        (gl::ceilPow2):
        (gl::clamp):
        (gl::clamp01):
        (gl::unorm):
        (gl::supportsSSE2):
        (gl::float32ToFloat16):
        * src/libGLESv2/resource.h: Added.
        * src/libGLESv2/shaders: Added.
        * src/libGLESv2/shaders/Blit.ps: Added.
        * src/libGLESv2/shaders/Blit.vs: Added.
        * src/libGLESv2/shaders/componentmaskps.h: Added.
        * src/libGLESv2/shaders/flipyvs.h: Added.
        * src/libGLESv2/shaders/generate_shaders.bat: Added.
        * src/libGLESv2/shaders/luminanceps.h: Added.
        * src/libGLESv2/shaders/passthroughps.h: Added.
        * src/libGLESv2/shaders/standardvs.h: Added.
        * src/libGLESv2/utilities.cpp: Added.
        (gl::UniformExternalComponentCount):
        (gl::UniformInternalComponentCount):
        (gl::UniformComponentType):
        (gl::UniformComponentSize):
        (gl::UniformInternalSize):
        (gl::UniformExternalSize):
        (gl::VariableRowCount):
        (gl::VariableColumnCount):
        (gl::AllocateFirstFreeBits):
        (gl::ComputePitch):
        (gl::ComputeCompressedPitch):
        (gl::ComputeCompressedSize):
        (gl::IsCompressed):
        (gl::IsDepthTexture):
        (gl::IsStencilTexture):
        (gl::ComputePixelSize):
        (gl::IsCubemapTextureTarget):
        (gl::IsInternalTextureTarget):
        (gl::ConvertSizedInternalFormat):
        (gl::ExtractFormat):
        (gl::ExtractType):
        (gl::IsColorRenderable):
        (gl::IsDepthRenderable):
        (gl::IsStencilRenderable):
        (gl::IsFloat32Format):
        (gl::IsFloat16Format):
        (es2dx::ConvertComparison):
        (es2dx::ConvertColor):
        (es2dx::ConvertBlendFunc):
        (es2dx::ConvertBlendOp):
        (es2dx::ConvertStencilOp):
        (es2dx::ConvertTextureWrap):
        (es2dx::ConvertCullMode):
        (es2dx::ConvertCubeFace):
        (es2dx::ConvertColorMask):
        (es2dx::ConvertMagFilter):
        (es2dx::ConvertMinFilter):
        (es2dx::ConvertPrimitiveType):
        (es2dx::ConvertRenderbufferFormat):
        (es2dx::GetMultisampleTypeFromSamples):
        (dx2es::GetStencilSize):
        (dx2es::GetAlphaSize):
        (dx2es::GetRedSize):
        (dx2es::GetGreenSize):
        (dx2es::GetBlueSize):
        (dx2es::GetDepthSize):
        (dx2es::GetSamplesFromMultisampleType):
        (dx2es::IsFormatChannelEquivalent):
        (dx2es::ConvertReadBufferFormat):
        (dx2es::ConvertBackBufferFormat):
        (dx2es::ConvertDepthStencilFormat):
        (dx::IsCompressedFormat):
        (dx::ComputeRowSize):
        (getTempPath):
        (writeFile):
        * src/libGLESv2/utilities.h: Added.
        (isDeviceLostError):
        * src/libGLESv2/vertexconversion.h: Added.
        (gl::Identity::convert):
        (gl::Cast::convert):
        (gl::Normalize::convert):
        (gl::FixedToFloat::convert):
        (gl::SimpleDefaultValues::zero):
        (gl::SimpleDefaultValues::one):
        (gl::NormalizedDefaultValues::zero):
        (gl::NormalizedDefaultValues::one):
        (gl::VertexDataConverter::convertArray):
        (gl::VertexDataConverter::pointerAddBytes):
        (gl::VertexDataConverter::copyComponent):

2013-07-17  Alex Christensen  <achristensen@apple.com>

        Made a repeatable process for updating ANGLE that does not include manually editing any files.
        https://bugs.webkit.org/show_bug.cgi?id=118815

        Reviewed by Dean Jackson.

        * src/compiler/glslang.y:
        * src/compiler/glslang_lex.cpp:
        * src/compiler/glslang_tab.cpp:
        * src/compiler/glslang_tab.h: Put YYLTYPE definition in %union instead of prologue and ran Bison.

2013-07-16  Alex Christensen  <achristensen@apple.com>

        Update ANGLE from r1987 to r2426 while keeping these changes:
        Keeping #if defined(_MSC_VER) around #pragma warning(disable: 4718) in DependencyGraph.cpp.
        Keeping include khrplatform.h instead of KHR/khrplatform.h in ShaderLang.h.
        Added static_casts in Intermediate.cpp to fix compiling on Mac.
        Changed enum bit fields to just enums for GCC in Types.h to fix compiling for GTK.
        Ran Bison on Mac after removing the unsupported %code tag (See diff uploaded to bug for details).
        Added YYLTYPE definition to glslang_tab.h which would have been put there by the unsupported %code tag.

        https://bugs.webkit.org/show_bug.cgi?id=118550

        Reviewed by Dean Jackson.

        * ANGLE.plist: Updated revision of ANGLE to 2426.
        * ANGLE.xcodeproj/project.pbxproj:
        * GNUmakefile.am:
        * Target.pri:
            Renamed DetectRecursion to DetectCallDepth and added builtin_symbol_table.
        * include/GLSLANG/ShaderLang.h:
        * src/common/version.h:
        * src/compiler/BaseTypes.h:
        (getQualifierString):
        * src/compiler/Common.h:
        * src/compiler/Compiler.cpp:
        (TCompiler::TCompiler):
        (TCompiler::Init):
        (TCompiler::compile):
        (TCompiler::detectCallDepth):
        (TCompiler::enforceTimingRestrictions):
        (TCompiler::limitExpressionComplexity):
        * src/compiler/ConstantUnion.h:
        (ConstantUnion::ConstantUnion):
        * src/compiler/DetectCallDepth.cpp: Added.
        (DetectCallDepth::FunctionNode::FunctionNode):
        (DetectCallDepth::FunctionNode::getName):
        (DetectCallDepth::FunctionNode::addCallee):
        (DetectCallDepth::FunctionNode::detectCallDepth):
        (DetectCallDepth::FunctionNode::reset):
        (DetectCallDepth::DetectCallDepth):
        (DetectCallDepth::~DetectCallDepth):
        (DetectCallDepth::visitAggregate):
        (DetectCallDepth::checkExceedsMaxDepth):
        (DetectCallDepth::resetFunctionNodes):
        (DetectCallDepth::detectCallDepthForFunction):
        (DetectCallDepth::detectCallDepth):
        (DetectCallDepth::findFunctionByName):
        * src/compiler/DetectCallDepth.h: Added.
        (DetectCallDepth::getInfoSink):
        * src/compiler/DetectRecursion.cpp: Removed.
        * src/compiler/DetectRecursion.h: Removed.
        * src/compiler/Diagnostics.cpp:
        (TDiagnostics::writeInfo):
        * src/compiler/ForLoopUnroll.cpp:
        (ForLoopUnroll::evaluateIntConstant):
        * src/compiler/InfoSink.cpp:
        (TInfoSinkBase::prefix):
        (TInfoSinkBase::location):
        (TInfoSinkBase::message):
        * src/compiler/InfoSink.h:
        * src/compiler/Initialize.cpp:
        (TBuiltIns::initialize):
        (IdentifyBuiltIns):
        (InitExtensionBehavior):
        * src/compiler/Intermediate.cpp: Updated and added static_casts to fix build errors on Mac.
        (TIntermediate::addSymbol):
        (TIntermediate::addBinaryMath):
        (TIntermediate::addAssign):
        (TIntermediate::addIndex):
        (TIntermediate::addUnaryMath):
        (TIntermediate::setAggregateOperator):
        (TIntermediate::addConversion):
        (TIntermediate::growAggregate):
        (TIntermediate::makeAggregate):
        (TIntermediate::addSelection):
        (TIntermediate::addComma):
        (TIntermediate::addConstantUnion):
        (TIntermediate::addSwizzle):
        (TIntermediate::addLoop):
        (TIntermediate::addBranch):
        (TIntermUnary::promote):
        (TIntermBinary::promote):
        (CompareStruct):
        (CompareStructure):
        (TIntermConstantUnion::fold):
        (TIntermediate::promoteConstantUnion):
        * src/compiler/OutputGLSL.cpp:
        (TOutputGLSL::visitSymbol):
        * src/compiler/OutputGLSL.h:
        * src/compiler/OutputGLSLBase.cpp:
        (TOutputGLSLBase::writeVariableType):
        (TOutputGLSLBase::writeConstantUnion):
        (TOutputGLSLBase::visitBinary):
        (TOutputGLSLBase::visitAggregate):
        (TOutputGLSLBase::getTypeName):
        (TOutputGLSLBase::hashFunctionName):
        (TOutputGLSLBase::structDeclared):
        (TOutputGLSLBase::declareStruct):
        * src/compiler/OutputGLSLBase.h:
        * src/compiler/OutputHLSL.cpp:
        (sh::OutputHLSL::OutputHLSL):
        (sh::OutputHLSL::header):
        (sh::OutputHLSL::visitSymbol):
        (sh::OutputHLSL::visitBinary):
        (sh::OutputHLSL::visitAggregate):
        (sh::OutputHLSL::visitSelection):
        (sh::OutputHLSL::visitLoop):
        (sh::OutputHLSL::handleExcessiveLoop):
        (sh::OutputHLSL::typeString):
        (sh::OutputHLSL::initializer):
        (sh::OutputHLSL::addConstructor):
        (sh::OutputHLSL::writeConstantUnion):
        (sh::OutputHLSL::decorateField):
        * src/compiler/OutputHLSL.h:
        * src/compiler/ParseHelper.cpp:
        (TParseContext::parseVectorFields):
        (TParseContext::parseMatrixFields):
        (TParseContext::error):
        (TParseContext::warning):
        (TParseContext::assignError):
        (TParseContext::unaryOpError):
        (TParseContext::binaryOpError):
        (TParseContext::precisionErrorCheck):
        (TParseContext::lValueErrorCheck):
        (TParseContext::globalErrorCheck):
        (TParseContext::reservedErrorCheck):
        (TParseContext::constructorErrorCheck):
        (TParseContext::voidErrorCheck):
        (TParseContext::boolErrorCheck):
        (TParseContext::samplerErrorCheck):
        (TParseContext::structQualifierErrorCheck):
        (TParseContext::parameterSamplerErrorCheck):
        (TParseContext::containsSampler):
        (TParseContext::arraySizeErrorCheck):
        (TParseContext::arrayQualifierErrorCheck):
        (TParseContext::arrayTypeErrorCheck):
        (TParseContext::arrayErrorCheck):
        (TParseContext::nonInitConstErrorCheck):
        (TParseContext::nonInitErrorCheck):
        (TParseContext::paramErrorCheck):
        (TParseContext::extensionErrorCheck):
        (TParseContext::findFunction):
        (TParseContext::isVariableBuiltIn):
        (TParseContext::executeInitializer):
        (TParseContext::addConstructor):
        (TParseContext::constructBuiltIn):
        (TParseContext::constructStruct):
        (TParseContext::addConstVectorNode):
        (TParseContext::addConstMatrixNode):
        (TParseContext::addConstArrayNode):
        (TParseContext::addConstStruct):
        (TParseContext::enterStructDeclaration):
        (TParseContext::structNestingErrorCheck):
        * src/compiler/ParseHelper.h:
        (TParseContext::TParseContext):
        (TParseContext::pragma):
        * src/compiler/PoolAlloc.cpp:
        (TPoolAllocator::allocate):
        * src/compiler/ShHandle.h:
        * src/compiler/ShaderLang.cpp:
        (ShInitBuiltInResources):
        * src/compiler/SymbolTable.cpp:
        (TType::TType):
        (TType::buildMangledName):
        (TType::getObjectSize):
        (TStructure::containsArrays):
        (TStructure::buildMangledName):
        (TStructure::calculateObjectSize):
        (TStructure::calculateDeepestNesting):
        (TSymbolTableLevel::relateToExtension):
        * src/compiler/SymbolTable.h:
        (TSymbol::relateToExtension):
        (TSymbol::getExtension):
        (TVariable::TVariable):
        (TVariable::setQualifier):
        (TVariable::shareConstPointer):
        * src/compiler/Types.h: Updated and changed enum bit fields to enums to fix compiling with GCC.
        (TField::TField):
        (TField::type):
        (TField::name):
        (NewPoolTFieldList):
        (TStructure::TStructure):
        (TStructure::name):
        (TStructure::fields):
        (TStructure::mangledName):
        (TStructure::objectSize):
        (TStructure::deepestNesting):
        (TType::TType):
        (TType::clearArrayness):
        (TType::getStruct):
        (TType::setStruct):
        (TType::getMangledName):
        (TType::getDeepestStructNesting):
        (TType::isStructureContainingArrays):
        (TPublicType::setBasic):
        * src/compiler/VariableInfo.cpp:
        (getUserDefinedVariableInfo):
        * src/compiler/builtin_symbol_table.cpp: Added.
        (builtin1):
        (builtin2):
        (builtin3):
        (InsertBuiltInFunctionsCommon):
        (InsertBuiltInFunctionsVertex):
        * src/compiler/builtin_symbol_table.h: Added.
        * src/compiler/glslang.l:
        * src/compiler/glslang.y:
        * src/compiler/glslang_lex.cpp:
        (yy_get_previous_state):
        (yy_try_NUL_trans):
        (yyget_lloc):
        (yyset_lloc):
        (string_input):
        (check_type):
        (reserved_word):
        (glslang_scan):
        * src/compiler/glslang_tab.cpp:
        (yysyntax_error):
        (yyerror):
        (glslang_parse):
        * src/compiler/glslang_tab.h: Readded YYLTYPE definition after Bison removed it.
        * src/compiler/intermOut.cpp:
        (TOutputTraverser::visitUnary):
        (TOutputTraverser::visitAggregate):
        (TOutputTraverser::visitConstantUnion):
        * src/compiler/intermediate.h:
        (TIntermNode::TIntermNode):
        (TIntermNode::~TIntermNode):
        (TIntermNode::getLine):
        (TIntermNode::setLine):
        (TIntermNode::getAsLoopNode):
        (TIntermConstantUnion::getIConst):
        (TIntermConstantUnion::getFConst):
        (TIntermConstantUnion::getBConst):
        (TIntermAggregate::TIntermAggregate):
        (TIntermTraverser::TIntermTraverser):
        (TIntermTraverser::getMaxDepth):
        (TIntermTraverser::incrementDepth):
        * src/compiler/localintermediate.h:
        * src/compiler/parseConst.cpp:
        (TConstTraverser::visitSymbol):
        (TConstTraverser::visitBinary):
        (TConstTraverser::visitUnary):
        (TConstTraverser::visitAggregate):
        (TConstTraverser::visitSelection):
        (TConstTraverser::visitConstantUnion):
        (TConstTraverser::visitLoop):
        (TConstTraverser::visitBranch):
        (TIntermediate::parseConstTree):
        * src/compiler/preprocessor/ExpressionParser.cpp:
        * src/compiler/timing/RestrictVertexShaderTiming.cpp:
        (RestrictVertexShaderTiming::visitSymbol):
            Updated ANGLE to r2426 and ran Bison.

2013-06-17  Darin Adler  <darin@apple.com>

        Sort all the Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=117696

        Reviewed by Anders Carlsson.

        * ANGLE.xcodeproj/project.pbxproj: Ran the sort-Xcode-project-file script.

2013-04-18  Krzysztof Wolanski  <k.wolanski@samsung.com>

        Add checking whether the compiler allows to use #pragma directive.
        https://bugs.webkit.org/show_bug.cgi?id=114740

        Reviewed by Andreas Kling.

        Some compilers may complain that #pragma warning is an undefined macro.

        * src/compiler/depgraph/DependencyGraph.cpp:

2013-04-11  Andras Becsi  <andras.becsi@digia.com>

        [Qt][Mac] Linking fails with Qt 5.1
        https://bugs.webkit.org/show_bug.cgi?id=114435

        Reviewed by Tor Arne Vestbø.

        Qt 5.1 enables C++11 by default when using clang on Mac
        and links against the libc++ standard library. As a result
        building the QtWebKit shared library fails when linking
        agains the ANGLE intermediate static library because libc++
        misses some symbols needed by ANGLE.
        Disable C++11 for the ANGLE intermediate library to fix the build.

        * ANGLE.pri:

2013-04-10  Benjamin Poulain  <bpoulain@apple.com>

        Mass remove all the empty directories

        Rubberstamped by Ryosuke Niwa.

        * src/libGLESv2/geometry: Removed.

2013-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        Remove ANGLE.gyp
        https://bugs.webkit.org/show_bug.cgi?id=114245

        Unreviewed. Just removing an empty directory.

        * ANGLE.gyp: Removed.

2013-04-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the gyp build
        https://bugs.webkit.org/show_bug.cgi?id=113942

        Reviewed by Gustavo Noronha Silva.

        * ANGLE.gyp/ANGLE.gyp: Removed.
        * ANGLE.gypi: Removed.

2013-03-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Build ANGLE sources into a separate library from libWebCore.la
        https://bugs.webkit.org/show_bug.cgi?id=112778

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Added, sets up the libANGLE.la library.

2013-03-05  Kenneth Russell  <kbr@google.com>

        Upgrade ANGLE to r1987
        https://bugs.webkit.org/show_bug.cgi?id=111381

        Reviewed by Dean Jackson.

        * include/GLSLANG/ShaderLang.h:
        * src/common/version.h:
        * src/compiler/Compiler.cpp:
        (TCompiler::TCompiler):
        (TCompiler::Init):
        (TCompiler::compile):
        * src/compiler/ParseHelper.h:
        (TParseContext):
        * src/compiler/ShHandle.h:
        (TCompiler):
        * src/compiler/ShaderLang.cpp:
        (ShInitBuiltInResources):
        * src/compiler/UnfoldShortCircuit.cpp:
        (sh::UnfoldShortCircuit::visitSelection):
        * src/compiler/glslang.l:
        * src/compiler/glslang.y:
        * src/compiler/glslang_lex.cpp:
        (glslang_scan):
        * src/compiler/glslang_tab.cpp:
             Updated ANGLE to r1987.

2013-03-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add ANGLE to the GTK+ gyp build
        https://bugs.webkit.org/show_bug.cgi?id=111128

        Reviewed by Dirk Pranke.

        Add files that build an ANGLE static library for GTK+ using gyp.

        * ANGLE.gyp/ANGLE.gyp: Added.
        * ANGLE.gypi: Added.

2013-02-22  Kenneth Russell  <kbr@google.com>

        Mac OS build broken by new ExpressionParser.cpp
        https://bugs.webkit.org/show_bug.cgi?id=110629

        Unreviewed build fix. Regenerated ExpressionParser with Bison 2.3.

        * src/compiler/preprocessor/ExpressionParser.cpp:

2013-02-21  Zhenyao Mo  <zmo@google.com>

        Roll ANGLE to r1833
        https://bugs.webkit.org/show_bug.cgi?id=110513

        Reviewed by Kenneth Russell.

        Upstream ANGLE r1833 includes webkit side local fixes
        1) r139758 build fix for -Wshorten-64-to-32
        2) r139665 build fix for uninitialized variables

        After this roll, WebKit side ANGLE is the same as upstream ANGLE r1833, except:
        1) include/GLSLANG/ShaderLang.h, where "KHR" is removed from include path.

        With this roll, we have EXT_draw_buffers support.
        
        * ANGLE.xcodeproj/project.pbxproj:
        * Target.pri:
        * include/GLSLANG/ShaderLang.h:
        * src/common/debug.cpp:
        * src/common/system.h: Added.
        * src/common/version.h:
        * src/compiler/ArrayBoundsClamper.cpp: Removed.
        * src/compiler/ArrayBoundsClamper.h: Removed.
        * src/compiler/Compiler.cpp:
        (TCompiler::TCompiler):
        (TCompiler::Init):
        (TCompiler::compile):
        (TCompiler::getArrayBoundsClamper):
        (TCompiler::getArrayIndexClampingStrategy):
        (TCompiler::getBuiltInFunctionEmulator):
        * src/compiler/DetectDiscontinuity.cpp:
        (sh::DetectLoopDiscontinuity::traverse):
        (sh::DetectLoopDiscontinuity::visitLoop):
        (sh):
        (sh::DetectLoopDiscontinuity::visitBranch):
        * src/compiler/DetectDiscontinuity.h:
        (DetectLoopDiscontinuity):
        * src/compiler/Initialize.cpp:
        (InitExtensionBehavior):
        * src/compiler/Intermediate.cpp:
        (TIntermConstantUnion::fold):
        (TIntermTraverser::hash):
        * src/compiler/MapLongVariableNames.cpp:
        (LongNameMap::Size):
        (MapLongVariableNames::mapGlobalLongName):
        * src/compiler/MapLongVariableNames.h:
        (LongNameMap):
        * src/compiler/OutputESSL.cpp:
        (TOutputESSL::TOutputESSL):
        * src/compiler/OutputESSL.h:
        (TOutputESSL):
        * src/compiler/OutputGLSL.cpp:
        (TOutputGLSL::TOutputGLSL):
        * src/compiler/OutputGLSL.h:
        (TOutputGLSL):
        * src/compiler/OutputGLSLBase.cpp:
        (TOutputGLSLBase::TOutputGLSLBase):
        (TOutputGLSLBase::writeConstantUnion):
        (TOutputGLSLBase::visitBinary):
        * src/compiler/OutputGLSLBase.h:
        (TOutputGLSLBase):
        * src/compiler/OutputHLSL.cpp:
        (sh::OutputHLSL::output):
        (sh::OutputHLSL::visitLoop):
        (sh::OutputHLSL::writeConstantUnion):
        * src/compiler/ParseHelper.cpp:
        (TParseContext::constructorErrorCheck):
        (PaParseStrings):
        * src/compiler/ParseHelper.h:
        * src/compiler/ShHandle.h:
        (TCompiler):
        * src/compiler/ShaderLang.cpp:
        (checkActiveUniformAndAttribMaxLengths):
        (checkMappedNameMaxLength):
        (getVariableInfo):
        (ShInitBuiltInResources):
        (ShCompile):
        (ShGetInfo):
        (ShGetActiveAttrib):
        (ShGetActiveUniform):
        (ShGetNameHashingEntry):
        * src/compiler/SymbolTable.h:
        (TFunction::getParamCount):
        (TFunction::getParam):
        (TSymbolTable::setDefaultPrecision):
        * src/compiler/TranslatorESSL.cpp:
        (TranslatorESSL::translate):
        * src/compiler/TranslatorGLSL.cpp:
        (TranslatorGLSL::translate):
        * src/compiler/ValidateLimitations.cpp:
        (ValidateLimitations::validateFunctionCall):
        * src/compiler/VariablePacker.cpp:
        (VariablePacker::GetNumRows):
        * src/compiler/glslang.h:
        * src/compiler/glslang.l:
        * src/compiler/glslang.y:
        * src/compiler/glslang_lex.cpp:
        (string_input):
        (glslang_scan):
        * src/compiler/glslang_tab.cpp:
        * src/compiler/preprocessor/ExpressionParser.cpp:
        * src/compiler/preprocessor/ExpressionParser.y:
        * src/compiler/preprocessor/Input.cpp:
        (pp::Input::Input):
        (pp::Input::read):
        * src/compiler/preprocessor/Input.h:
        (Input):
        (pp::Input::count):
        (pp::Input::string):
        (pp::Input::length):
        (Location):
        * src/compiler/preprocessor/Preprocessor.cpp:
        (pp::Preprocessor::init):
        * src/compiler/preprocessor/Preprocessor.h:
        (Preprocessor):
        * src/compiler/preprocessor/Tokenizer.cpp:
        (pp::Tokenizer::init):
        * src/compiler/preprocessor/Tokenizer.h:
        (Tokenizer):
        * src/compiler/preprocessor/Tokenizer.l:
        * src/third_party: Added.
        * src/third_party/compiler: Added.
        * src/third_party/compiler/ArrayBoundsClamper.cpp: Added.
        (ArrayBoundsClamper::ArrayBoundsClamper):
        (ArrayBoundsClamper::SetClampingStrategy):
        (ArrayBoundsClamper::MarkIndirectArrayBoundsForClamping):
        (ArrayBoundsClamper::OutputClampingFunctionDefinition):
        * src/third_party/compiler/ArrayBoundsClamper.h: Added.
        (ArrayBoundsClamper):
        (ArrayBoundsClamper::Cleanup):
        (ArrayBoundsClamper::GetArrayBoundsClampDefinitionNeeded):
        (ArrayBoundsClamper::SetArrayBoundsClampDefinitionNeeded):
        * src/third_party/compiler/LICENSE: Added.
        * src/third_party/compiler/README.angle: Added.

2013-02-04  David Kilzer  <ddkilzer@apple.com>

        Sort ANGLE Xcode project file.

        * ANGLE.xcodeproj/project.pbxproj:

2013-01-30  David Kilzer  <ddkilzer@apple.com>

        Remove useless comment from Base.xcconfig

        Rubber-stamped by Mark Rowe.

        * Configurations/Base.xcconfig: Remove comment.

2013-01-16  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Doesn't build with GCC 4.7+
        https://bugs.webkit.org/show_bug.cgi?id=106999

        Reviewed by Csaba Osztrogonác.

        Correct __GNU_C_MINOR__ macro to __GNUC_MINOR__.

        * src/compiler/preprocessor/ExpressionParser.y:

2013-01-15  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Add SUPPORTED_PLATFORMS to Base.xcconfig

        * Configurations/Base.xcconfig: Add SUPPORTED_PLATFORMS so that
        Xcode knows we can build this project for all three platforms.
        Previously the Mac OS X SDKs were missing in the scheme picker.

2013-01-15  David Kilzer  <ddkilzer@apple.com>

        Upstream iOS changes for ANGLE project
        <http://webkit.org/b/106913>

        Reviewed by Joseph Pecoraro.

        * ANGLE.xcodeproj/project.pbxproj:
        - Use $(INSTALL_PATH_PREFIX) with CopyFiles build phase paths.
        - Add iOS.xcconfig to project.
        * Configurations/ANGLE.xcconfig:
        - Use INSTALL_PATH_ACTUAL instead of INSTALL_PATH.  (See below.)
        - Use $(INSTALL_PATH_PREFIX) with PUBLIC_HEADERS_FOLDER_PATH.
        * Configurations/Base.xcconfig:
        - Include iOS.xcconfig.
        - Add per-platform values for GCC_ENABLE_OBJC_GC and
          GCC_MODEL_TUNING.
        - Define INSTALL_PATH when building for macosx SDK.
        * Configurations/iOS.xcconfig: Add.  Note that missing include
        files are simply ignored without an error by Xcode.

2013-01-15  David Kilzer  <ddkilzer@apple.com>

        ANGLE should build with -Wshorten-64-to-32
        <http://webkit.org/b/106798>
        <http://code.google.com/p/angleproject/issues/detail?id=396>

        Reviewed by Kenneth Russell.

        Most changes below are simply to document issues with #pragma
        statements per request by upstream.  The change to osinclude.h
        is the only bug fix, which defines OS_TLSIndex in terms of
        pthread_key_t instead of unsigned int since pthread_key_t is a
        64-bit value on 64-bit Mac OS X.

        * Configurations/Base.xcconfig: Enable -Wshorten-64-to-32 by
        setting GCC_WARN_64_TO_32_BIT_CONVERSION to YES.
        * src/compiler/Intermediate.cpp:
        (TIntermTraverser::hash): Add #pragmas for clang to ignore
        -Wshorten-64-to-32 warning.
        * src/compiler/MapLongVariableNames.cpp:
        (LongNameMap::Size): Ditto.
        * src/compiler/ShaderLang.cpp:
        (getVariableInfo): Ditto.
        (ShGetInfo): Ditto.
        * src/compiler/ValidateLimitations.cpp:
        (ValidateLimitations::validateFunctionCall): Ditto.
        * src/compiler/glslang.l: Ditto.
        * src/compiler/glslang_lex.cpp: Ditto.
        * src/compiler/osinclude.h: Change type of OS_TLSIndex to
        pthread_key_t.  Define OS_INVALID_TLS_INDEX by using
        static_cast<OS_TLSIndex>(-1).
        * src/compiler/preprocessor/Input.cpp:
        (pp::Input::Input): Add #pragmas for clang to ignore
        -Wshorten-64-to-32 warning.
        * src/compiler/preprocessor/Tokenizer.cpp: Ditto.
        * src/compiler/preprocessor/Tokenizer.l: Ditto.

2013-01-14  David Kilzer  <ddkilzer@apple.com>

        Remove nonexistent file in ANGLE Xcode project

        * ANGLE.xcodeproj/project.pbxproj: Remove references to
        ossource_nspr.cpp which was removed in r139665.

2013-01-14  Dean Jackson  <dino@apple.com>

        Unreviewed QT build fix.

        * ANGLE.pri:

2013-01-14  Dean Jackson  <dino@apple.com>

        [ANGLE] Update ANGLE in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=106274

        Unreviewed attempted build fix.

        Remove the copy files stage. Make khrplatform.h a public header.

        * ANGLE.xcodeproj/project.pbxproj:
        * include/GLSLANG/ShaderLang.h:

2013-01-14  Max Vujovic  <mvujovic@adobe.com>

        [ANGLE] Update ANGLE in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=106274

        Reviewed by Dean Jackson.

        Update ANGLE to r1641.

        ANGLE parsers were generated with Bison 2.3.

        Additionally, perform the following changes to WebKit's ANGLE build system. Note that these
        changes only apply to WebKit's copy of ANGLE, and do not need to be upstreamed to ANGLE.
        (a) Remove all files in the libEGL and libGLESv2 directories because nobody is using them. 
            Add a README in each directory to explain why their contents are not copied over from
            ANGLE. This simplifies updating ANGLE in the future.
        (b) Remove the build_angle.xcodeproj file that no-one is using. It appears it was copied
            over from a gyp build of ANGLE. The Mac build uses ANGLE.xcodeproj.
        (c) Remove duplicate file entries in ANGLE.xcodeproj. Change its Xcode group structure to
            match ANGLE's directory structure.
        (d) Add a Copy Files task to ANGLE.xcodeproj to put the khrplatform.h header in the right
            place so ShaderLang.h can find it. ShaderLang.h is copied to
            <BuildDir>/usr/local/include/ANGLE/ShaderLang.h during the Copy Headers task, and it
            includes "KHR/khrplatform.h". Thus, we need to copy khrplatform.h to
            <BuildDir>/usr/local/include/ANGLE/KHR/khrplatform.h.

        Additionally, make one build fix in ANGLE source that should be upstreamed to ANGLE:
        (1) Before this patch in ExpressionParser.y, we toggled the "-Wpragmas" flag so compilers
            could ignore the pragmas that they didn't understand instead of generating an error.
            However, clang does not understand "-Wpragmas" itself. Instead, tt understands
            "-Wunknown-pragmas". Now, instead of trying to temporarily ignore pragmas, we apply the
            right flags to the right compiler versions. The new code in ExpressionParser.y looks
            like:

        """
        // Turn off uninitialized variable warnings triggered by the auto-generated pplval variable.
        // On gcc 4.7+, The flag is called "-Wmaybe-uninitialized".
        // On clang and gcc < 4.7, the flag is called "-Wuninitialized".
        #if !defined(__clang__) && ((__GNUC__ == 4 && __GNU_C_MINOR__ >= 7) || __GNUC__ >= 5)
        #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
        #else
        #pragma GCC diagnostic ignored "-Wuninitialized"
        #endif
        """

        * ANGLE.plist:
        * ANGLE.pri:
        * ANGLE.xcodeproj/project.pbxproj:
        * DerivedSources.pri:
        * Target.pri:
        * include/GLSLANG/ShaderLang.h:
        * src/build_angle.xcodeproj/project.pbxproj: Removed.
        * src/common/angleutils.h:
        * src/common/debug.cpp:
        (gl::ScopedPerfEventHelper::ScopedPerfEventHelper):
        * src/common/debug.h:
        * src/common/version.h:
        * src/compiler/Compiler.cpp:
        (TCompiler::Init):
        (TCompiler::compile):
        (TCompiler::clearResults):
        (TCompiler::collectAttribsUniforms):
        (TCompiler::enforcePackingRestrictions):
        * src/compiler/Diagnostics.cpp:
        (TDiagnostics::TDiagnostics):
        (TDiagnostics::writeInfo):
        (TDiagnostics::print):
        * src/compiler/Diagnostics.h:
        (TDiagnostics::numErrors):
        (TDiagnostics::numWarnings):
        (TDiagnostics):
        * src/compiler/DirectiveHandler.h:
        * src/compiler/HashNames.h: Added.
        * src/compiler/Intermediate.cpp:
        (TIntermTraverser::hash):
        * src/compiler/OutputESSL.cpp:
        (TOutputESSL::TOutputESSL):
        * src/compiler/OutputESSL.h:
        (TOutputESSL):
        * src/compiler/OutputGLSL.cpp:
        (TOutputGLSL::TOutputGLSL):
        * src/compiler/OutputGLSL.h:
        (TOutputGLSL):
        * src/compiler/OutputGLSLBase.cpp:
        (TOutputGLSLBase::TOutputGLSLBase):
        (TOutputGLSLBase::writeVariableType):
        (TOutputGLSLBase::writeFunctionParameters):
        (TOutputGLSLBase::writeConstantUnion):
        (TOutputGLSLBase::visitSymbol):
        (TOutputGLSLBase::visitBinary):
        (TOutputGLSLBase::visitAggregate):
        (TOutputGLSLBase::getTypeName):
        (TOutputGLSLBase::hashName):
        (TOutputGLSLBase::hashVariableName):
        (TOutputGLSLBase::hashFunctionName):
        * src/compiler/OutputGLSLBase.h:
        (TOutputGLSLBase):
        * src/compiler/OutputHLSL.cpp:
        (sh::OutputHLSL::OutputHLSL):
        (sh::OutputHLSL::header):
        (sh::OutputHLSL::visitAggregate):
        (sh::OutputHLSL::visitBranch):
        (sh::OutputHLSL::handleExcessiveLoop):
        * src/compiler/OutputHLSL.h:
        (OutputHLSL):
        * src/compiler/ParseHelper.cpp:
        (TParseContext::error):
        (TParseContext::nonInitConstErrorCheck):
        (PaParseStrings):
        * src/compiler/ParseHelper.h:
        (TParseContext::TParseContext):
        (TParseContext):
        (TParseContext::numErrors):
        * src/compiler/RenameFunction.h:
        (RenameFunction::visitAggregate):
        * src/compiler/ShHandle.h:
        (TCompiler::getHashFunction):
        (TCompiler::getNameMap):
        (TCompiler::getSymbolTable):
        (TCompiler):
        * src/compiler/ShaderLang.cpp:
        (ShInitBuiltInResources):
        (ShGetInfo):
        (ShGetNameHashingEntry):
        * src/compiler/SymbolTable.cpp:
        (TType::TType):
        (TType::isStructureContainingArrays):
        * src/compiler/SymbolTable.h:
        (TSymbolTable::findBuiltIn):
        (TSymbolTable):
        * src/compiler/TranslatorESSL.cpp:
        (TranslatorESSL::translate):
        * src/compiler/TranslatorGLSL.cpp:
        (TranslatorGLSL::translate):
        * src/compiler/Types.h:
        (TType):
        (TPublicType):
        (TPublicType::setBasic):
        (TPublicType::setAggregate):
        (TPublicType::setArray):
        (TPublicType::isStructureContainingArrays):
        * src/compiler/UnfoldShortCircuit.cpp:
        (sh::UnfoldShortCircuit::visitBinary):
        * src/compiler/VariableInfo.cpp:
        (getVariableInfo):
        (getUserDefinedVariableInfo):
        (TVariableInfo::TVariableInfo):
        (CollectAttribsUniforms::CollectAttribsUniforms):
        (CollectAttribsUniforms::visitAggregate):
        * src/compiler/VariableInfo.h:
        (TVariableInfo):
        (CollectAttribsUniforms):
        * src/compiler/VariablePacker.cpp: Added.
        (VariablePacker::GetNumComponentsPerRow):
        (VariablePacker::GetNumRows):
        (TVariableInfoComparer::operator()):
        (VariablePacker::makeColumnFlags):
        (VariablePacker::fillColumns):
        (VariablePacker::searchColumn):
        (VariablePacker::CheckVariablesWithinPackingLimits):
        * src/compiler/VariablePacker.h: Added.
        (VariablePacker):
        * src/compiler/VersionGLSL.cpp:
        (TVersionGLSL::visitAggregate):
        * src/compiler/VersionGLSL.h:
        (TVersionGLSL):
        * src/compiler/glslang.l:
        * src/compiler/glslang.y:
        * src/compiler/glslang_lex.cpp:
        (string_input):
        (glslang_finalize):
        (glslang_scan):
        * src/compiler/glslang_tab.cpp:
        * src/compiler/intermediate.h:
        (TIntermTraverser):
        * src/compiler/osinclude.h:
        (OS_GetTLSValue):
        * src/compiler/ossource_nspr.cpp:
        * src/compiler/preprocessor/DiagnosticsBase.cpp: Added.
        (pp):
        (pp::Diagnostics::~Diagnostics):
        (pp::Diagnostics::report):
        (pp::Diagnostics::severity):
        (pp::Diagnostics::message):
        * src/compiler/preprocessor/DiagnosticsBase.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Diagnostics.h.
        (pp):
        (Diagnostics):
        * src/compiler/preprocessor/DirectiveHandlerBase.cpp: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/DirectiveHandlerBase.cpp.
        (pp):
        (pp::DirectiveHandler::~DirectiveHandler):
        * src/compiler/preprocessor/DirectiveHandlerBase.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/DirectiveHandler.h.
        (pp):
        (DirectiveHandler):
        * src/compiler/preprocessor/DirectiveParser.cpp: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/DirectiveParser.cpp.
        (getDirective):
        (isConditionalDirective):
        (isEOD):
        (skipUntilEOD):
        (isMacroNameReserved):
        (isMacroPredefined):
        (pp):
        (DefinedParser):
        (pp::DefinedParser::DefinedParser):
        (pp::DefinedParser::lex):
        (pp::DirectiveParser::DirectiveParser):
        (pp::DirectiveParser::lex):
        (pp::DirectiveParser::parseDirective):
        (pp::DirectiveParser::parseDefine):
        (pp::DirectiveParser::parseUndef):
        (pp::DirectiveParser::parseIf):
        (pp::DirectiveParser::parseIfdef):
        (pp::DirectiveParser::parseIfndef):
        (pp::DirectiveParser::parseElse):
        (pp::DirectiveParser::parseElif):
        (pp::DirectiveParser::parseEndif):
        (pp::DirectiveParser::parseError):
        (pp::DirectiveParser::parsePragma):
        (pp::DirectiveParser::parseExtension):
        (pp::DirectiveParser::parseVersion):
        (pp::DirectiveParser::parseLine):
        (pp::DirectiveParser::skipping):
        (pp::DirectiveParser::parseConditionalIf):
        (pp::DirectiveParser::parseExpressionIf):
        (pp::DirectiveParser::parseExpressionIfdef):
        * src/compiler/preprocessor/DirectiveParser.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/DirectiveParser.h.
        (pp):
        (DirectiveParser):
        (ConditionalBlock):
        (pp::DirectiveParser::ConditionalBlock::ConditionalBlock):
        * src/compiler/preprocessor/ExpressionParser.cpp: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/ExpressionParser.cpp.
        (yysyntax_error):
        (yylex):
        (yyerror):
        (pp):
        (pp::ExpressionParser::ExpressionParser):
        (pp::ExpressionParser::parse):
        * src/compiler/preprocessor/ExpressionParser.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/ExpressionParser.h.
        (pp):
        (ExpressionParser):
        * src/compiler/preprocessor/ExpressionParser.y: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/ExpressionParser.y.
        * src/compiler/preprocessor/Input.cpp: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Input.cpp.
        (pp):
        (pp::Input::Input):
        (pp::Input::read):
        * src/compiler/preprocessor/Input.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Input.h.
        (pp):
        (Input):
        (pp::Input::count):
        (pp::Input::string):
        (pp::Input::length):
        (Location):
        (pp::Input::Location::Location):
        (pp::Input::readLoc):
        * src/compiler/preprocessor/Lexer.cpp: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Lexer.cpp.
        (pp):
        (pp::Lexer::~Lexer):
        * src/compiler/preprocessor/Lexer.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Lexer.h.
        (pp):
        (Lexer):
        * src/compiler/preprocessor/Macro.cpp: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Macro.cpp.
        (pp):
        (pp::Macro::equals):
        * src/compiler/preprocessor/Macro.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Macro.h.
        (pp):
        (pp::Macro::Macro):
        (Macro):
        * src/compiler/preprocessor/MacroExpander.cpp: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/MacroExpander.cpp.
        (pp):
        (TokenLexer):
        (pp::TokenLexer::TokenLexer):
        (pp::TokenLexer::lex):
        (pp::MacroExpander::MacroExpander):
        (pp::MacroExpander::~MacroExpander):
        (pp::MacroExpander::lex):
        (pp::MacroExpander::getToken):
        (pp::MacroExpander::ungetToken):
        (pp::MacroExpander::isNextTokenLeftParen):
        (pp::MacroExpander::pushMacro):
        (pp::MacroExpander::popMacro):
        (pp::MacroExpander::expandMacro):
        (pp::MacroExpander::collectMacroArgs):
        (pp::MacroExpander::replaceMacroParams):
        * src/compiler/preprocessor/MacroExpander.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/MacroExpander.h.
        (pp):
        (MacroExpander):
        (MacroContext):
        (pp::MacroExpander::MacroContext::MacroContext):
        (pp::MacroExpander::MacroContext::empty):
        (pp::MacroExpander::MacroContext::get):
        (pp::MacroExpander::MacroContext::unget):
        * src/compiler/preprocessor/Preprocessor.cpp: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Preprocessor.cpp.
        (pp):
        (PreprocessorImpl):
        (pp::PreprocessorImpl::PreprocessorImpl):
        (pp::Preprocessor::Preprocessor):
        (pp::Preprocessor::~Preprocessor):
        (pp::Preprocessor::init):
        (pp::Preprocessor::predefineMacro):
        (pp::Preprocessor::lex):
        * src/compiler/preprocessor/Preprocessor.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Preprocessor.h.
        (pp):
        (Preprocessor):
        * src/compiler/preprocessor/SourceLocation.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/SourceLocation.h.
        (pp):
        (pp::SourceLocation::SourceLocation):
        (SourceLocation):
        (pp::SourceLocation::equals):
        (pp::operator==):
        (pp::operator!=):
        * src/compiler/preprocessor/Token.cpp: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Token.cpp.
        (pp):
        (pp::Token::reset):
        (pp::Token::equals):
        (pp::Token::setAtStartOfLine):
        (pp::Token::setHasLeadingSpace):
        (pp::Token::setExpansionDisabled):
        (pp::Token::iValue):
        (pp::Token::uValue):
        (pp::Token::fValue):
        (pp::operator<<):
        * src/compiler/preprocessor/Token.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Token.h.
        (pp):
        (pp::Token::Token):
        (Token):
        (pp::Token::atStartOfLine):
        (pp::Token::hasLeadingSpace):
        (pp::Token::expansionDisabled):
        (pp::operator==):
        (pp::operator!=):
        * src/compiler/preprocessor/Tokenizer.cpp: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Tokenizer.cpp.
        (yy_buffer_state):
        (yy_trans_info):
        (yyguts_t):
        (yy_get_previous_state):
        (yy_try_NUL_trans):
        (input):
        (pprestart):
        (pp_switch_to_buffer):
        (pp_load_buffer_state):
        (pp_create_buffer):
        (pp_delete_buffer):
        (pp_init_buffer):
        (pp_flush_buffer):
        (pppush_buffer_state):
        (pppop_buffer_state):
        (ppensure_buffer_stack):
        (pp_scan_buffer):
        (pp_scan_string):
        (pp_scan_bytes):
        (yy_fatal_error):
        (ppget_extra):
        (ppget_lineno):
        (ppget_column):
        (ppget_in):
        (ppget_out):
        (ppget_leng):
        (ppget_text):
        (ppset_extra):
        (ppset_lineno):
        (ppset_column):
        (ppset_in):
        (ppset_out):
        (ppget_debug):
        (ppset_debug):
        (ppget_lval):
        (ppset_lval):
        (ppget_lloc):
        (ppset_lloc):
        (pplex_init):
        (pplex_init_extra):
        (yy_init_globals):
        (pplex_destroy):
        (yy_flex_strncpy):
        (yy_flex_strlen):
        (ppalloc):
        (pprealloc):
        (ppfree):
        (pp):
        (pp::Tokenizer::Tokenizer):
        (pp::Tokenizer::~Tokenizer):
        (pp::Tokenizer::init):
        (pp::Tokenizer::setFileNumber):
        (pp::Tokenizer::setLineNumber):
        (pp::Tokenizer::lex):
        (pp::Tokenizer::initScanner):
        (pp::Tokenizer::destroyScanner):
        * src/compiler/preprocessor/Tokenizer.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Tokenizer.h.
        (pp):
        (Tokenizer):
        (Context):
        * src/compiler/preprocessor/Tokenizer.l: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Tokenizer.l.
        * src/compiler/preprocessor/atom.c: Removed.
        * src/compiler/preprocessor/atom.h: Removed.
        * src/compiler/preprocessor/compile.h: Removed.
        * src/compiler/preprocessor/cpp.c: Removed.
        * src/compiler/preprocessor/cpp.h: Removed.
        * src/compiler/preprocessor/cppstruct.c: Removed.
        * src/compiler/preprocessor/generate_parser.sh: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/generate_parser.sh.
        * src/compiler/preprocessor/memory.c: Removed.
        * src/compiler/preprocessor/memory.h: Removed.
        * src/compiler/preprocessor/new/DiagnosticsBase.cpp: Removed.
        * src/compiler/preprocessor/new/new_file.cpp: Removed.
        * src/compiler/preprocessor/new/new_file2.cpp: Removed.
        * src/compiler/preprocessor/new/preprocessor.vcproj: Removed.
        * src/compiler/preprocessor/numeric_lex.h: Added.
        (pp):
        (pp::numeric_base_int):
        (pp::numeric_lex_int):
        (pp::numeric_lex_float):
        * src/compiler/preprocessor/parser.h: Removed.
        * src/compiler/preprocessor/pp_utils.h: Renamed from Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/pp_utils.h.
        * src/compiler/preprocessor/preprocess.h: Removed.
        * src/compiler/preprocessor/scanner.c: Removed.
        * src/compiler/preprocessor/scanner.h: Removed.
        * src/compiler/preprocessor/slglobals.h: Removed.
        * src/compiler/preprocessor/symbols.c: Removed.
        * src/compiler/preprocessor/symbols.h: Removed.
        * src/compiler/preprocessor/tokens.c: Removed.
        * src/compiler/preprocessor/tokens.h: Removed.
        * src/libEGL/Config.cpp: Removed.
        * src/libEGL/Config.h: Removed.
        * src/libEGL/Display.cpp: Removed.
        * src/libEGL/Display.h: Removed.
        * src/libEGL/README: Added.
        * src/libEGL/Surface.cpp: Removed.
        * src/libEGL/Surface.h: Removed.
        * src/libEGL/libEGL.cpp: Removed.
        * src/libEGL/libEGL.def: Removed.
        * src/libEGL/libEGL.rc: Removed.
        * src/libEGL/libEGL.vcproj: Removed.
        * src/libEGL/main.cpp: Removed.
        * src/libEGL/main.h: Removed.
        * src/libEGL/resource.h: Removed.
        * src/libGLESv2/Blit.cpp: Removed.
        * src/libGLESv2/Blit.h: Removed.
        * src/libGLESv2/Buffer.cpp: Removed.
        * src/libGLESv2/Buffer.h: Removed.
        * src/libGLESv2/Context.cpp: Removed.
        * src/libGLESv2/Context.h: Removed.
        * src/libGLESv2/Fence.cpp: Removed.
        * src/libGLESv2/Fence.h: Removed.
        * src/libGLESv2/Framebuffer.cpp: Removed.
        * src/libGLESv2/Framebuffer.h: Removed.
        * src/libGLESv2/HandleAllocator.cpp: Removed.
        * src/libGLESv2/HandleAllocator.h: Removed.
        * src/libGLESv2/IndexDataManager.cpp: Removed.
        * src/libGLESv2/IndexDataManager.h: Removed.
        * src/libGLESv2/Program.cpp: Removed.
        * src/libGLESv2/Program.h: Removed.
        * src/libGLESv2/ProgramBinary.cpp: Removed.
        * src/libGLESv2/ProgramBinary.h: Removed.
        * src/libGLESv2/Query.cpp: Removed.
        * src/libGLESv2/Query.h: Removed.
        * src/libGLESv2/README: Added.
        * src/libGLESv2/Renderbuffer.cpp: Removed.
        * src/libGLESv2/Renderbuffer.h: Removed.
        * src/libGLESv2/ResourceManager.cpp: Removed.
        * src/libGLESv2/ResourceManager.h: Removed.
        * src/libGLESv2/Shader.cpp: Removed.
        * src/libGLESv2/Shader.h: Removed.
        * src/libGLESv2/Texture.cpp: Removed.
        * src/libGLESv2/Texture.h: Removed.
        * src/libGLESv2/VertexDataManager.cpp: Removed.
        * src/libGLESv2/VertexDataManager.h: Removed.
        * src/libGLESv2/libGLESv2.cpp: Removed.
        * src/libGLESv2/libGLESv2.def: Removed.
        * src/libGLESv2/libGLESv2.rc: Removed.
        * src/libGLESv2/libGLESv2.vcproj: Removed.
        * src/libGLESv2/main.cpp: Removed.
        * src/libGLESv2/main.h: Removed.
        * src/libGLESv2/mathutil.h: Removed.
        * src/libGLESv2/resource.h: Removed.
        * src/libGLESv2/utilities.cpp: Removed.
        * src/libGLESv2/utilities.h: Removed.
        * src/libGLESv2/vertexconversion.h: Removed.

2012-12-18  Max Vujovic  <mvujovic@adobe.com>

        [ANGLE] Use of uninitialized memory in ArrayBoundsClamper
        https://bugs.webkit.org/show_bug.cgi?id=105218

        Reviewed by Dean Jackson.

        TIntermBinary::addIndexClamp is uninitialized when the compile flag 
        SH_CLAMP_INDIRECT_ARRAY_BOUNDS is not set. Then, addIndexClamp is used in OutputGLSLBase. 
        CSS Shaders needs to do a first validation pass without the SH_CLAMP_INDIRECT_ARRAY_BOUNDS 
        flag and its effects. However, sometimes addIndexClamp is true, which inserts clamping code
        that causes a shader to fail compilation at the WebGL level.

        * src/compiler/intermediate.h:
        (TIntermBinary::TIntermBinary):

2012-10-29  Anders Carlsson  <andersca@apple.com>

        Build WebKit as C++11 on Mac
        https://bugs.webkit.org/show_bug.cgi?id=100720

        Reviewed by Daniel Bates.

        * Configurations/Base.xcconfig:
        Add CLANG_CXX_LANGUAGE_STANDARD=gnu++0x.

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Simplify Xcode configuration settings that used to vary between OS versions.

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Remove references to unsupported OS and Xcode versions.

        Reviewed by Anders Carlsson.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig: Removed.
        * Configurations/DebugRelease.xcconfig:

2012-10-27  Dan Bernstein  <mitz@apple.com>

        REAL_PLATFORM_NAME build setting is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=100587

        Reviewed by Mark Rowe.

        Removed the definition of REAL_PLATFORM_NAME and replaced references to it with references
        to PLATFORM_NAME.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig:

2012-10-18  Dean Jackson  <dino@apple.com>

        Shader translator needs option to clamp uniform array accesses in vertex shaders
        https://bugs.webkit.org/show_bug.cgi?id=98977
        https://code.google.com/p/angleproject/issues/detail?id=49

        Reviewed by Alok Priyadarshi and Ken Russell.

        WebGL does not allow GLSL code to index a uniform array outside its bounds. Add a
        flag to the ANGLE compiler to insert clamp statements around such indexing.
        Since it is possible to access vec2/3/4 and mat2/3/4 components by array indexing,
        they must be similarly clamped.

        Unfortunately, it is currently not possible to always determine that the indexing is
        operating on a uniform variable. For example, suppose we have "uniform mat4 a". ANGLE
        is currently not able to tell us that the rvalue of "a[0]" is a uniform, just that
        it has a size of 4. Therefore, the clamping is done on all indirect array indexing.

        This will have a performance impact. Future enhancements may be able to determine
        cases where the clamping is not necessary. Currently only direct indexing is skipped
        (i.e. looking up a value using a constant index).

        The clamp insertion is only performed on the GLSL output. Direct3D already guarantees
        that out-of-bounds uniform array access returns a zero value.

        * ANGLE.xcodeproj/project.pbxproj:
        * Target.pri:
        * include/GLSLANG/ShaderLang.h: New compiler option.
        * src/compiler/ArrayBoundsClamper.cpp: Added.
        (ArrayBoundsClamper::ArrayBoundsClamper):
        (ArrayBoundsClamper::OutputClampingFunctionDefinition): Injects a clamping function for integers into GLSL source.
        (ArrayBoundsClamper::MarkIndirectArrayBoundsForClamping): Examines the AST looking for non-direct array indexing.
        * src/compiler/ArrayBoundsClamper.h: Added.
        (ArrayBoundsClamper):
        (ArrayBoundsClamper::GetArrayBoundsClampDefinitionNeeded):
        (ArrayBoundsClamper::SetArrayBoundsClampDefinitionNeeded): Marks the object as needing to output the clamping function.
        (ArrayBoundsClamper::Cleanup): Resets the state so that subsequent runs start fresh.
        * src/compiler/Compiler.cpp:
        (TCompiler::compile): Run the clamping code if the compile option was set.
        (TCompiler::clearResults):
        (TCompiler::getArrayBoundsClamper):
        * src/compiler/OutputGLSLBase.cpp:
        (TOutputGLSLBase::visitBinary): If the expression has been flagged, insert an appropriate "clamp" statement.
        * src/compiler/ShHandle.h:
        (TCompiler):
        * src/compiler/TranslatorESSL.cpp:
        (TranslatorESSL::translate):
        * src/compiler/TranslatorGLSL.cpp:
        (TranslatorGLSL::translate):
        * src/compiler/intermOut.cpp:
        (TType::getCompleteString): Add array size to intermediate tree output.
        * src/compiler/intermediate.h:
        (TIntermBinary::setAddIndexClamp): New flag for indicating a binary expression needs clamping.
        (TIntermBinary::getAddIndexClamp):
        (TIntermBinary):

2012-09-13  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/12255720> Fix the build with newer Clang

        Reviewed by Sam Weinig.
        
        Clang generates a warning about the inclusion of trailing commas on the final enum item as it's apparently
        a C++11 extension. Remove them.
        
        * src/compiler/BaseTypes.h:
        * src/compiler/ExtensionBehavior.h:
        * src/compiler/ParseHelper.cpp:
        (TParseContext::parseVectorFields):
        * src/compiler/intermediate.h:

2012-09-13  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] The ANGLE build on Windows breaks with GnuWin32's flex because it is too old
        https://bugs.webkit.org/show_bug.cgi?id=96359

        Reviewed by Tor Arne Vestbø.

        GnuWin32's flex is 2.5.4 and that is too old for ANGLE's preprocessor
        lexer. The only viable alternative I could find on Windows that provides
        binaries is the winflexbison distribution (http://sourceforge.net/projects/winflexbison/),
        so let's use that one instead.

        * DerivedSources.pri:

2012-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build on Windows requires bison/flex in PATH
        https://bugs.webkit.org/show_bug.cgi?id=96358

        Reviewed by Tor Arne Vestbø.

        Use MAKEFILE_NOOP_COMMAND instead of the \n\t trick to generate a dummy command. Otherwise
        the PATH prepend trick will break because it generates a command line along the lines of
        (set PATH="...") && with just that trailing ampersand pair.

        * DerivedSources.pri:

2012-09-10  Dean Jackson  <dino@apple.com>

        [Apple] Install plist for Apple Open Source build system
        https://bugs.webkit.org/show_bug.cgi?id=96345

        Reviewed by Mark Rowe.

        Apple's build system requires a couple of files that describe where
        the 3rd party Open Source library came from, and what license it
        uses. These files are copied into /usr/local when the project is
        being installed.

        * ANGLE.plist: Added.
        * ANGLE.txt: Added.
        * ANGLE.xcodeproj/project.pbxproj:

2012-09-06  Andras Becsi  <andras.becsi@nokia.com>

        [ANGLE] Fix the build with gcc 4.7
        https://bugs.webkit.org/show_bug.cgi?id=95989

        Reviewed by Csaba Osztrogonác.

        The build fails because of a bogus warning about the auto-generated
        pplval variable. Unfortunately the warning is called -Wuninitialized
        in gcc 4.6 and -Wmaybe-uninitialized in gcc 4.7 thus we also need to
        ignore unknown pragmas not to break the build with compilers that do
        not recognize these options.

        * src/compiler/preprocessor/new/ExpressionParser.y:

2012-09-06  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build with ANGLE on platforms that provide EGL/GLESv2
        https://bugs.webkit.org/show_bug.cgi?id=95965

        Reviewed by Tor Arne Vestbø.

        Add build rules to build ANGLE as a static library for the Qt port.

        * ANGLE.pri: Added.
        * ANGLE.pro: Added.
        * DerivedSources.pri: Added.
        * Target.pri: Added.

2012-08-24  Joshua Netterfield  <jnetterfield@rim.com>

        [CSS Shaders] [ANGLE] RenameFunction::RenameFunction may store references to temporary string
        https://bugs.webkit.org/show_bug.cgi?id=94736
        http://code.google.com/p/angleproject/issues/detail?id=360

        Reviewed by George Staikos.

        When RenameFunction::RenameFunction(const TString& oldFunctionName, const TString&
        newFunctionName) is called from TCompiler::rewriteCSSShader(TIntermNode*), references to
        the temporaries oldFunctionName and newFunctionName are stored as mOldFunctionName and
        mNewFunctionName. This results in undefined behaviour in visitAggregate.

        This same patch is being applied in upstream ANGLE, and is needed for CSS Shader
        sanitization.

        * src/compiler/RenameFunction.h:
        (RenameFunction::visitAggregate):
        (RenameFunction):

2012-07-18  Kristóf Kosztyó  <kkristof@inf.u-szeged.hu>

        [Qt] Buildfix after r122870.
        https://bugs.webkit.org/show_bug.cgi?id=89039

        Reviewed by Csaba Osztrogonác

        * src/compiler/preprocessor/new/MacroExpander.cpp:
        (pp::MacroExpander::ungetToken):

2012-07-17  Max Vujovic  <mvujovic@adobe.com>

        Update ANGLE in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=89039

        Reviewed by Dean Jackson and Mark Rowe.

        Update ANGLE to r1170, with the following modifications:

        (1) Use Bison 2.3 instead of Bison 2.4.2 to generate ExpressionParser.cpp and
        glslang_tab.cpp. I had to modify ExpressionParser.y to make it compatible with Bison
        2.3. The changes have been contributed back to ANGLE in r1224.

        (2) Continue to recognize QNX as POSIX in ANGLE. This has been contributed back to ANGLE
        in r1223.

        (3) Rename ANGLE/src/compiler/preprocessor/new/Diagnostic.cpp to DiagnosticBase.cpp.
        Rename ANGLE/src/compiler/preprocessor/new/DirectiveHandler.cpp to DirectiveHandlerBase.cpp.

        With the introduction of ANGLE's new preprocessor, there were two files named Diagnostic.cpp
        in ANGLE under different folders. This caused problems on the QT build when their object
        files, both named Diagnostic.o, tried to go in the same folder. Renaming one of them to
        DiagnosticBase.cpp avoids this conflict. The same situation occurred with
        DirectiveHandler.cpp. I will work on contributing this change back to ANGLE for future
        updates.

        (4) Add the following lines to glslang.y and ExpressionParser.y:
        #define YYENABLE_NLS 0
        #define YYLTYPE_IS_TRIVIAL 1

        Bison 2.3 doesn't first check that these macros are defined before reading their value,
        which causes the QT build to fail.

        We work around this issue in the same way in CSSGrammar.y.

        I will work on contributing this change back to ANGLE.

        * ANGLE.xcodeproj/project.pbxproj:
        * include/GLES2/gl2ext.h:
        * include/GLSLANG/ShaderLang.h:
        * src/build_angle.xcodeproj/project.pbxproj:
        * src/common/angleutils.h:
        * src/common/debug.cpp:
        (gl):
        (gl::output):
        (gl::trace):
        (gl::perfActive):
        (gl::ScopedPerfEventHelper::ScopedPerfEventHelper):
        (gl::ScopedPerfEventHelper::~ScopedPerfEventHelper):
        * src/common/version.h:
        * src/compiler/BuiltInFunctionEmulator.cpp:
        (BuiltInFunctionEmulator::IdentifyFunction):
        * src/compiler/BuiltInFunctionEmulator.h:
        * src/compiler/Compiler.cpp:
        (isWebGLBasedSpec):
        (TCompiler::compile):
        (TCompiler::rewriteCSSShader):
        (TCompiler::enforceTimingRestrictions):
        (TCompiler::enforceFragmentShaderTimingRestrictions):
        (TCompiler::enforceVertexShaderTimingRestrictions):
        * src/compiler/DetectDiscontinuity.cpp: Added.
        (sh::DetectLoopDiscontinuity::traverse):
        (sh):
        (sh::DetectLoopDiscontinuity::visitBranch):
        (sh::DetectLoopDiscontinuity::visitAggregate):
        (sh::containsLoopDiscontinuity):
        (sh::DetectGradientOperation::traverse):
        (sh::DetectGradientOperation::visitUnary):
        (sh::DetectGradientOperation::visitAggregate):
        (sh::containsGradientOperation):
        * src/compiler/DetectDiscontinuity.h: Added.
        (sh):
        (DetectLoopDiscontinuity):
        (DetectGradientOperation):
        * src/compiler/Diagnostics.cpp: Added.
        (TDiagnostics::TDiagnostics):
        (TDiagnostics::~TDiagnostics):
        (TDiagnostics::writeInfo):
        (TDiagnostics::writeDebug):
        (TDiagnostics::print):
        * src/compiler/Diagnostics.h: Added.
        (TDiagnostics):
        (TDiagnostics::infoSink):
        * src/compiler/DirectiveHandler.cpp: Added.
        (getBehavior):
        (TDirectiveHandler::TDirectiveHandler):
        (TDirectiveHandler::~TDirectiveHandler):
        (TDirectiveHandler::handleError):
        (TDirectiveHandler::handlePragma):
        (TDirectiveHandler::handleExtension):
        (TDirectiveHandler::handleVersion):
        * src/compiler/DirectiveHandler.h: Added.
        (TDirectiveHandler):
        (TDirectiveHandler::pragma):
        (TDirectiveHandler::extensionBehavior):
        * src/compiler/ExtensionBehavior.h:
        (getBehaviorString):
        * src/compiler/Initialize.cpp:
        (BuiltInConstants):
        (TBuiltIns::initialize):
        (IdentifyBuiltIns):
        * src/compiler/InitializeParseContext.cpp: Added.
        (InitializeParseContextIndex):
        (FreeParseContextIndex):
        (InitializeGlobalParseContext):
        (FreeParseContext):
        (GetGlobalParseContext):
        * src/compiler/InitializeParseContext.h:
        (TThreadParseContextRec):
        * src/compiler/Intermediate.cpp:
        (TIntermediate::addSelection):
        * src/compiler/MapLongVariableNames.cpp:
        * src/compiler/OutputHLSL.cpp:
        (sh::str):
        (sh::OutputHLSL::OutputHLSL):
        (sh::OutputHLSL::~OutputHLSL):
        (sh::OutputHLSL::output):
        (sh::OutputHLSL::header):
        (sh::OutputHLSL::visitBinary):
        (sh::OutputHLSL::visitUnary):
        (sh::OutputHLSL::visitAggregate):
        (sh::OutputHLSL::visitSelection):
        (sh::OutputHLSL::visitLoop):
        (sh::OutputHLSL::traverseStatements):
        (sh):
        (sh::OutputHLSL::handleExcessiveLoop):
        (sh::OutputHLSL::typeString):
        (sh::OutputHLSL::addConstructor):
        (sh::OutputHLSL::decorateField):
        * src/compiler/OutputHLSL.h:
        (sh):
        (OutputHLSL):
        * src/compiler/ParseHelper.cpp:
        (TParseContext::parseVectorFields):
        (TParseContext::parseMatrixFields):
        (TParseContext::error):
        (TParseContext::warning):
        (TParseContext::trace):
        (TParseContext::assignError):
        (TParseContext::unaryOpError):
        (TParseContext::binaryOpError):
        (TParseContext::precisionErrorCheck):
        (TParseContext::lValueErrorCheck):
        (TParseContext::constErrorCheck):
        (TParseContext::integerErrorCheck):
        (TParseContext::globalErrorCheck):
        (TParseContext::reservedErrorCheck):
        (TParseContext::constructorErrorCheck):
        (TParseContext::voidErrorCheck):
        (TParseContext::boolErrorCheck):
        (TParseContext::samplerErrorCheck):
        (TParseContext::structQualifierErrorCheck):
        (TParseContext::parameterSamplerErrorCheck):
        (TParseContext::arraySizeErrorCheck):
        (TParseContext::arrayQualifierErrorCheck):
        (TParseContext::arrayTypeErrorCheck):
        (TParseContext::arrayErrorCheck):
        (TParseContext::arraySetMaxSize):
        (TParseContext::nonInitConstErrorCheck):
        (TParseContext::nonInitErrorCheck):
        (TParseContext::paramErrorCheck):
        (TParseContext::extensionErrorCheck):
        (TParseContext::supportsExtension):
        (TParseContext::handleExtensionDirective):
        (TParseContext::handlePragmaDirective):
        (TParseContext::findFunction):
        (TParseContext::executeInitializer):
        (TParseContext::constructBuiltIn):
        (TParseContext::constructStruct):
        (TParseContext::addConstVectorNode):
        (TParseContext::addConstMatrixNode):
        (TParseContext::addConstArrayNode):
        (TParseContext::addConstStruct):
        (TParseContext::enterStructDeclaration):
        (TParseContext::structNestingErrorCheck):
        (PaParseStrings):
        * src/compiler/ParseHelper.h:
        (TParseContext::TParseContext):
        (TParseContext):
        (TParseContext::infoSink):
        (TParseContext::extensionBehavior):
        (TParseContext::pragma):
        * src/compiler/PoolAlloc.cpp:
        (TAllocation::checkGuardBlock):
        * src/compiler/Pragma.h: Added.
        (TPragma):
        (TPragma::TPragma):
        * src/compiler/RenameFunction.h: Added.
        (RenameFunction):
        (RenameFunction::RenameFunction):
        (RenameFunction::visitAggregate):
        * src/compiler/ShHandle.h:
        (TCompiler):
        * src/compiler/ShaderLang.cpp:
        (getVariableInfo):
        * src/compiler/SymbolTable.cpp:
        (TType::buildMangledName):
        * src/compiler/TranslatorHLSL.cpp:
        * src/compiler/UnfoldSelect.cpp: Removed.
        * src/compiler/UnfoldSelect.h: Removed.
        * src/compiler/UnfoldShortCircuit.cpp: Added.
        (sh::UnfoldShortCircuit::UnfoldShortCircuit):
        (sh):
        (sh::UnfoldShortCircuit::traverse):
        (sh::UnfoldShortCircuit::visitBinary):
        (sh::UnfoldShortCircuit::visitSelection):
        (sh::UnfoldShortCircuit::visitLoop):
        (sh::UnfoldShortCircuit::getNextTemporaryIndex):
        * src/compiler/UnfoldShortCircuit.h: Added.
        (sh):
        (UnfoldShortCircuit):
        * src/compiler/ValidateLimitations.cpp:
        * src/compiler/debug.cpp:
        * src/compiler/depgraph: Added.
        * src/compiler/depgraph/DependencyGraph.cpp: Added.
        (TDependencyGraph::TDependencyGraph):
        (TDependencyGraph::~TDependencyGraph):
        (TDependencyGraph::createArgument):
        (TDependencyGraph::createFunctionCall):
        (TDependencyGraph::getOrCreateSymbol):
        (TDependencyGraph::createSelection):
        (TDependencyGraph::createLoop):
        (TDependencyGraph::createLogicalOp):
        (TGraphLogicalOp::getOpString):
        * src/compiler/depgraph/DependencyGraph.h: Added.
        (TGraphNode):
        (TGraphNode::TGraphNode):
        (TGraphNode::~TGraphNode):
        (TGraphParentNode):
        (TGraphParentNode::TGraphParentNode):
        (TGraphParentNode::~TGraphParentNode):
        (TGraphParentNode::addDependentNode):
        (TGraphArgument):
        (TGraphArgument::TGraphArgument):
        (TGraphArgument::~TGraphArgument):
        (TGraphArgument::getIntermFunctionCall):
        (TGraphArgument::getArgumentNumber):
        (TGraphFunctionCall):
        (TGraphFunctionCall::TGraphFunctionCall):
        (TGraphFunctionCall::~TGraphFunctionCall):
        (TGraphFunctionCall::getIntermFunctionCall):
        (TGraphSymbol):
        (TGraphSymbol::TGraphSymbol):
        (TGraphSymbol::~TGraphSymbol):
        (TGraphSymbol::getIntermSymbol):
        (TGraphSelection):
        (TGraphSelection::TGraphSelection):
        (TGraphSelection::~TGraphSelection):
        (TGraphSelection::getIntermSelection):
        (TGraphLoop):
        (TGraphLoop::TGraphLoop):
        (TGraphLoop::~TGraphLoop):
        (TGraphLoop::getIntermLoop):
        (TGraphLogicalOp):
        (TGraphLogicalOp::TGraphLogicalOp):
        (TGraphLogicalOp::~TGraphLogicalOp):
        (TGraphLogicalOp::getIntermLogicalOp):
        (TDependencyGraph):
        (TDependencyGraph::begin):
        (TDependencyGraph::end):
        (TDependencyGraph::beginSamplerSymbols):
        (TDependencyGraph::endSamplerSymbols):
        (TDependencyGraph::beginUserDefinedFunctionCalls):
        (TDependencyGraph::endUserDefinedFunctionCalls):
        (TDependencyGraphTraverser):
        (TDependencyGraphTraverser::TDependencyGraphTraverser):
        (TDependencyGraphTraverser::visitSymbol):
        (TDependencyGraphTraverser::visitArgument):
        (TDependencyGraphTraverser::visitFunctionCall):
        (TDependencyGraphTraverser::visitSelection):
        (TDependencyGraphTraverser::visitLoop):
        (TDependencyGraphTraverser::visitLogicalOp):
        (TDependencyGraphTraverser::getDepth):
        (TDependencyGraphTraverser::incrementDepth):
        (TDependencyGraphTraverser::decrementDepth):
        (TDependencyGraphTraverser::clearVisited):
        (TDependencyGraphTraverser::markVisited):
        (TDependencyGraphTraverser::isVisited):
        * src/compiler/depgraph/DependencyGraphBuilder.cpp: Added.
        (TDependencyGraphBuilder::build):
        (TDependencyGraphBuilder::visitAggregate):
        (TDependencyGraphBuilder::visitFunctionDefinition):
        (TDependencyGraphBuilder::visitFunctionCall):
        (TDependencyGraphBuilder::visitAggregateChildren):
        (TDependencyGraphBuilder::visitSymbol):
        (TDependencyGraphBuilder::visitBinary):
        (TDependencyGraphBuilder::visitAssignment):
        (TDependencyGraphBuilder::visitLogicalOp):
        (TDependencyGraphBuilder::visitBinaryChildren):
        (TDependencyGraphBuilder::visitSelection):
        (TDependencyGraphBuilder::visitLoop):
        (TDependencyGraphBuilder::connectMultipleNodesToSingleNode):
        * src/compiler/depgraph/DependencyGraphBuilder.h: Added.
        (TDependencyGraphBuilder):
        (TNodeSetStack):
        (TDependencyGraphBuilder::TNodeSetStack::TNodeSetStack):
        (TDependencyGraphBuilder::TNodeSetStack::~TNodeSetStack):
        (TDependencyGraphBuilder::TNodeSetStack::getTopSet):
        (TDependencyGraphBuilder::TNodeSetStack::pushSet):
        (TDependencyGraphBuilder::TNodeSetStack::popSet):
        (TDependencyGraphBuilder::TNodeSetStack::popSetIntoNext):
        (TDependencyGraphBuilder::TNodeSetStack::insertIntoTopSet):
        (TDependencyGraphBuilder::TNodeSetStack::clear):
        (TNodeSetMaintainer):
        (TDependencyGraphBuilder::TNodeSetMaintainer::TNodeSetMaintainer):
        (TDependencyGraphBuilder::TNodeSetMaintainer::~TNodeSetMaintainer):
        (TNodeSetPropagatingMaintainer):
        (TDependencyGraphBuilder::TNodeSetPropagatingMaintainer::TNodeSetPropagatingMaintainer):
        (TDependencyGraphBuilder::TNodeSetPropagatingMaintainer::~TNodeSetPropagatingMaintainer):
        (TLeftmostSymbolMaintainer):
        (TDependencyGraphBuilder::TLeftmostSymbolMaintainer::TLeftmostSymbolMaintainer):
        (TDependencyGraphBuilder::TLeftmostSymbolMaintainer::~TLeftmostSymbolMaintainer):
        (TDependencyGraphBuilder::TDependencyGraphBuilder):
        (TDependencyGraphBuilder::build):
        * src/compiler/depgraph/DependencyGraphOutput.cpp: Added.
        (TDependencyGraphOutput::outputIndentation):
        (TDependencyGraphOutput::visitArgument):
        (TDependencyGraphOutput::visitFunctionCall):
        (TDependencyGraphOutput::visitSymbol):
        (TDependencyGraphOutput::visitSelection):
        (TDependencyGraphOutput::visitLoop):
        (TDependencyGraphOutput::visitLogicalOp):
        (TDependencyGraphOutput::outputAllSpanningTrees):
        * src/compiler/depgraph/DependencyGraphOutput.h: Added.
        (TDependencyGraphOutput):
        (TDependencyGraphOutput::TDependencyGraphOutput):
        * src/compiler/depgraph/DependencyGraphTraverse.cpp: Added.
        (TGraphNode::traverse):
        (TGraphParentNode::traverse):
        (TGraphArgument::traverse):
        (TGraphFunctionCall::traverse):
        (TGraphSymbol::traverse):
        (TGraphSelection::traverse):
        (TGraphLoop::traverse):
        (TGraphLogicalOp::traverse):
        * src/compiler/glslang.h:
        * src/compiler/glslang.l:
        * src/compiler/glslang.y:
        * src/compiler/glslang_lex.cpp:
        (yy_buffer_state):
        (yyguts_t):
        (yy_get_previous_state):
        (yy_try_NUL_trans):
        (input):
        (yyensure_buffer_stack):
        (yy_scan_bytes):
        (yyget_leng):
        (string_input):
        (yyerror):
        (glslang_finalize):
        (glslang_scan):
        * src/compiler/glslang_tab.cpp:
        * src/compiler/intermediate.h:
        (TIntermAggregate::TIntermAggregate):
        (TIntermAggregate::~TIntermAggregate):
        (TIntermAggregate::isUserDefined):
        (TIntermAggregate):
        (TIntermTraverser::~TIntermTraverser):
        * src/compiler/osinclude.h:
        * src/compiler/preprocessor/atom.c:
        (FindHashLoc):
        (PrintAtomTable):
        * src/compiler/preprocessor/cpp.c:
        (CPPpragma):
        (readCPPline):
        (PredefineIntMacro):
        (MacroExpand):
        * src/compiler/preprocessor/cpp.h:
        * src/compiler/preprocessor/memory.h:
        * src/compiler/preprocessor/new: Added properties allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs, allow-tabs and allow-tabs.
        * src/compiler/preprocessor/new/Context.cpp: Removed.
        * src/compiler/preprocessor/new/Context.h: Removed.
        * src/compiler/preprocessor/new/Diagnostics.h: Added.
        (pp):
        (Diagnostics):
        * src/compiler/preprocessor/new/DiagnosticsBase.cpp: Added.
        (pp):
        (pp::Diagnostics::~Diagnostics):
        (pp::Diagnostics::report):
        (pp::Diagnostics::severity):
        * src/compiler/preprocessor/new/DirectiveHandler.h: Added.
        (pp):
        (DirectiveHandler):
        * src/compiler/preprocessor/new/DirectiveHandlerBase.cpp: Added.
        (pp):
        (pp::DirectiveHandler::~DirectiveHandler):
        * src/compiler/preprocessor/new/DirectiveParser.cpp: Added.
        (getDirective):
        (isConditionalDirective):
        (isEOD):
        (skipUntilEOD):
        (isMacroNameReserved):
        (isMacroPredefined):
        (pp):
        (DefinedParser):
        (pp::DefinedParser::DefinedParser):
        (pp::DefinedParser::lex):
        (pp::DirectiveParser::DirectiveParser):
        (pp::DirectiveParser::lex):
        (pp::DirectiveParser::parseDirective):
        (pp::DirectiveParser::parseDefine):
        (pp::DirectiveParser::parseUndef):
        (pp::DirectiveParser::parseIf):
        (pp::DirectiveParser::parseIfdef):
        (pp::DirectiveParser::parseIfndef):
        (pp::DirectiveParser::parseElse):
        (pp::DirectiveParser::parseElif):
        (pp::DirectiveParser::parseEndif):
        (pp::DirectiveParser::parseError):
        (pp::DirectiveParser::parsePragma):
        (pp::DirectiveParser::parseExtension):
        (pp::DirectiveParser::parseVersion):
        (pp::DirectiveParser::parseLine):
        (pp::DirectiveParser::skipping):
        (pp::DirectiveParser::parseConditionalIf):
        (pp::DirectiveParser::parseExpressionIf):
        (pp::DirectiveParser::parseExpressionIfdef):
        * src/compiler/preprocessor/new/DirectiveParser.h: Added.
        (pp):
        (DirectiveParser):
        (ConditionalBlock):
        (pp::DirectiveParser::ConditionalBlock::ConditionalBlock):
        * src/compiler/preprocessor/new/ExpressionParser.cpp: Added.
        (yysyntax_error):
        (yylex):
        (yyerror):
        (pp):
        (pp::ExpressionParser::ExpressionParser):
        (pp::ExpressionParser::parse):
        * src/compiler/preprocessor/new/ExpressionParser.h: Added.
        (pp):
        (ExpressionParser):
        * src/compiler/preprocessor/new/ExpressionParser.y: Added.
        * src/compiler/preprocessor/new/Input.cpp: Added property allow-tabs.
        (pp::Input::Input):
        (pp::Input::read):
        * src/compiler/preprocessor/new/Input.h: Added property allow-tabs.
        (pp):
        (Input):
        (pp::Input::count):
        (pp::Input::string):
        (pp::Input::length):
        (Location):
        (pp::Input::Location::Location):
        (pp::Input::readLoc):
        * src/compiler/preprocessor/new/Lexer.cpp: Added.
        (pp):
        (pp::Lexer::~Lexer):
        * src/compiler/preprocessor/new/Lexer.h: Added.
        (pp):
        (Lexer):
        * src/compiler/preprocessor/new/Macro.cpp: Added property allow-tabs.
        (pp::Macro::equals):
        * src/compiler/preprocessor/new/Macro.h: Added property allow-tabs.
        (pp):
        (pp::Macro::Macro):
        (Macro):
        * src/compiler/preprocessor/new/MacroExpander.cpp: Added.
        (pp):
        (TokenLexer):
        (pp::TokenLexer::TokenLexer):
        (pp::TokenLexer::lex):
        (pp::MacroExpander::MacroExpander):
        (pp::MacroExpander::~MacroExpander):
        (pp::MacroExpander::lex):
        (pp::MacroExpander::getToken):
        (pp::MacroExpander::ungetToken):
        (pp::MacroExpander::isNextTokenLeftParen):
        (pp::MacroExpander::pushMacro):
        (pp::MacroExpander::popMacro):
        (pp::MacroExpander::expandMacro):
        (pp::MacroExpander::collectMacroArgs):
        (pp::MacroExpander::replaceMacroParams):
        * src/compiler/preprocessor/new/MacroExpander.h: Added.
        (pp):
        (MacroExpander):
        (MacroContext):
        (pp::MacroExpander::MacroContext::MacroContext):
        (pp::MacroExpander::MacroContext::empty):
        (pp::MacroExpander::MacroContext::get):
        (pp::MacroExpander::MacroContext::unget):
        * src/compiler/preprocessor/new/Preprocessor.cpp: Added property allow-tabs.
        (PreprocessorImpl):
        (pp::PreprocessorImpl::PreprocessorImpl):
        (pp):
        (pp::Preprocessor::Preprocessor):
        (pp::Preprocessor::~Preprocessor):
        (pp::Preprocessor::init):
        (pp::Preprocessor::predefineMacro):
        (pp::Preprocessor::lex):
        * src/compiler/preprocessor/new/Preprocessor.h: Added property allow-tabs.
        (pp):
        (Preprocessor):
        * src/compiler/preprocessor/new/SourceLocation.h: Added.
        (pp):
        (pp::SourceLocation::SourceLocation):
        (SourceLocation):
        (pp::SourceLocation::equals):
        (pp::operator==):
        (pp::operator!=):
        * src/compiler/preprocessor/new/Token.cpp: Added property allow-tabs.
        (pp::Token::reset):
        (pp::Token::equals):
        (pp::Token::setAtStartOfLine):
        (pp::Token::setHasLeadingSpace):
        (pp):
        (pp::Token::setExpansionDisabled):
        (pp::operator<<):
        * src/compiler/preprocessor/new/Token.h: Added property allow-tabs.
        (pp::Token::Token):
        (Token):
        (pp::Token::atStartOfLine):
        (pp::Token::hasLeadingSpace):
        (pp::Token::expansionDisabled):
        (pp::operator==):
        (pp):
        (pp::operator!=):
        * src/compiler/preprocessor/new/Tokenizer.cpp: Added.
        (yy_buffer_state):
        (yy_trans_info):
        (yyguts_t):
        (yy_get_previous_state):
        (yy_try_NUL_trans):
        (input):
        (pprestart):
        (pp_switch_to_buffer):
        (pp_load_buffer_state):
        (pp_create_buffer):
        (pp_delete_buffer):
        (pp_init_buffer):
        (pp_flush_buffer):
        (pppush_buffer_state):
        (pppop_buffer_state):
        (ppensure_buffer_stack):
        (pp_scan_buffer):
        (pp_scan_string):
        (pp_scan_bytes):
        (yy_fatal_error):
        (ppget_extra):
        (ppget_lineno):
        (ppget_column):
        (ppget_in):
        (ppget_out):
        (ppget_leng):
        (ppget_text):
        (ppset_extra):
        (ppset_lineno):
        (ppset_column):
        (ppset_in):
        (ppset_out):
        (ppget_debug):
        (ppset_debug):
        (ppget_lval):
        (ppset_lval):
        (ppget_lloc):
        (ppset_lloc):
        (pplex_init):
        (pplex_init_extra):
        (yy_init_globals):
        (pplex_destroy):
        (yy_flex_strncpy):
        (yy_flex_strlen):
        (ppalloc):
        (pprealloc):
        (ppfree):
        (pp):
        (pp::Tokenizer::Tokenizer):
        (pp::Tokenizer::~Tokenizer):
        (pp::Tokenizer::init):
        (pp::Tokenizer::setFileNumber):
        (pp::Tokenizer::setLineNumber):
        (pp::Tokenizer::lex):
        (pp::Tokenizer::initScanner):
        (pp::Tokenizer::destroyScanner):
        * src/compiler/preprocessor/new/Tokenizer.h: Added.
        (pp):
        (Tokenizer):
        (Context):
        * src/compiler/preprocessor/new/Tokenizer.l: Added.
        * src/compiler/preprocessor/new/generate_parser.sh: Added property allow-tabs.
        * src/compiler/preprocessor/new/pp.l: Removed.
        * src/compiler/preprocessor/new/pp.y: Removed.
        * src/compiler/preprocessor/new/pp_lex.cpp: Removed.
        * src/compiler/preprocessor/new/pp_tab.cpp: Removed.
        * src/compiler/preprocessor/new/pp_tab.h: Removed.
        * src/compiler/preprocessor/new/pp_utils.h: Added.
        * src/compiler/preprocessor/new/preprocessor.vcproj: Added.
        * src/compiler/preprocessor/new/stl_utils.h: Removed.
        * src/compiler/preprocessor/new/token_type.h: Removed.
        * src/compiler/preprocessor/preprocess.h:
        * src/compiler/preprocessor/scanner.c:
        (InitScannerInput):
        * src/compiler/preprocessor/scanner.h:
        * src/compiler/preprocessor/symbols.h:
        * src/compiler/preprocessor/tokens.c:
        (ReadToken):
        (DumpTokenStream):
        * src/compiler/preprocessor/tokens.h:
        * src/compiler/timing: Added.
        * src/compiler/timing/RestrictFragmentShaderTiming.cpp: Added.
        (RestrictFragmentShaderTiming::RestrictFragmentShaderTiming):
        (RestrictFragmentShaderTiming::enforceRestrictions):
        (RestrictFragmentShaderTiming::validateUserDefinedFunctionCallUsage):
        (RestrictFragmentShaderTiming::beginError):
        (RestrictFragmentShaderTiming::isSamplingOp):
        (RestrictFragmentShaderTiming::visitArgument):
        (RestrictFragmentShaderTiming::visitSelection):
        (RestrictFragmentShaderTiming::visitLoop):
        (RestrictFragmentShaderTiming::visitLogicalOp):
        * src/compiler/timing/RestrictFragmentShaderTiming.h: Added.
        (RestrictFragmentShaderTiming):
        (RestrictFragmentShaderTiming::numErrors):
        * src/compiler/timing/RestrictVertexShaderTiming.cpp: Added.
        (RestrictVertexShaderTiming::visitSymbol):
        * src/compiler/timing/RestrictVertexShaderTiming.h: Added.
        (RestrictVertexShaderTiming):
        (RestrictVertexShaderTiming::RestrictVertexShaderTiming):
        (RestrictVertexShaderTiming::enforceRestrictions):
        (RestrictVertexShaderTiming::numErrors):
        * src/libEGL/Display.cpp:
        (egl):
        (egl::Display::getDepthTextureSupport):
        (egl::Display::getTexturePool):
        * src/libEGL/Display.h:
        (Display):
        * src/libEGL/Surface.cpp:
        (egl::Surface::Surface):
        (egl::Surface::release):
        (egl::Surface::resetSwapChain):
        (egl::Surface::swapRect):
        (egl):
        (egl::Surface::swap):
        (egl::Surface::postSubBuffer):
        * src/libEGL/Surface.h:
        (Surface):
        * src/libEGL/libEGL.cpp:
        * src/libGLESv2/Context.cpp:
        (gl::Context::makeCurrent):
        (gl::Context::markDxUniformsDirty):
        (gl):
        (gl::Context::getIntegerv):
        (gl::Context::getQueryParameterInfo):
        (gl::Context::applyRenderTarget):
        (gl::Context::applyState):
        (gl::Context::applyShaders):
        (gl::Context::applyTextures):
        (gl::Context::readPixels):
        (gl::Context::clear):
        (gl::Context::drawArrays):
        (gl::Context::drawElements):
        (gl::Context::supportsDepthTextures):
        (gl::Context::initExtensionString):
        (gl::Context::blitFramebuffer):
        (gl::VertexDeclarationCache::applyDeclaration):
        * src/libGLESv2/Context.h:
        (Context):
        * src/libGLESv2/Framebuffer.cpp:
        (gl::Framebuffer::~Framebuffer):
        (gl):
        (gl::Framebuffer::getNullColorbuffer):
        (gl::Framebuffer::completeness):
        * src/libGLESv2/Framebuffer.h:
        (Framebuffer):
        * src/libGLESv2/Program.cpp:
        (gl):
        (gl::AttributeBindings::AttributeBindings):
        (gl::AttributeBindings::~AttributeBindings):
        (gl::InfoLog::InfoLog):
        (gl::InfoLog::~InfoLog):
        (gl::InfoLog::getLength):
        (gl::InfoLog::getLog):
        (gl::InfoLog::appendSanitized):
        (gl::InfoLog::append):
        (gl::InfoLog::reset):
        (gl::Program::Program):
        (gl::Program::~Program):
        (gl::Program::attachShader):
        (gl::Program::detachShader):
        (gl::Program::getAttachedShadersCount):
        (gl::AttributeBindings::bindAttributeLocation):
        (gl::Program::bindAttributeLocation):
        (gl::Program::link):
        (gl::AttributeBindings::getAttributeBinding):
        (gl::Program::unlink):
        (gl::Program::getProgramBinary):
        (gl::Program::setProgramBinary):
        (gl::Program::getInfoLogLength):
        (gl::Program::getInfoLog):
        (gl::Program::getActiveAttribute):
        (gl::Program::getActiveAttributeCount):
        (gl::Program::getActiveAttributeMaxLength):
        (gl::Program::getActiveUniform):
        (gl::Program::getActiveUniformCount):
        (gl::Program::getActiveUniformMaxLength):
        (gl::Program::validate):
        (gl::Program::isValidated):
        * src/libGLESv2/Program.h:
        (gl):
        (AttributeBindings):
        (InfoLog):
        (Program):
        * src/libGLESv2/ProgramBinary.cpp: Added.
        (gl::str):
        (gl):
        (gl::Uniform::Uniform):
        (gl::Uniform::~Uniform):
        (gl::Uniform::isArray):
        (gl::UniformLocation::UniformLocation):
        (gl::ProgramBinary::ProgramBinary):
        (gl::ProgramBinary::~ProgramBinary):
        (gl::ProgramBinary::getPixelShader):
        (gl::ProgramBinary::getVertexShader):
        (gl::ProgramBinary::getAttributeLocation):
        (gl::ProgramBinary::getSemanticIndex):
        (gl::ProgramBinary::getUsedSamplerRange):
        (gl::ProgramBinary::getSamplerMapping):
        (gl::ProgramBinary::getSamplerTextureType):
        (gl::ProgramBinary::getUniformLocation):
        (gl::ProgramBinary::setUniform1fv):
        (gl::ProgramBinary::setUniform2fv):
        (gl::ProgramBinary::setUniform3fv):
        (gl::ProgramBinary::setUniform4fv):
        (gl::transposeMatrix):
        (gl::ProgramBinary::setUniformMatrix2fv):
        (gl::ProgramBinary::setUniformMatrix3fv):
        (gl::ProgramBinary::setUniformMatrix4fv):
        (gl::ProgramBinary::setUniform1iv):
        (gl::ProgramBinary::setUniform2iv):
        (gl::ProgramBinary::setUniform3iv):
        (gl::ProgramBinary::setUniform4iv):
        (gl::ProgramBinary::getUniformfv):
        (gl::ProgramBinary::getUniformiv):
        (gl::ProgramBinary::dirtyAllUniforms):
        (gl::ProgramBinary::applyUniforms):
        (gl::ProgramBinary::compileToBinary):
        (gl::ProgramBinary::packVaryings):
        (gl::ProgramBinary::linkVaryings):
        (gl::ProgramBinary::link):
        (gl::ProgramBinary::linkAttributes):
        (gl::ProgramBinary::linkUniforms):
        (gl::ProgramBinary::defineUniform):
        (gl::ProgramBinary::createUniform):
        (gl::ProgramBinary::decorateAttribute):
        (gl::ProgramBinary::undecorateUniform):
        (gl::ProgramBinary::applyUniformnbv):
        (gl::ProgramBinary::applyUniformnfv):
        (gl::ProgramBinary::applyUniform1iv):
        (gl::ProgramBinary::applyUniform2iv):
        (gl::ProgramBinary::applyUniform3iv):
        (gl::ProgramBinary::applyUniform4iv):
        (gl::ProgramBinary::applyUniformniv):
        (gl::ProgramBinary::isValidated):
        (gl::ProgramBinary::getActiveAttribute):
        (gl::ProgramBinary::getActiveAttributeCount):
        (gl::ProgramBinary::getActiveAttributeMaxLength):
        (gl::ProgramBinary::getActiveUniform):
        (gl::ProgramBinary::getActiveUniformCount):
        (gl::ProgramBinary::getActiveUniformMaxLength):
        (gl::ProgramBinary::validate):
        (gl::ProgramBinary::validateSamplers):
        (gl::ProgramBinary::getDxDepthRangeLocation):
        (gl::ProgramBinary::getDxDepthLocation):
        (gl::ProgramBinary::getDxCoordLocation):
        (gl::ProgramBinary::getDxHalfPixelSizeLocation):
        (gl::ProgramBinary::getDxFrontCCWLocation):
        (gl::ProgramBinary::getDxPointsOrLinesLocation):
        * src/libGLESv2/ProgramBinary.h: Added.
        (gl):
        (Uniform):
        (gl::Uniform::RegisterInfo::RegisterInfo):
        (RegisterInfo):
        (gl::Uniform::RegisterInfo::set):
        (UniformLocation):
        (ProgramBinary):
        (Sampler):
        * src/libGLESv2/Renderbuffer.cpp:
        (gl):
        (gl::RenderbufferTexture2D::RenderbufferTexture2D):
        (gl::RenderbufferTexture2D::~RenderbufferTexture2D):
        (gl::RenderbufferTexture2D::addProxyRef):
        (gl::RenderbufferTexture2D::releaseProxy):
        (gl::RenderbufferTexture2D::getRenderTarget):
        (gl::RenderbufferTexture2D::getDepthStencil):
        (gl::RenderbufferTexture2D::getWidth):
        (gl::RenderbufferTexture2D::getHeight):
        (gl::RenderbufferTexture2D::getInternalFormat):
        (gl::RenderbufferTexture2D::getD3DFormat):
        (gl::RenderbufferTexture2D::getSamples):
        (gl::RenderbufferTexture2D::getSerial):
        (gl::RenderbufferTextureCubeMap::RenderbufferTextureCubeMap):
        (gl::RenderbufferTextureCubeMap::~RenderbufferTextureCubeMap):
        (gl::RenderbufferTextureCubeMap::addProxyRef):
        (gl::RenderbufferTextureCubeMap::releaseProxy):
        (gl::RenderbufferTextureCubeMap::getRenderTarget):
        (gl::RenderbufferTextureCubeMap::getDepthStencil):
        (gl::RenderbufferTextureCubeMap::getWidth):
        (gl::RenderbufferTextureCubeMap::getHeight):
        (gl::RenderbufferTextureCubeMap::getInternalFormat):
        (gl::RenderbufferTextureCubeMap::getD3DFormat):
        (gl::RenderbufferTextureCubeMap::getSamples):
        (gl::RenderbufferTextureCubeMap::getSerial):
        (gl::DepthStencilbuffer::getDepthStencil):
        * src/libGLESv2/Renderbuffer.h:
        (gl):
        (RenderbufferTexture2D):
        (RenderbufferTextureCubeMap):
        * src/libGLESv2/Shader.cpp:
        (gl::Shader::getInfoLog):
        (gl::Shader::getSourceImpl):
        * src/libGLESv2/Shader.h:
        (Shader):
        (VertexShader):
        * src/libGLESv2/Texture.cpp:
        (gl::ConvertTextureFormatType):
        (gl::IsTextureFormatRenderable):
        (gl::GetTextureUsage):
        (gl):
        (gl::Image::createSurface):
        (gl::Image::updateSurface):
        (gl::Image::loadData):
        (gl::Image::loadAlphaData):
        (gl::Image::loadAlphaDataSSE2):
        (gl::Image::loadAlphaFloatData):
        (gl::Image::loadAlphaHalfFloatData):
        (gl::Image::loadLuminanceData):
        (gl::Image::loadLuminanceFloatData):
        (gl::Image::loadLuminanceHalfFloatData):
        (gl::Image::loadLuminanceAlphaData):
        (gl::Image::loadLuminanceAlphaFloatData):
        (gl::Image::loadLuminanceAlphaHalfFloatData):
        (gl::Image::loadRGBUByteData):
        (gl::Image::loadRGB565Data):
        (gl::Image::loadRGBFloatData):
        (gl::Image::loadRGBHalfFloatData):
        (gl::Image::loadRGBAUByteDataSSE2):
        (gl::Image::loadRGBAUByteData):
        (gl::Image::loadRGBA4444Data):
        (gl::Image::loadRGBA5551Data):
        (gl::Image::loadRGBAFloatData):
        (gl::Image::loadRGBAHalfFloatData):
        (gl::Image::loadBGRAData):
        (gl::Image::loadCompressedData):
        (gl::Image::copy):
        (gl::TextureStorage::TextureStorage):
        (gl::TextureStorage::isRenderTarget):
        (gl::TextureStorage::getUsage):
        (gl::Texture::setImage):
        (gl::Texture::setCompressedImage):
        (gl::Texture::subImage):
        (gl::Texture::subImageCompressed):
        (gl::TextureStorage2D::TextureStorage2D):
        (gl::Texture2D::getInternalFormat):
        (gl::Texture2D::getD3DFormat):
        (gl::Texture2D::copyImage):
        (gl::Texture2D::copySubImage):
        (gl::Texture2D::storage):
        (gl::Texture2D::isSamplerComplete):
        (gl::Texture2D::isCompressed):
        (gl::Texture2D::isDepth):
        (gl::Texture2D::createTexture):
        (gl::Texture2D::convertToRenderTarget):
        (gl::Texture2D::getRenderbuffer):
        (gl::Texture2D::getRenderTarget):
        (gl::Texture2D::getDepthStencil):
        (gl::TextureStorageCubeMap::TextureStorageCubeMap):
        (gl::TextureCubeMap::getWidth):
        (gl::TextureCubeMap::getHeight):
        (gl::TextureCubeMap::getInternalFormat):
        (gl::TextureCubeMap::getD3DFormat):
        (gl::TextureCubeMap::isSamplerComplete):
        (gl::TextureCubeMap::isCompressed):
        (gl::TextureCubeMap::createTexture):
        (gl::TextureCubeMap::convertToRenderTarget):
        (gl::TextureCubeMap::copyImage):
        (gl::TextureCubeMap::copySubImage):
        (gl::TextureCubeMap::storage):
        (gl::TextureCubeMap::getRenderbuffer):
        * src/libGLESv2/Texture.h:
        (Image):
        (TextureStorage):
        (Texture):
        (TextureStorage2D):
        (Texture2D):
        (TextureStorageCubeMap):
        (TextureCubeMap):
        * src/libGLESv2/VertexDataManager.cpp:
        (gl::VertexDataManager::prepareVertexData):
        * src/libGLESv2/libGLESv2.cpp:
        (checkTextureFormatType):
        (validateSubImageParams2D):
        (validateSubImageParamsCube):
        * src/libGLESv2/libGLESv2.vcproj:
        * src/libGLESv2/mathutil.h:
        (gl):
        * src/libGLESv2/utilities.cpp:
        (gl::IsDepthTexture):
        (gl):
        (gl::ComputePixelSize):
        (gl::ExtractFormat):
        (gl::ExtractType):
        (es2dx::ConvertCubeFace):
        (es2dx::ConvertRenderbufferFormat):
        (dx2es::GetStencilSize):
        (dx2es::GetDepthSize):
        (dx2es::IsDepthTextureFormat):
        (dx2es):
        (dx2es::IsStencilTextureFormat):
        (dx2es::ConvertDepthStencilFormat):
        * src/libGLESv2/utilities.h:
        (gl):
        (dx2es):

2012-07-11  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/91024> Build against the latest SDK when targeting older OS X versions.

        Reviewed by Dan Bernstein.

        The deployment target is already set to the version that we're targeting, and it's that setting
        which determines which functionality from the SDK is available to us.

        * Configurations/Base.xcconfig:

2012-06-22  Joshua Netterfield  <jnetterfield@rim.com>

        [BlackBerry] Sanitize GLSL code using ANGLE.

        BlackBerry port does not sanitize GLSL code with ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=89583

        Reviewed by Rob Buis.

        * src/compiler/osinclude.h: Recognises QNX as POSIX

2012-03-26  Dean Jackson  <dino@apple.com>

        Update ANGLE in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=81717

        Reviewed by Kenneth Russell.

        Update angleproject to r1009. Synced the source directory
        between the angle repository and WebKit. Ran the OS X Lion
        version of Bison over the glslang.l input which generates
        a slightly different output than angle provided.

        * include/EGL/eglext.h:
        * include/GLES2/gl2ext.h:
        * include/GLSLANG/ShaderLang.h:
        * src/common/RefCountObject.cpp: Renamed from Source/ThirdParty/ANGLE/src/libGLESv2/RefCountObject.cpp.
        (RefCountObject::RefCountObject):
        (RefCountObject::~RefCountObject):
        (RefCountObject::addRef):
        (RefCountObject::release):
        (RefCountObjectBindingPointer::set):
        * src/common/RefCountObject.h: Renamed from Source/ThirdParty/ANGLE/src/libGLESv2/RefCountObject.h.
        (RefCountObject):
        (RefCountObject::id):
        (RefCountObjectBindingPointer):
        (RefCountObjectBindingPointer::RefCountObjectBindingPointer):
        (RefCountObjectBindingPointer::~RefCountObjectBindingPointer):
        (RefCountObjectBindingPointer::get):
        (RefCountObjectBindingPointer::id):
        (RefCountObjectBindingPointer::operator ! ):
        (BindingPointer):
        (BindingPointer::set):
        (BindingPointer::get):
        (BindingPointer::operator -> ):
        * src/common/debug.cpp:
        (gl::output):
        * src/common/version.h:
        * src/compiler/BaseTypes.h:
        * src/compiler/Compiler.cpp:
        (TCompiler::TCompiler):
        (TCompiler::~TCompiler):
        (TCompiler::mapLongVariableNames):
        * src/compiler/ConstantUnion.h:
        (ConstantUnion::ConstantUnion):
        (ConstantUnion::operator==):
        (ConstantUnion::operator>):
        (ConstantUnion::operator<):
        * src/compiler/Intermediate.cpp:
        (TIntermConstantUnion::fold):
        * src/compiler/MapLongVariableNames.cpp:
        (LongNameMap::LongNameMap):
        (LongNameMap::~LongNameMap):
        (LongNameMap::GetInstance):
        (LongNameMap::Release):
        (LongNameMap::Find):
        (LongNameMap::Insert):
        (LongNameMap::Size):
        (MapLongVariableNames::MapLongVariableNames):
        (MapLongVariableNames::visitSymbol):
        (MapLongVariableNames::mapGlobalLongName):
        * src/compiler/MapLongVariableNames.h:
        (LongNameMap):
        (MapLongVariableNames):
        * src/compiler/OutputHLSL.cpp:
        (sh::OutputHLSL::OutputHLSL):
        (sh::OutputHLSL::header):
        (sh::OutputHLSL::visitSymbol):
        (sh::OutputHLSL::visitUnary):
        (sh::OutputHLSL::visitAggregate):
        (sh::OutputHLSL::visitLoop):
        (sh::OutputHLSL::handleExcessiveLoop):
        (sh::OutputHLSL::typeString):
        (sh::OutputHLSL::addConstructor):
        (sh::OutputHLSL::decorateUniform):
        * src/compiler/OutputHLSL.h:
        (OutputHLSL):
        * src/compiler/PoolAlloc.cpp:
        (TAllocation::checkGuardBlock):
        * src/compiler/ShHandle.h:
        (TCompiler):
        * src/compiler/SymbolTable.cpp:
        * src/compiler/SymbolTable.h:
        (TSymbolTable):
        (TSymbolTable::getOuterLevel):
        * src/compiler/VariableInfo.cpp:
        (getVariableDataType):
        * src/compiler/glslang.l:
        * src/compiler/glslang.y:
        * src/compiler/glslang_lex.cpp:
        (yy_buffer_state):
        (yyguts_t):
        (input):
        (yyensure_buffer_stack):
        (yy_scan_bytes):
        (yyget_leng):
        * src/compiler/glslang_tab.cpp:
        * src/compiler/osinclude.h:
        * src/compiler/preprocessor/cpp.c:
        * src/compiler/preprocessor/memory.c:
        * src/compiler/preprocessor/new/Context.cpp: Added.
        (isMacroNameReserved):
        (pp):
        (pp::Context::Context):
        (pp::Context::~Context):
        (pp::Context::init):
        (pp::Context::process):
        (pp::Context::defineMacro):
        (pp::Context::undefineMacro):
        (pp::Context::isMacroDefined):
        (pp::Context::reset):
        (pp::Context::defineBuiltInMacro):
        * src/compiler/preprocessor/new/Context.h: Added.
        (pp):
        (Context):
        (pp::Context::lexer):
        (pp::Context::output):
        * src/compiler/preprocessor/new/Input.cpp: Added.
        (pp):
        (pp::Input::Input):
        (pp::Input::eof):
        (pp::Input::read):
        (pp::Input::getChar):
        (pp::Input::peekChar):
        (pp::Input::switchToNextString):
        (pp::Input::isStringEmpty):
        (pp::Input::stringLength):
        * src/compiler/preprocessor/new/Input.h: Added.
        (pp):
        (Input):
        (pp::Input::error):
        (pp::Input::stringIndex):
        * src/compiler/preprocessor/new/Macro.cpp: Added.
        (pp):
        (pp::Macro::Macro):
        (pp::Macro::~Macro):
        * src/compiler/preprocessor/new/Macro.h: Added.
        (pp):
        (Macro):
        (pp::Macro::type):
        (pp::Macro::identifier):
        (pp::Macro::parameters):
        (pp::Macro::replacements):
        * src/compiler/preprocessor/new/Preprocessor.cpp: Added.
        (pp):
        (pp::Preprocessor::Preprocessor):
        (pp::Preprocessor::~Preprocessor):
        (pp::Preprocessor::init):
        (pp::Preprocessor::process):
        (pp::Preprocessor::reset):
        * src/compiler/preprocessor/new/Preprocessor.h: Added.
        (pp):
        (Preprocessor):
        (pp::Preprocessor::begin):
        (pp::Preprocessor::end):
        * src/compiler/preprocessor/new/Token.cpp: Added.
        (pp):
        (pp::Token::encodeLocation):
        (pp::Token::decodeLocation):
        (pp::Token::Token):
        (pp::Token::~Token):
        (pp::operator<<):
        * src/compiler/preprocessor/new/Token.h: Added.
        (pp):
        (Token):
        (pp::Token::location):
        (pp::Token::type):
        (pp::Token::value):
        * src/compiler/preprocessor/new/generate_parser.sh: Added.
        * src/compiler/preprocessor/new/pp.l: Added.
        * src/compiler/preprocessor/new/pp.y: Added.
        * src/compiler/preprocessor/new/pp_lex.cpp: Added.
        (yy_buffer_state):
        (yy_trans_info):
        (yyguts_t):
        (yy_get_previous_state):
        (yy_try_NUL_trans):
        (input):
        (pprestart):
        (pp_switch_to_buffer):
        (pp_load_buffer_state):
        (pp_create_buffer):
        (pp_delete_buffer):
        (pp_init_buffer):
        (pp_flush_buffer):
        (pppush_buffer_state):
        (pppop_buffer_state):
        (ppensure_buffer_stack):
        (pp_scan_buffer):
        (pp_scan_string):
        (pp_scan_bytes):
        (yy_push_state):
        (yy_pop_state):
        (yy_top_state):
        (yy_fatal_error):
        (ppget_extra):
        (ppget_lineno):
        (ppget_column):
        (ppget_in):
        (ppget_out):
        (ppget_leng):
        (ppget_text):
        (ppset_extra):
        (ppset_lineno):
        (ppset_column):
        (ppset_in):
        (ppset_out):
        (ppget_debug):
        (ppset_debug):
        (ppget_lval):
        (ppset_lval):
        (ppget_lloc):
        (ppset_lloc):
        (pplex_init):
        (pplex_init_extra):
        (yy_init_globals):
        (pplex_destroy):
        (yy_flex_strncpy):
        (yy_flex_strlen):
        (ppalloc):
        (pprealloc):
        (ppfree):
        (extractMacroName):
        (pp):
        (pp::Context::readInput):
        (pp::Context::initLexer):
        (pp::Context::destroyLexer):
        * src/compiler/preprocessor/new/pp_tab.cpp: Added.
        (YYLTYPE):
        (yysyntax_error):
        (yyerror):
        (pushConditionalBlock):
        (popConditionalBlock):
        (pp::Context::parse):
        * src/compiler/preprocessor/new/pp_tab.h: Added.
        (YYLTYPE):
        * src/compiler/preprocessor/new/stl_utils.h: Added.
        (pp):
        (Delete):
        (pp::Delete::operator()):
        (DeleteSecond):
        (pp::DeleteSecond::operator()):
        * src/compiler/preprocessor/new/token_type.h: Added.
        * src/compiler/preprocessor/scanner.c:
        (yylex_CPP):
        * src/compiler/preprocessor/symbols.c:
        * src/compiler/preprocessor/tokens.c:
        * src/libEGL/Config.cpp:
        (egl::ConfigSet::getConfigs):
        * src/libEGL/Display.cpp:
        (egl::Display::initialize):
        (egl::Display::terminate):
        (egl::Display::restoreLostDevice):
        (egl::Display::sync):
        (egl):
        (egl::Display::allocateEventQuery):
        (egl::Display::freeEventQuery):
        (egl::Display::getFloat32TextureSupport):
        (egl::Display::getFloat16TextureSupport):
        (egl::Display::getEventQuerySupport):
        (egl::Display::initExtensionString):
        (egl::Display::shareHandleSupported):
        (egl::Display::getOcclusionQuerySupport):
        (egl::Display::getInstancingSupport):
        * src/libEGL/Display.h:
        (Display):
        (egl::Display::isD3d9ExDevice):
        * src/libEGL/Surface.cpp:
        (egl::Surface::resetSwapChain):
        * src/libEGL/libEGL.cpp:
        * src/libEGL/libEGL.vcproj:
        * src/libGLESv2/Blit.cpp:
        (gl::Blit::setCommonBlitState):
        * src/libGLESv2/Buffer.h:
        (Buffer):
        * src/libGLESv2/Context.cpp:
        (gl::Context::Context):
        (gl::Context::~Context):
        (gl::Context::makeCurrent):
        (gl::Context::getActiveQuery):
        (gl):
        (gl::Context::createFence):
        (gl::Context::createQuery):
        (gl::Context::deleteQuery):
        (gl::Context::beginQuery):
        (gl::Context::endQuery):
        (gl::Context::getQuery):
        (gl::Context::applyVertexBuffer):
        (gl::Context::applyIndexBuffer):
        (gl::Context::readPixels):
        (gl::Context::clear):
        (gl::Context::drawArrays):
        (gl::Context::drawElements):
        (gl::Context::sync):
        (gl::Context::drawLineLoop):
        (gl::Context::supportsOcclusionQueries):
        (gl::Context::supportsInstancing):
        (gl::Context::setVertexAttribDivisor):
        (gl::Context::initExtensionString):
        (gl::VertexDeclarationCache::applyDeclaration):
        (gl::VertexDeclarationCache::markStateDirty):
        * src/libGLESv2/Context.h:
        (gl):
        (gl::VertexAttribute::VertexAttribute):
        (State):
        (VertexDeclarationCache):
        (Context):
        * src/libGLESv2/Fence.cpp:
        (gl::Fence::Fence):
        (gl::Fence::~Fence):
        (gl::Fence::setFence):
        * src/libGLESv2/Fence.h:
        (egl):
        (Fence):
        * src/libGLESv2/Framebuffer.cpp:
        (gl::Framebuffer::lookupRenderbuffer):
        (gl::Framebuffer::detachTexture):
        (gl::Framebuffer::completeness):
        * src/libGLESv2/Framebuffer.h:
        * src/libGLESv2/IndexDataManager.cpp:
        (gl::IndexDataManager::IndexDataManager):
        (gl::IndexDataManager::~IndexDataManager):
        (gl::computeRange):
        (gl::IndexDataManager::prepareIndexData):
        (gl::IndexDataManager::getCountingIndices):
        (gl):
        * src/libGLESv2/IndexDataManager.h:
        (IndexDataManager):
        * src/libGLESv2/Program.cpp:
        (gl::Program::getUniformLocation):
        (gl::Program::setUniform1fv):
        (gl::Program::setUniform2fv):
        (gl::Program::setUniform3fv):
        (gl::Program::setUniform4fv):
        (gl::Program::setUniform1iv):
        (gl::Program::setUniform2iv):
        (gl::Program::setUniform3iv):
        (gl::Program::setUniform4iv):
        (gl::Program::packVaryings):
        (gl::Program::linkVaryings):
        (gl::Program::defineUniform):
        (gl::Program::createUniform):
        (gl::Program::applyUniformnbv):
        (gl::Program::applyUniform1iv):
        (gl::Program::applyUniform2iv):
        (gl::Program::applyUniform3iv):
        (gl::Program::applyUniform4iv):
        (gl::Program::getInfoLog):
        * src/libGLESv2/Program.h:
        (Program):
        * src/libGLESv2/Query.cpp: Added.
        (gl):
        (gl::Query::Query):
        (gl::Query::~Query):
        (gl::Query::begin):
        (gl::Query::end):
        (gl::Query::getResult):
        (gl::Query::isResultAvailable):
        (gl::Query::getType):
        (gl::Query::testQuery):
        * src/libGLESv2/Query.h: Added.
        (gl):
        (Query):
        * src/libGLESv2/Renderbuffer.cpp:
        (gl):
        (gl::RenderbufferInterface::addProxyRef):
        (gl::RenderbufferInterface::releaseProxy):
        (gl::RenderbufferTexture::RenderbufferTexture):
        (gl::RenderbufferTexture::~RenderbufferTexture):
        (gl::RenderbufferTexture::addProxyRef):
        (gl::RenderbufferTexture::releaseProxy):
        (gl::Renderbuffer::addRef):
        (gl::Renderbuffer::release):
        * src/libGLESv2/Renderbuffer.h:
        (gl):
        (RenderbufferInterface):
        (RenderbufferTexture):
        (Renderbuffer):
        * src/libGLESv2/Shader.cpp:
        (gl::Shader::Shader):
        (gl::Shader::getInfoLog):
        (gl::Shader::getSourceImpl):
        (gl):
        (gl::Shader::initializeCompiler):
        (gl::Shader::parseVaryings):
        (gl::Shader::uncompile):
        (gl::Shader::compileToHLSL):
        (gl::VertexShader::uncompile):
        (gl::VertexShader::compile):
        (gl::VertexShader::parseAttributes):
        (gl::FragmentShader::compile):
        * src/libGLESv2/Shader.h:
        (Shader):
        (VertexShader):
        * src/libGLESv2/Texture.cpp:
        (gl::Texture2D::Texture2D):
        (gl::Texture2D::~Texture2D):
        (gl):
        (gl::Texture2D::addProxyRef):
        (gl::Texture2D::releaseProxy):
        (gl::Texture2D::getRenderbuffer):
        (gl::TextureCubeMap::TextureCubeMap):
        (gl::TextureCubeMap::~TextureCubeMap):
        (gl::TextureCubeMap::addProxyRef):
        (gl::TextureCubeMap::releaseProxy):
        (gl::TextureCubeMap::isSamplerComplete):
        (gl::TextureCubeMap::convertToRenderTarget):
        (gl::TextureCubeMap::getRenderbuffer):
        * src/libGLESv2/Texture.h:
        (Texture):
        (Texture2D):
        (TextureCubeMap):
        * src/libGLESv2/VertexDataManager.cpp:
        (gl::VertexDataManager::writeAttributeData):
        (gl::VertexDataManager::prepareVertexData):
        (gl::VertexDataManager::spaceRequired):
        (gl):
        * src/libGLESv2/VertexDataManager.h:
        (TranslatedAttribute):
        (VertexDataManager):
        * src/libGLESv2/libGLESv2.cpp:
        * src/libGLESv2/libGLESv2.def:
        * src/libGLESv2/libGLESv2.vcproj:
        * src/libGLESv2/utilities.cpp:
        (gl::IsInternalTextureTarget):
        * src/libGLESv2/utilities.h:
        (gl):

2012-03-09  Ashod Nakashian  <ashodnakashian@yahoo.com>

        Bash scripts should support LF endings only
        https://bugs.webkit.org/show_bug.cgi?id=79509

        Reviewed by David Kilzer.

        * src/compiler/generate_parser.sh: Added property svn:eol-style.

2012-02-21  Sam Weinig  <sam@webkit.org>

        Attempt to fix the Snow Leopard build.

        * Configurations/Base.xcconfig:

2012-02-21  Sam Weinig  <sam@webkit.org>

        Use libc++ when building with Clang on Mac
        https://bugs.webkit.org/show_bug.cgi?id=78981

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2012-01-07  Chris Marrin  <cmarrin@apple.com>

        Fixed a warning in GTK build of ANGLE

        Unreviewed.

        * src/compiler/DetectRecursion.cpp:
        (DetectRecursion::~DetectRecursion):

2012-01-06  Mark Rowe  <mrowe@apple.com>

        Regenerate a few files with a more appropriate version of bison.

        Rubber-stamped by Dan Bernstein.

        * src/compiler/glslang.l: Tweak the input so that it generates code that compiles without warnings.
        * src/compiler/glslang_lex.cpp:
        * src/compiler/glslang_tab.cpp:
        * src/compiler/glslang_tab.h:

2012-01-06  Chris Marrin  <cmarrin@apple.com>

        Update ANGLE in WebKit tree
        https://bugs.webkit.org/show_bug.cgi?id=75753

        Reviewed by Simon Fraser.

        Updated ANGLE to r939. Fixed a compiler error (missing case in switch statement)
        and added 5 new files to xcodeproj. Other than that it is a straight copy of
        the files from the ANGLE repository.

        * ANGLE.xcodeproj/project.pbxproj:
        * include/EGL/eglext.h:
        * include/EGL/eglplatform.h:
        * include/GLES2/gl2ext.h:
        * include/GLSLANG/ShaderLang.h:
        * src/common/debug.cpp:
        (gl::output):
        (gl::trace):
        (gl::perfActive):
        (gl::ScopedPerfEventHelper::ScopedPerfEventHelper):
        (gl::ScopedPerfEventHelper::~ScopedPerfEventHelper):
        * src/common/version.h:
        * src/compiler/BaseTypes.h:
        (getBasicString):
        * src/compiler/BuiltInFunctionEmulator.cpp: Added.
        (BuiltInFunctionEmulator::BuiltInFunctionEmulator):
        (BuiltInFunctionEmulator::SetFunctionCalled):
        (BuiltInFunctionEmulator::OutputEmulatedFunctionDefinition):
        (BuiltInFunctionEmulator::IdentifyFunction):
        (BuiltInFunctionEmulator::MarkBuiltInFunctionsForEmulation):
        (BuiltInFunctionEmulator::Cleanup):
        (BuiltInFunctionEmulator::GetEmulatedFunctionName):
        * src/compiler/BuiltInFunctionEmulator.h: Added.
        * src/compiler/Compiler.cpp:
        (TCompiler::TCompiler):
        (TCompiler::compile):
        (TCompiler::clearResults):
        (TCompiler::detectRecursion):
        (TCompiler::getMappedNameMaxLength):
        (TCompiler::getBuiltInFunctionEmulator):
        * src/compiler/DetectRecursion.cpp: Added.
        (DetectRecursion::FunctionNode::FunctionNode):
        (DetectRecursion::FunctionNode::getName):
        (DetectRecursion::FunctionNode::addCallee):
        (DetectRecursion::FunctionNode::detectRecursion):
        (DetectRecursion::DetectRecursion):
        (DetectRecursion::~DetectRecursion):
        (DetectRecursion::visitAggregate):
        (DetectRecursion::detectRecursion):
        (DetectRecursion::findFunctionByName):
        * src/compiler/DetectRecursion.h: Added.
        * src/compiler/ExtensionBehavior.h:
        * src/compiler/ForLoopUnroll.cpp:
        (ForLoopUnroll::MarkForLoopsWithIntegerIndicesForUnrolling):
        * src/compiler/ForLoopUnroll.h:
        * src/compiler/Initialize.cpp:
        (BuiltInFunctionsCommon):
        (BuiltInFunctionsVertex):
        (BuiltInFunctionsFragment):
        (TBuiltIns::initialize):
        (IdentifyBuiltIns):
        (InitExtensionBehavior):
        * src/compiler/MapLongVariableNames.cpp:
        (MapLongVariableNames::MapLongVariableNames):
        (MapLongVariableNames::visitSymbol):
        (MapLongVariableNames::mapVaryingLongName):
        * src/compiler/MapLongVariableNames.h:
        * src/compiler/OutputGLSLBase.cpp:
        (TOutputGLSLBase::visitUnary):
        (TOutputGLSLBase::visitAggregate):
        * src/compiler/OutputHLSL.cpp:
        (sh::OutputHLSL::OutputHLSL):
        (sh::OutputHLSL::header):
        (sh::OutputHLSL::visitSymbol):
        (sh::OutputHLSL::visitAggregate):
        (sh::OutputHLSL::visitSelection):
        (sh::OutputHLSL::visitLoop):
        (sh::OutputHLSL::handleExcessiveLoop):
        (sh::OutputHLSL::addConstructor):
        (sh::OutputHLSL::decorate):
        (sh::OutputHLSL::decorateUniform):
        * src/compiler/OutputHLSL.h:
        * src/compiler/ParseHelper.cpp:
        (TParseContext::recover):
        (TParseContext::reservedErrorCheck):
        (TParseContext::constructorErrorCheck):
        (TParseContext::extensionErrorCheck):
        (TParseContext::supportsExtension):
        (TParseContext::enterStructDeclaration):
        (TParseContext::exitStructDeclaration):
        (TParseContext::structNestingErrorCheck):
        * src/compiler/ParseHelper.h:
        (TParseContext::TParseContext):
        * src/compiler/PoolAlloc.h:
        (pool_allocator::pool_allocator):
        (pool_allocator::operator=):
        (pool_allocator::setAllocator):
        (pool_allocator::getAllocator):
        * src/compiler/ShHandle.h:
        * src/compiler/ShaderLang.cpp:
        (checkActiveUniformAndAttribMaxLengths):
        (checkMappedNameMaxLength):
        (getVariableInfo):
        (ShInitBuiltInResources):
        (ShGetInfo):
        * src/compiler/SymbolTable.cpp:
        (TType::computeDeepestStructNesting):
        * src/compiler/TranslatorESSL.cpp:
        (TranslatorESSL::translate):
        (TranslatorESSL::writeExtensionBehavior):
        * src/compiler/TranslatorGLSL.cpp:
        (TranslatorGLSL::translate):
        * src/compiler/Types.h:
        (TType::TType):
        (TType::copyType):
        (TType::setStruct):
        (TType::getDeepestStructNesting):
        * src/compiler/UnfoldSelect.cpp:
        (sh::UnfoldSelect::traverse):
        (sh::UnfoldSelect::visitSelection):
        (sh::UnfoldSelect::visitLoop):
        (sh::UnfoldSelect::getNextTemporaryIndex):
        * src/compiler/UnfoldSelect.h:
        * src/compiler/ValidateLimitations.cpp:
        * src/compiler/ValidateLimitations.h:
        * src/compiler/VariableInfo.cpp:
        (getVariableDataType):
        * src/compiler/generate_glslang_lexer.sh: Removed.
        * src/compiler/generate_glslang_parser.sh: Removed.
        * src/compiler/generate_parser.sh: Added.
        * src/compiler/glslang.l:
        * src/compiler/glslang.y:
        * src/compiler/glslang_lex.cpp:
        (yy_get_previous_state):
        (yy_try_NUL_trans):
        * src/compiler/glslang_tab.cpp:
        * src/compiler/glslang_tab.h:
        * src/compiler/intermOut.cpp:
        (TOutputTraverser::visitAggregate):
        * src/compiler/intermediate.h:
        (TIntermUnary::TIntermUnary):
        (TIntermUnary::setUseEmulatedFunction):
        (TIntermUnary::getUseEmulatedFunction):
        (TIntermAggregate::TIntermAggregate):
        (TIntermAggregate::setUseEmulatedFunction):
        (TIntermAggregate::getUseEmulatedFunction):
        * src/compiler/osinclude.h:
        * src/compiler/ossource_posix.cpp:
        (OS_AllocTLSIndex):
        (OS_SetTLSValue):
        (OS_FreeTLSIndex):
        * src/compiler/preprocessor/atom.c:
        (GrowAtomTable):
        * src/compiler/preprocessor/length_limits.h: Added.
        * src/compiler/preprocessor/scanner.h:
        * src/libEGL/Display.cpp:
        (egl::Display::getDisplay):
        (egl::Display::Display):
        (egl::Display::~Display):
        (egl::Display::initialize):
        (egl::Display::terminate):
        (egl::Display::startScene):
        (egl::Display::endScene):
        (egl::Display::createDevice):
        (egl::Display::initializeDevice):
        (egl::Display::resetDevice):
        (egl::Display::createWindowSurface):
        (egl::Display::createOffscreenSurface):
        (egl::Display::createContext):
        (egl::Display::restoreLostDevice):
        (egl::Display::notifyDeviceLost):
        (egl::Display::isDeviceLost):
        (egl::Display::testDeviceLost):
        (egl::Display::testDeviceResettable):
        (egl::Display::getDXT1TextureSupport):
        (egl::Display::getDXT3TextureSupport):
        (egl::Display::getDXT5TextureSupport):
        (egl::Display::getFloat32TextureSupport):
        (egl::Display::getFloat16TextureSupport):
        (egl::Display::getTexturePool):
        (egl::Display::initExtensionString):
        * src/libEGL/Display.h:
        * src/libEGL/Surface.cpp:
        (egl::Surface::Surface):
        (egl::Surface::initialize):
        (egl::Surface::resetSwapChain):
        (egl::Surface::subclassWindow):
        (egl::Surface::unsubclassWindow):
        (egl::Surface::swap):
        (egl::Surface::postSubBuffer):
        (egl::Surface::isPostSubBufferSupported):
        * src/libEGL/Surface.h:
        * src/libEGL/libEGL.cpp:
        * src/libEGL/libEGL.rc:
        * src/libEGL/libEGL.vcproj:
        * src/libGLESv2/Buffer.cpp:
        (gl::Buffer::bufferSubData):
        * src/libGLESv2/Context.cpp:
        (gl::Context::Context):
        (gl::Context::makeCurrent):
        (gl::Context::markAllStateDirty):
        (gl::Context::markContextLost):
        (gl::Context::isContextLost):
        (gl::Context::setPackReverseRowOrder):
        (gl::Context::getPackReverseRowOrder):
        (gl::Context::deleteProgram):
        (gl::Context::getDrawFramebuffer):
        (gl::Context::bindDrawFramebuffer):
        (gl::Context::useProgram):
        (gl::Context::setFramebufferZero):
        (gl::Context::getCurrentProgram):
        (gl::Context::getBooleanv):
        (gl::Context::getIntegerv):
        (gl::Context::getQueryParameterInfo):
        (gl::Context::applyRenderTarget):
        (gl::Context::applyState):
        (gl::Context::applyVertexBuffer):
        (gl::Context::applyIndexBuffer):
        (gl::Context::applyShaders):
        (gl::Context::applyTextures):
        (gl::Context::readPixels):
        (gl::Context::clear):
        (gl::Context::drawArrays):
        (gl::Context::drawElements):
        (gl::Context::sync):
        (gl::Context::drawClosingLine):
        (gl::Context::getResetStatus):
        (gl::Context::isResetNotificationEnabled):
        (gl::Context::supportsDXT1Textures):
        (gl::Context::supportsDXT3Textures):
        (gl::Context::supportsDXT5Textures):
        (gl::Context::supportsFloat32Textures):
        (gl::Context::supportsFloat32LinearFilter):
        (gl::Context::supportsFloat32RenderableTextures):
        (gl::Context::supportsFloat16Textures):
        (gl::Context::supportsFloat16LinearFilter):
        (gl::Context::supportsFloat16RenderableTextures):
        (gl::Context::initExtensionString):
        (gl::Context::initRendererString):
        (gl::Context::getRendererString):
        (gl::Context::blitFramebuffer):
        (gl::VertexDeclarationCache::applyDeclaration):
        (gl::VertexDeclarationCache::markStateDirty):
        * src/libGLESv2/Context.h:
        * src/libGLESv2/Fence.cpp:
        (gl::Fence::testFence):
        (gl::Fence::getFenceiv):
        * src/libGLESv2/Framebuffer.cpp:
        (gl::Framebuffer::setColorbuffer):
        (gl::Framebuffer::setDepthbuffer):
        (gl::Framebuffer::setStencilbuffer):
        (gl::Framebuffer::getColorbuffer):
        (gl::Framebuffer::getDepthbuffer):
        (gl::Framebuffer::getStencilbuffer):
        (gl::Framebuffer::hasStencil):
        (gl::Framebuffer::completeness):
        (gl::DefaultFramebuffer::DefaultFramebuffer):
        * src/libGLESv2/Framebuffer.h:
        * src/libGLESv2/IndexDataManager.cpp:
        (gl::IndexDataManager::prepareIndexData):
        (gl::IndexBuffer::IndexBuffer):
        (gl::IndexBuffer::getSerial):
        (gl::IndexBuffer::issueSerial):
        (gl::StreamingIndexBuffer::reserveSpace):
        (gl::StaticIndexBuffer::reserveSpace):
        (gl::StaticIndexBuffer::lookupRange):
        (gl::StaticIndexBuffer::addRange):
        * src/libGLESv2/IndexDataManager.h:
        (gl::StaticIndexBuffer::IndexRange::operator<):
        * src/libGLESv2/Program.cpp:
        (gl::Uniform::Uniform):
        (gl::Uniform::isArray):
        (gl::UniformLocation::UniformLocation):
        (gl::Program::Program):
        (gl::Program::detachShader):
        (gl::Program::getUsedSamplerRange):
        (gl::Program::getSamplerMapping):
        (gl::Program::getUniformLocation):
        (gl::Program::setUniform1fv):
        (gl::Program::setUniform2fv):
        (gl::Program::setUniform3fv):
        (gl::transposeMatrix):
        (gl::Program::setUniformMatrix2fv):
        (gl::Program::setUniformMatrix3fv):
        (gl::Program::setUniformMatrix4fv):
        (gl::Program::getUniformfv):
        (gl::Program::getUniformiv):
        (gl::Program::applyUniforms):
        (gl::Program::compileToBinary):
        (gl::Program::linkVaryings):
        (gl::Program::link):
        (gl::Program::defineUniform):
        (gl::Program::createUniform):
        (gl::Program::decorateAttribute):
        (gl::Program::undecorateUniform):
        (gl::Program::applyUniformnbv):
        (gl::Program::applyUniformnfv):
        (gl::Program::applyUniform1iv):
        (gl::Program::applyUniform2iv):
        (gl::Program::applyUniform3iv):
        (gl::Program::applyUniform4iv):
        (gl::Program::applyUniformniv):
        (gl::Program::appendToInfoLogSanitized):
        (gl::Program::unlink):
        (gl::Program::getActiveUniform):
        (gl::Program::getActiveUniformCount):
        (gl::Program::getActiveUniformMaxLength):
        (gl::Program::validateSamplers):
        (gl::Program::initializeConstantHandles):
        (gl::Program::getDxCoordLocation):
        * src/libGLESv2/Program.h:
        * src/libGLESv2/Renderbuffer.cpp:
        (gl::RenderbufferInterface::RenderbufferInterface):
        (gl::RenderbufferInterface::getRedSize):
        (gl::RenderbufferInterface::getGreenSize):
        (gl::RenderbufferInterface::getBlueSize):
        (gl::RenderbufferInterface::getAlphaSize):
        (gl::RenderbufferInterface::getDepthSize):
        (gl::RenderbufferInterface::getStencilSize):
        (gl::RenderbufferTexture::RenderbufferTexture):
        (gl::RenderbufferTexture::~RenderbufferTexture):
        (gl::RenderbufferTexture::getRenderTarget):
        (gl::RenderbufferTexture::getDepthStencil):
        (gl::RenderbufferTexture::getWidth):
        (gl::RenderbufferTexture::getHeight):
        (gl::RenderbufferTexture::getInternalFormat):
        (gl::RenderbufferTexture::getD3DFormat):
        (gl::RenderbufferTexture::getSamples):
        (gl::RenderbufferTexture::getSerial):
        (gl::Renderbuffer::Renderbuffer):
        (gl::Renderbuffer::~Renderbuffer):
        (gl::Renderbuffer::getRenderTarget):
        (gl::Renderbuffer::getDepthStencil):
        (gl::Renderbuffer::getWidth):
        (gl::Renderbuffer::getHeight):
        (gl::Renderbuffer::getInternalFormat):
        (gl::Renderbuffer::getD3DFormat):
        (gl::Renderbuffer::getRedSize):
        (gl::Renderbuffer::getGreenSize):
        (gl::Renderbuffer::getBlueSize):
        (gl::Renderbuffer::getAlphaSize):
        (gl::Renderbuffer::getDepthSize):
        (gl::Renderbuffer::getStencilSize):
        (gl::Renderbuffer::getSamples):
        (gl::Renderbuffer::getSerial):
        (gl::Renderbuffer::setStorage):
        (gl::RenderbufferStorage::getD3DFormat):
        (gl::RenderbufferStorage::issueCubeSerials):
        (gl::Colorbuffer::Colorbuffer):
        (gl::Colorbuffer::getRenderTarget):
        (gl::Depthbuffer::Depthbuffer):
        (gl::Stencilbuffer::Stencilbuffer):
        * src/libGLESv2/Renderbuffer.h:
        (gl::RenderbufferInterface::~RenderbufferInterface):
        * src/libGLESv2/Shader.cpp:
        (gl::Shader::getTranslatedSourceLength):
        (gl::Shader::getSourceImpl):
        (gl::Shader::getSource):
        (gl::Shader::getTranslatedSource):
        * src/libGLESv2/Shader.h:
        * src/libGLESv2/Texture.cpp:
        (gl::ConvertTextureFormatType):
        (gl::IsTextureFormatRenderable):
        (gl::Image::Image):
        (gl::Image::~Image):
        (gl::Image::redefine):
        (gl::Image::createSurface):
        (gl::Image::lock):
        (gl::Image::unlock):
        (gl::Image::isRenderableFormat):
        (gl::Image::getD3DFormat):
        (gl::Image::getSurface):
        (gl::Image::setManagedSurface):
        (gl::Image::updateSurface):
        (gl::Image::loadData):
        (gl::Image::loadAlphaData):
        (gl::Image::loadAlphaFloatData):
        (gl::Image::loadAlphaHalfFloatData):
        (gl::Image::loadLuminanceData):
        (gl::Image::loadLuminanceFloatData):
        (gl::Image::loadLuminanceHalfFloatData):
        (gl::Image::loadLuminanceAlphaData):
        (gl::Image::loadLuminanceAlphaFloatData):
        (gl::Image::loadLuminanceAlphaHalfFloatData):
        (gl::Image::loadRGBUByteData):
        (gl::Image::loadRGB565Data):
        (gl::Image::loadRGBFloatData):
        (gl::Image::loadRGBHalfFloatData):
        (gl::Image::loadRGBAUByteDataSSE2):
        (gl::Image::loadRGBAUByteData):
        (gl::Image::loadRGBA4444Data):
        (gl::Image::loadRGBA5551Data):
        (gl::Image::loadRGBAFloatData):
        (gl::Image::loadRGBAHalfFloatData):
        (gl::Image::loadBGRAData):
        (gl::Image::loadCompressedData):
        (gl::FlipCopyDXT1BlockFull):
        (gl::FlipCopyDXT1BlockHalf):
        (gl::FlipCopyDXT3BlockFull):
        (gl::FlipCopyDXT3BlockHalf):
        (gl::FlipCopyDXT5BlockFull):
        (gl::FlipCopyDXT5BlockHalf):
        (gl::Image::loadDXT1Data):
        (gl::Image::loadDXT3Data):
        (gl::Image::loadDXT5Data):
        (gl::Image::copy):
        (gl::TextureStorage::TextureStorage):
        (gl::TextureStorage::~TextureStorage):
        (gl::TextureStorage::isRenderTarget):
        (gl::TextureStorage::isManaged):
        (gl::TextureStorage::getPool):
        (gl::TextureStorage::getTextureSerial):
        (gl::TextureStorage::issueTextureSerial):
        (gl::Texture::Texture):
        (gl::Texture::~Texture):
        (gl::Texture::setMinFilter):
        (gl::Texture::setMagFilter):
        (gl::Texture::setWrapS):
        (gl::Texture::setWrapT):
        (gl::Texture::setUsage):
        (gl::Texture::getMinFilter):
        (gl::Texture::getMagFilter):
        (gl::Texture::getWrapS):
        (gl::Texture::getWrapT):
        (gl::Texture::getUsage):
        (gl::Texture::setImage):
        (gl::Texture::setCompressedImage):
        (gl::Texture::subImage):
        (gl::Texture::subImageCompressed):
        (gl::Texture::getTexture):
        (gl::Texture::hasDirtyParameters):
        (gl::Texture::hasDirtyImages):
        (gl::Texture::resetDirty):
        (gl::Texture::getTextureSerial):
        (gl::Texture::getRenderTargetSerial):
        (gl::Texture::isImmutable):
        (gl::Texture::creationLevels):
        (gl::Texture::getBlitter):
        (gl::Texture::copyToRenderTarget):
        (gl::TextureStorage2D::TextureStorage2D):
        (gl::TextureStorage2D::~TextureStorage2D):
        (gl::TextureStorage2D::getSurfaceLevel):
        (gl::TextureStorage2D::getBaseTexture):
        (gl::TextureStorage2D::getRenderTargetSerial):
        (gl::Texture2D::Texture2D):
        (gl::Texture2D::~Texture2D):
        (gl::Texture2D::getWidth):
        (gl::Texture2D::getHeight):
        (gl::Texture2D::getInternalFormat):
        (gl::Texture2D::getType):
        (gl::Texture2D::redefineImage):
        (gl::Texture2D::setImage):
        (gl::Texture2D::bindTexImage):
        (gl::Texture2D::releaseTexImage):
        (gl::Texture2D::setCompressedImage):
        (gl::Texture2D::commitRect):
        (gl::Texture2D::copyImage):
        (gl::Texture2D::copySubImage):
        (gl::Texture2D::storage):
        (gl::Texture2D::isSamplerComplete):
        (gl::Texture2D::isMipmapComplete):
        (gl::Texture2D::getBaseTexture):
        (gl::Texture2D::createTexture):
        (gl::Texture2D::updateTexture):
        (gl::Texture2D::convertToRenderTarget):
        (gl::Texture2D::generateMipmaps):
        (gl::Texture2D::getRenderbuffer):
        (gl::Texture2D::getRenderTarget):
        (gl::Texture2D::getStorage):
        (gl::TextureStorageCubeMap::TextureStorageCubeMap):
        (gl::TextureStorageCubeMap::~TextureStorageCubeMap):
        (gl::TextureStorageCubeMap::getCubeMapSurface):
        (gl::TextureStorageCubeMap::getBaseTexture):
        (gl::TextureStorageCubeMap::getRenderTargetSerial):
        (gl::TextureCubeMap::TextureCubeMap):
        (gl::TextureCubeMap::~TextureCubeMap):
        (gl::TextureCubeMap::getWidth):
        (gl::TextureCubeMap::getHeight):
        (gl::TextureCubeMap::getInternalFormat):
        (gl::TextureCubeMap::getType):
        (gl::TextureCubeMap::setCompressedImage):
        (gl::TextureCubeMap::commitRect):
        (gl::TextureCubeMap::subImage):
        (gl::TextureCubeMap::subImageCompressed):
        (gl::TextureCubeMap::isSamplerComplete):
        (gl::TextureCubeMap::isCubeComplete):
        (gl::TextureCubeMap::isMipmapCubeComplete):
        (gl::TextureCubeMap::getBaseTexture):
        (gl::TextureCubeMap::createTexture):
        (gl::TextureCubeMap::updateTexture):
        (gl::TextureCubeMap::convertToRenderTarget):
        (gl::TextureCubeMap::setImage):
        (gl::TextureCubeMap::redefineImage):
        (gl::TextureCubeMap::copyImage):
        (gl::TextureCubeMap::copySubImage):
        (gl::TextureCubeMap::storage):
        (gl::TextureCubeMap::generateMipmaps):
        (gl::TextureCubeMap::getRenderbuffer):
        (gl::TextureCubeMap::getRenderTarget):
        (gl::TextureCubeMap::getStorage):
        * src/libGLESv2/Texture.h:
        (gl::Image::markDirty):
        (gl::Image::markClean):
        (gl::Image::getWidth):
        (gl::Image::getHeight):
        (gl::Image::getFormat):
        (gl::Image::getType):
        (gl::Image::isDirty):
        * src/libGLESv2/VertexDataManager.cpp:
        (gl::elementsInBuffer):
        (gl::VertexDataManager::VertexDataManager):
        (gl::VertexDataManager::writeAttributeData):
        (gl::VertexDataManager::prepareVertexData):
        (gl::VertexBuffer::VertexBuffer):
        (gl::VertexBuffer::getSerial):
        (gl::VertexBuffer::issueSerial):
        (gl::StreamingVertexBuffer::reserveRequiredSpace):
        (gl::StaticVertexBuffer::map):
        (gl::StaticVertexBuffer::reserveRequiredSpace):
        (gl::StaticVertexBuffer::lookupAttribute):
        * src/libGLESv2/VertexDataManager.h:
        (gl::ArrayVertexBuffer::size):
        * src/libGLESv2/geometry/IndexDataManager.cpp: Removed.
        * src/libGLESv2/geometry/IndexDataManager.h: Removed.
        * src/libGLESv2/geometry/VertexDataManager.cpp: Removed.
        * src/libGLESv2/geometry/VertexDataManager.h: Removed.
        * src/libGLESv2/geometry/vertexconversion.h: Removed.
        * src/libGLESv2/libGLESv2.cpp:
        (validateSubImageParams):
        (validReadFormatType):
        (Extension::glBindTexImage):
        * src/libGLESv2/libGLESv2.def:
        * src/libGLESv2/libGLESv2.rc:
        * src/libGLESv2/libGLESv2.vcproj:
        * src/libGLESv2/main.cpp:
        (gl::getNonLostContext):
        (gl::checkDeviceLost):
        * src/libGLESv2/main.h:
        * src/libGLESv2/utilities.cpp:
        (gl::UniformExternalComponentCount):
        (gl::UniformInternalComponentCount):
        (gl::UniformComponentSize):
        (gl::UniformInternalSize):
        (gl::UniformExternalSize):
        (gl::ComputeCompressedSize):
        (gl::IsCompressed):
        (gl::ExtractFormat):
        (gl::ExtractType):
        (dx2es::IsFloat32Format):
        (dx2es::IsFloat16Format):
        * src/libGLESv2/utilities.h:
        (isDeviceLostError):

2011-11-11  Darin Adler  <darin@apple.com>

        * ANGLE.xcodeproj/project.pbxproj: Let a newer Xcode update this file.
        If an older Xcode downgrades this file and we have a risk of some kind of
        oscillating commit situation, please contact me so I know not to do this again.

2011-09-19  Adam Roben  <aroben@apple.com>

        Let Xcode 4 do its thang with ANGLE.xcodeproj

        * ANGLE.xcodeproj/project.pbxproj:

2011-09-13  Anders Carlsson  <andersca@apple.com>

        Disable C++ exceptions when building with clang
        https://bugs.webkit.org/show_bug.cgi?id=68031
        <rdar://problem/9556880>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig:

2011-09-08  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Build fails with strict compiler
        https://bugs.webkit.org/show_bug.cgi?id=67778

        Reviewed by Csaba Osztrogonác.

        * src/compiler/glslang_lex.cpp: Regenerate with generate_glslang_lexer.sh using a newer flex
        to suppress warning and fix the build when using [-Werror=unused-result]

2011-08-12  Mark Rowe  <mrowe@apple.com>

        Be more forward-looking in the choice of compiler.

        Rubber-stamped by Jon Honeycutt.

        * Configurations/CompilerVersion.xcconfig:

2011-08-11  Renata Hodovan  <reni@webkit.org>

        [Qt]Fix warnings after r92805.

        Reviewed by Csaba Osztrogonác.

        Control reached the end non-void functions.

        * src/compiler/ossource_posix.cpp:
        (OS_AllocTLSIndex):
        (OS_SetTLSValue):

2011-08-11  Renata Hodovan  <reni@webkit.org>

        Build fix on Qt Windows 32-bit Release/Debug after r92805.

        Unreviewed.

        * src/compiler/ossource_posix.cpp:
        (OS_FreeTLSIndex):

2011-08-04  Mark Rowe  <mrowe@apple.com>

        Future-proof Xcode configuration settings.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2011-06-30  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        ANGLE shouldn't try to use internal SDKs. It doesn't need them!

        * Configurations/Base.xcconfig:

2011-06-20  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Update ANGLE to r696
        https://bugs.webkit.org/show_bug.cgi?id=56396

        * ANGLE.xcodeproj/project.pbxproj:
        * include/EGL/eglext.h:
        * include/GLSLANG/ShaderLang.h:
        * src/build_angle.xcodeproj/project.pbxproj:
        * src/common/debug.cpp:
        (gl::output):
        (gl::trace):
        (gl::perfActive):
        (gl::ScopedPerfEventHelper::ScopedPerfEventHelper):
        (gl::ScopedPerfEventHelper::~ScopedPerfEventHelper):
        * src/common/debug.h:
        * src/common/version.h: Added.
        * src/compiler/CodeGenGLSL.cpp:
        (ConstructCompiler):
        * src/compiler/CodeGenHLSL.cpp:
        (ConstructCompiler):
        * src/compiler/Compiler.cpp:
        (TCompiler::compile):
        (TCompiler::mapLongVariableNames):
        (TCompiler::getMappedNameMaxLength):
        (TCompiler::getExtensionBehavior):
        * src/compiler/ConstantUnion.h:
        (ConstantUnion::operator==):
        (ConstantUnion::operator>):
        (ConstantUnion::operator<):
        * src/compiler/ExtensionBehavior.h:
        (getBehaviorString):
        * src/compiler/ForLoopUnroll.cpp: Added.
        (ForLoopUnroll::FillLoopIndexInfo):
        (ForLoopUnroll::Step):
        (ForLoopUnroll::SatisfiesLoopCondition):
        (ForLoopUnroll::NeedsToReplaceSymbolWithValue):
        (ForLoopUnroll::GetLoopIndexValue):
        (ForLoopUnroll::Push):
        (ForLoopUnroll::Pop):
        (ForLoopUnroll::getLoopIncrement):
        (ForLoopUnroll::evaluateIntConstant):
        * src/compiler/ForLoopUnroll.h: Added.
        (ForLoopUnroll::ForLoopUnroll):
        * src/compiler/Initialize.cpp:
        (BuiltInFunctionsVertex):
        * src/compiler/MapLongVariableNames.cpp: Added.
        (MapLongVariableNames::MapLongVariableNames):
        (MapLongVariableNames::visitSymbol):
        (MapLongVariableNames::visitConstantUnion):
        (MapLongVariableNames::visitBinary):
        (MapLongVariableNames::visitUnary):
        (MapLongVariableNames::visitSelection):
        (MapLongVariableNames::visitAggregate):
        (MapLongVariableNames::visitLoop):
        (MapLongVariableNames::visitBranch):
        (MapLongVariableNames::mapVaryingLongName):
        * src/compiler/MapLongVariableNames.h: Added.
        * src/compiler/OutputESSL.cpp: Added.
        (TOutputESSL::TOutputESSL):
        (TOutputESSL::writeVariablePrecision):
        * src/compiler/OutputESSL.h: Added.
        * src/compiler/OutputGLSL.cpp:
        (TOutputGLSL::TOutputGLSL):
        (TOutputGLSL::writeVariablePrecision):
        * src/compiler/OutputGLSL.h:
        * src/compiler/OutputGLSLBase.cpp: Added.
        (TOutputGLSLBase::TOutputGLSLBase):
        (TOutputGLSLBase::writeTriplet):
        (TOutputGLSLBase::writeVariableType):
        (TOutputGLSLBase::writeFunctionParameters):
        (TOutputGLSLBase::writeConstantUnion):
        (TOutputGLSLBase::visitSymbol):
        (TOutputGLSLBase::visitConstantUnion):
        (TOutputGLSLBase::visitBinary):
        (TOutputGLSLBase::visitUnary):
        (TOutputGLSLBase::visitSelection):
        (TOutputGLSLBase::visitAggregate):
        (TOutputGLSLBase::visitLoop):
        (TOutputGLSLBase::visitBranch):
        (TOutputGLSLBase::visitCodeBlock):
        * src/compiler/OutputGLSLBase.h: Added.
        (TOutputGLSLBase::objSink):
        * src/compiler/OutputHLSL.cpp:
        (sh::OutputHLSL::OutputHLSL):
        (sh::OutputHLSL::header):
        (sh::OutputHLSL::visitUnary):
        (sh::OutputHLSL::visitAggregate):
        (sh::OutputHLSL::visitSelection):
        (sh::OutputHLSL::visitLoop):
        (sh::OutputHLSL::visitBranch):
        (sh::OutputHLSL::handleExcessiveLoop):
        (sh::OutputHLSL::outputLineDirective):
        * src/compiler/OutputHLSL.h:
        * src/compiler/ParseHelper.cpp:
        (TParseContext::precisionErrorCheck):
        (TParseContext::constructorErrorCheck):
        (TParseContext::nonInitErrorCheck):
        * src/compiler/ParseHelper.h:
        (TParseContext::TParseContext):
        * src/compiler/ShHandle.h:
        * src/compiler/ShaderLang.cpp:
        (getVariableInfo):
        (ShConstructCompiler):
        (ShGetInfo):
        (ShGetActiveAttrib):
        (ShGetActiveUniform):
        * src/compiler/TranslatorESSL.cpp: Added.
        (TranslatorESSL::TranslatorESSL):
        (TranslatorESSL::translate):
        (TranslatorESSL::writeExtensionBehavior):
        * src/compiler/TranslatorESSL.h: Added.
        * src/compiler/ValidateLimitations.cpp:
        (ValidateLimitations::visitBinary):
        (ValidateLimitations::visitLoop):
        * src/compiler/ValidateLimitations.h:
        * src/compiler/VariableInfo.cpp:
        (getVariableInfo):
        (getBuiltInVariableInfo):
        (getUserDefinedVariableInfo):
        (CollectAttribsUniforms::visitAggregate):
        * src/compiler/VariableInfo.h:
        * src/compiler/VersionGLSL.cpp:
        (TVersionGLSL::visitSymbol):
        (TVersionGLSL::visitConstantUnion):
        (TVersionGLSL::visitBinary):
        (TVersionGLSL::visitUnary):
        (TVersionGLSL::visitSelection):
        (TVersionGLSL::visitAggregate):
        (TVersionGLSL::visitLoop):
        (TVersionGLSL::visitBranch):
        * src/compiler/VersionGLSL.h:
        * src/compiler/glslang.y:
        * src/compiler/glslang_tab.cpp:
        * src/compiler/glslang_tab.h:
        * src/compiler/intermediate.h:
        (TIntermLoop::TIntermLoop):
        (TIntermLoop::setUnrollFlag):
        (TIntermLoop::getUnrollFlag):
        (TIntermSymbol::TIntermSymbol):
        (TIntermSymbol::setId):
        (TIntermSymbol::setSymbol):
        (TIntermSymbol::getOriginalSymbol):
        (TIntermAggregate::TIntermAggregate):
        (TIntermAggregate::setEndLine):
        (TIntermAggregate::getEndLine):
        * src/compiler/preprocessor/atom.c:
        (AddString):
        * src/compiler/preprocessor/compile.h:
        * src/compiler/preprocessor/cpp.c:
        (CPPelse):
        (eval):
        (CPPif):
        (CPPifdef):
        (readCPPline):
        (ChkCorrectElseNesting):
        * src/compiler/preprocessor/cppstruct.c:
        (ResetPreprocessor):
        * src/compiler/preprocessor/scanner.c:
        (byte_scan):
        (yylex_CPP):
        * src/compiler/preprocessor/scanner.h:
        * src/libEGL/Config.cpp:
        (egl::Config::Config):
        (egl::Config::set):
        (egl::ConfigSet::add):
        (egl::ConfigSet::getConfigs):
        * src/libEGL/Config.h:
        * src/libEGL/Display.cpp:
        (egl::Display::Display):
        (egl::Display::initialize):
        (egl::Display::terminate):
        (egl::Display::getConfigAttrib):
        (egl::Display::createDevice):
        (egl::Display::createWindowSurface):
        (egl::Display::createOffscreenSurface):
        (egl::Display::createContext):
        (egl::Display::destroyContext):
        (egl::Display::isInitialized):
        (egl::Display::getAdapterIdentifier):
        (egl::Display::isDeviceLost):
        (egl::Display::getBufferPool):
        (egl::Display::initExtensionString):
        (egl::Display::getExtensionString):
        (egl::Display::getVertexTextureSupport):
        (egl::Display::getNonPower2TextureSupport):
        * src/libEGL/Display.h:
        (egl::Display::isD3d9ExDevice):
        * src/libEGL/Surface.cpp:
        (egl::Surface::Surface):
        (egl::Surface::initialize):
        (egl::Surface::release):
        (egl::Surface::resetSwapChain):
        (egl::SurfaceWindowProc):
        (egl::Surface::subclassWindow):
        (egl::Surface::unsubclassWindow):
        (egl::Surface::swap):
        (egl::Surface::getRenderTarget):
        (egl::Surface::getOffscreenTexture):
        (egl::Surface::getTextureFormat):
        (egl::Surface::getTextureTarget):
        (egl::Surface::setBoundTexture):
        (egl::Surface::getBoundTexture):
        (egl::Surface::getFormat):
        * src/libEGL/Surface.h:
        (egl::Surface::getShareHandle):
        * src/libEGL/libEGL.cpp:
        (validateDisplay):
        (validateConfig):
        (validateContext):
        (validateSurface):
        * src/libEGL/libEGL.rc: Added.
        * src/libEGL/libEGL.vcproj:
        * src/libEGL/main.cpp:
        (DllMain):
        * src/libEGL/main.h:
        * src/libEGL/resource.h: Added.
        * src/libGLESv2/Blit.cpp:
        (gl::Blit::initGeometry):
        (gl::Blit::copy):
        * src/libGLESv2/Blit.h:
        * src/libGLESv2/Buffer.cpp:
        (gl::Buffer::Buffer):
        (gl::Buffer::~Buffer):
        (gl::Buffer::bufferData):
        (gl::Buffer::bufferSubData):
        (gl::Buffer::getStaticVertexBuffer):
        (gl::Buffer::getStaticIndexBuffer):
        (gl::Buffer::invalidateStaticData):
        (gl::Buffer::promoteStaticUsage):
        * src/libGLESv2/Buffer.h:
        * src/libGLESv2/Context.cpp:
        (gl::Context::Context):
        (gl::Context::~Context):
        (gl::Context::makeCurrent):
        (gl::Context::markAllStateDirty):
        (gl::Context::setActiveSampler):
        (gl::Context::createFramebuffer):
        (gl::Context::createFence):
        (gl::Context::deleteFramebuffer):
        (gl::Context::deleteFence):
        (gl::Context::bindTexture2D):
        (gl::Context::bindTextureCubeMap):
        (gl::Context::getTexture2D):
        (gl::Context::getTextureCubeMap):
        (gl::Context::getSamplerTexture):
        (gl::Context::getIntegerv):
        (gl::Context::applyRenderTarget):
        (gl::Context::applyState):
        (gl::Context::applyVertexBuffer):
        (gl::Context::applyShaders):
        (gl::Context::applyTextures):
        (gl::Context::readPixels):
        (gl::Context::clear):
        (gl::Context::drawArrays):
        (gl::Context::drawElements):
        (gl::Context::finish):
        (gl::Context::flush):
        (gl::Context::drawClosingLine):
        (gl::Context::getMaximumVertexTextureImageUnits):
        (gl::Context::getMaximumCombinedTextureImageUnits):
        (gl::Context::supportsNonPower2Texture):
        (gl::Context::detachTexture):
        (gl::Context::getIncompleteTexture):
        (gl::Context::initExtensionString):
        (gl::Context::blitFramebuffer):
        (gl::VertexDeclarationCache::VertexDeclarationCache):
        (gl::VertexDeclarationCache::~VertexDeclarationCache):
        (gl::VertexDeclarationCache::applyDeclaration):
        * src/libGLESv2/Context.h:
        * src/libGLESv2/Framebuffer.cpp:
        (gl::Framebuffer::lookupRenderbuffer):
        (gl::Framebuffer::completeness):
        * src/libGLESv2/Framebuffer.h:
        * src/libGLESv2/HandleAllocator.cpp: Added.
        (gl::HandleAllocator::HandleAllocator):
        (gl::HandleAllocator::~HandleAllocator):
        (gl::HandleAllocator::setBaseHandle):
        (gl::HandleAllocator::allocate):
        (gl::HandleAllocator::release):
        * src/libGLESv2/HandleAllocator.h: Added.
        * src/libGLESv2/IndexDataManager.cpp: Added.
        (gl::IndexDataManager::IndexDataManager):
        (gl::IndexDataManager::~IndexDataManager):
        (gl::convertIndices):
        (gl::computeRange):
        (gl::IndexDataManager::prepareIndexData):
        (gl::IndexDataManager::indexSize):
        (gl::IndexDataManager::typeSize):
        (gl::IndexBuffer::IndexBuffer):
        (gl::IndexBuffer::~IndexBuffer):
        (gl::IndexBuffer::getBuffer):
        (gl::IndexBuffer::unmap):
        (gl::StreamingIndexBuffer::StreamingIndexBuffer):
        (gl::StreamingIndexBuffer::~StreamingIndexBuffer):
        (gl::StreamingIndexBuffer::map):
        (gl::StreamingIndexBuffer::reserveSpace):
        (gl::StaticIndexBuffer::StaticIndexBuffer):
        (gl::StaticIndexBuffer::~StaticIndexBuffer):
        (gl::StaticIndexBuffer::map):
        (gl::StaticIndexBuffer::reserveSpace):
        (gl::StaticIndexBuffer::lookupType):
        (gl::StaticIndexBuffer::lookupRange):
        (gl::StaticIndexBuffer::addRange):
        * src/libGLESv2/IndexDataManager.h: Added.
        (gl::IndexBuffer::size):
        * src/libGLESv2/Program.cpp:
        (gl::Program::getSemanticIndex):
        (gl::Program::getSamplerMapping):
        (gl::Program::getSamplerTextureType):
        (gl::Program::compileToBinary):
        (gl::Program::packVaryings):
        (gl::Program::linkVaryings):
        (gl::Program::link):
        (gl::Program::linkUniforms):
        (gl::Program::defineUniform):
        (gl::Program::applyUniform1iv):
        (gl::Program::appendToInfoLogSanitized):
        (gl::Program::unlink):
        (gl::Program::getActiveUniformMaxLength):
        (gl::Program::validate):
        (gl::Program::validateSamplers):
        * src/libGLESv2/Program.h:
        * src/libGLESv2/Renderbuffer.cpp:
        (gl::Renderbuffer::getWidth):
        (gl::Renderbuffer::getHeight):
        (gl::Renderbuffer::getInternalFormat):
        (gl::Renderbuffer::getRedSize):
        (gl::Renderbuffer::getGreenSize):
        (gl::Renderbuffer::getBlueSize):
        (gl::Renderbuffer::getAlphaSize):
        (gl::Renderbuffer::getDepthSize):
        (gl::Renderbuffer::getStencilSize):
        (gl::Renderbuffer::getSamples):
        (gl::RenderbufferStorage::RenderbufferStorage):
        (gl::RenderbufferStorage::getWidth):
        (gl::RenderbufferStorage::getHeight):
        (gl::RenderbufferStorage::getInternalFormat):
        (gl::RenderbufferStorage::getRedSize):
        (gl::RenderbufferStorage::getGreenSize):
        (gl::RenderbufferStorage::getBlueSize):
        (gl::RenderbufferStorage::getAlphaSize):
        (gl::RenderbufferStorage::getDepthSize):
        (gl::RenderbufferStorage::getStencilSize):
        (gl::RenderbufferStorage::getD3DFormat):
        (gl::Colorbuffer::Colorbuffer):
        (gl::Colorbuffer::getWidth):
        (gl::Colorbuffer::getHeight):
        (gl::Colorbuffer::getInternalFormat):
        (gl::Colorbuffer::getType):
        (gl::Colorbuffer::getD3DFormat):
        (gl::Colorbuffer::isColorbuffer):
        (gl::Colorbuffer::getRenderTarget):
        (gl::DepthStencilbuffer::DepthStencilbuffer):
        (gl::Depthbuffer::Depthbuffer):
        (gl::Stencilbuffer::Stencilbuffer):
        * src/libGLESv2/Renderbuffer.h:
        * src/libGLESv2/ResourceManager.cpp:
        (gl::ResourceManager::createBuffer):
        (gl::ResourceManager::createShader):
        (gl::ResourceManager::createProgram):
        (gl::ResourceManager::createTexture):
        (gl::ResourceManager::createRenderbuffer):
        (gl::ResourceManager::deleteBuffer):
        (gl::ResourceManager::deleteShader):
        (gl::ResourceManager::deleteProgram):
        (gl::ResourceManager::deleteTexture):
        (gl::ResourceManager::deleteRenderbuffer):
        (gl::ResourceManager::checkTextureAllocation):
        * src/libGLESv2/ResourceManager.h:
        * src/libGLESv2/Shader.cpp:
        (gl::Shader::Shader):
        (gl::Shader::compileToHLSL):
        * src/libGLESv2/Shader.h:
        * src/libGLESv2/Texture.cpp:
        (gl::Texture::Image::Image):
        (gl::Texture::Image::~Image):
        (gl::Texture::Image::isRenderable):
        (gl::Texture::Image::getD3DFormat):
        (gl::Texture::Texture):
        (gl::Texture::setMinFilter):
        (gl::Texture::setMagFilter):
        (gl::Texture::setWrapS):
        (gl::Texture::setWrapT):
        (gl::Texture::loadImageData):
        (gl::Texture::loadAlphaImageData):
        (gl::Texture::loadAlphaFloatImageData):
        (gl::Texture::loadAlphaHalfFloatImageData):
        (gl::Texture::loadLuminanceImageData):
        (gl::Texture::loadLuminanceFloatImageData):
        (gl::Texture::loadLuminanceHalfFloatImageData):
        (gl::Texture::loadLuminanceAlphaImageData):
        (gl::Texture::loadLuminanceAlphaFloatImageData):
        (gl::Texture::loadLuminanceAlphaHalfFloatImageData):
        (gl::Texture::loadRGBUByteImageData):
        (gl::Texture::loadRGB565ImageData):
        (gl::Texture::loadRGBFloatImageData):
        (gl::Texture::loadRGBHalfFloatImageData):
        (gl::Texture::loadRGBAUByteImageDataSSE2):
        (gl::Texture::loadRGBAUByteImageData):
        (gl::Texture::loadRGBA4444ImageData):
        (gl::Texture::loadRGBA5551ImageData):
        (gl::Texture::loadRGBAFloatImageData):
        (gl::Texture::loadRGBAHalfFloatImageData):
        (gl::Texture::loadBGRAImageData):
        (gl::Texture::loadCompressedImageData):
        (gl::Texture::createSurface):
        (gl::Texture::setImage):
        (gl::Texture::setCompressedImage):
        (gl::Texture::subImage):
        (gl::Texture::subImageCompressed):
        (gl::Texture::copyToImage):
        (gl::Texture::getTexture):
        (gl::Texture::isDirtyParameter):
        (gl::Texture::isDirtyImage):
        (gl::Texture::resetDirty):
        (gl::Texture::getSerial):
        (gl::Texture::creationLevels):
        (gl::Texture::levelCount):
        (gl::Texture::issueSerial):
        (gl::Texture2D::Texture2D):
        (gl::Texture2D::~Texture2D):
        (gl::Texture2D::getWidth):
        (gl::Texture2D::getHeight):
        (gl::Texture2D::getInternalFormat):
        (gl::Texture2D::getType):
        (gl::Texture2D::getD3DFormat):
        (gl::Texture2D::redefineTexture):
        (gl::Texture2D::setImage):
        (gl::Texture2D::bindTexImage):
        (gl::Texture2D::releaseTexImage):
        (gl::Texture2D::setCompressedImage):
        (gl::Texture2D::commitRect):
        (gl::Texture2D::copyImage):
        (gl::Texture2D::copySubImage):
        (gl::Texture2D::isComplete):
        (gl::Texture2D::isCompressed):
        (gl::Texture2D::getBaseTexture):
        (gl::Texture2D::createTexture):
        (gl::Texture2D::updateTexture):
        (gl::Texture2D::convertToRenderTarget):
        (gl::Texture2D::generateMipmaps):
        (gl::Texture2D::getRenderbuffer):
        (gl::Texture2D::getRenderTarget):
        (gl::TextureCubeMap::getWidth):
        (gl::TextureCubeMap::getHeight):
        (gl::TextureCubeMap::getInternalFormat):
        (gl::TextureCubeMap::getType):
        (gl::TextureCubeMap::getD3DFormat):
        (gl::TextureCubeMap::setImagePosX):
        (gl::TextureCubeMap::setImageNegX):
        (gl::TextureCubeMap::setImagePosY):
        (gl::TextureCubeMap::setImageNegY):
        (gl::TextureCubeMap::setImagePosZ):
        (gl::TextureCubeMap::setImageNegZ):
        (gl::TextureCubeMap::setCompressedImage):
        (gl::TextureCubeMap::commitRect):
        (gl::TextureCubeMap::isComplete):
        (gl::TextureCubeMap::isCompressed):
        (gl::TextureCubeMap::getBaseTexture):
        (gl::TextureCubeMap::createTexture):
        (gl::TextureCubeMap::updateTexture):
        (gl::TextureCubeMap::convertToRenderTarget):
        (gl::TextureCubeMap::setImage):
        (gl::TextureCubeMap::redefineTexture):
        (gl::TextureCubeMap::copyImage):
        (gl::TextureCubeMap::getCubeMapSurface):
        (gl::TextureCubeMap::copySubImage):
        (gl::TextureCubeMap::generateMipmaps):
        (gl::TextureCubeMap::getRenderbuffer):
        (gl::TextureCubeMap::getRenderTarget):
        * src/libGLESv2/Texture.h:
        * src/libGLESv2/VertexDataManager.cpp: Added.
        (gl::VertexDataManager::VertexDataManager):
        (gl::VertexDataManager::~VertexDataManager):
        (gl::VertexDataManager::writeAttributeData):
        (gl::VertexDataManager::prepareVertexData):
        (gl::VertexDataManager::spaceRequired):
        (gl::VertexDataManager::checkVertexCaps):
        (gl::VertexDataManager::typeIndex):
        (gl::VertexBuffer::VertexBuffer):
        (gl::VertexBuffer::~VertexBuffer):
        (gl::VertexBuffer::unmap):
        (gl::VertexBuffer::getBuffer):
        (gl::ConstantVertexBuffer::ConstantVertexBuffer):
        (gl::ConstantVertexBuffer::~ConstantVertexBuffer):
        (gl::ArrayVertexBuffer::ArrayVertexBuffer):
        (gl::ArrayVertexBuffer::~ArrayVertexBuffer):
        (gl::ArrayVertexBuffer::addRequiredSpace):
        (gl::ArrayVertexBuffer::addRequiredSpaceFor):
        (gl::StreamingVertexBuffer::StreamingVertexBuffer):
        (gl::StreamingVertexBuffer::~StreamingVertexBuffer):
        (gl::StreamingVertexBuffer::map):
        (gl::StreamingVertexBuffer::reserveRequiredSpace):
        (gl::StaticVertexBuffer::StaticVertexBuffer):
        (gl::StaticVertexBuffer::~StaticVertexBuffer):
        (gl::StaticVertexBuffer::map):
        (gl::StaticVertexBuffer::reserveRequiredSpace):
        (gl::StaticVertexBuffer::lookupAttribute):
        (gl::VertexDataManager::formatConverter):
        * src/libGLESv2/VertexDataManager.h: Added.
        (gl::ArrayVertexBuffer::size):
        (gl::VertexDataManager::dirtyCurrentValue):
        * src/libGLESv2/libGLESv2.cpp:
        (validImageSize):
        (Extension::glBindTexImage):
        * src/libGLESv2/libGLESv2.def:
        * src/libGLESv2/libGLESv2.rc: Added.
        * src/libGLESv2/libGLESv2.vcproj:
        * src/libGLESv2/main.cpp:
        (error):
        * src/libGLESv2/mathutil.h:
        (gl::clamp):
        (gl::clamp01):
        (gl::transformPixelRect):
        (gl::transformPixelYOffset):
        (gl::adjustWinding):
        (gl::supportsSSE2):
        * src/libGLESv2/resource.h: Added.
        * src/libGLESv2/utilities.cpp:
        (gl::ComputeCompressedPitch):
        (es2dx::ConvertCubeFace):
        (es2dx::ConvertPrimitiveType):
        (es2dx::ConvertRenderbufferFormat):
        (es2dx::GetMultisampleTypeFromSamples):
        (dx2es::GetStencilSize):
        (dx2es::GetAlphaSize):
        (dx2es::GetRedSize):
        (dx2es::GetGreenSize):
        (dx2es::GetBlueSize):
        (dx2es::GetDepthSize):
        (getTempPath):
        (writeFile):
        * src/libGLESv2/utilities.h:
        * src/libGLESv2/vertexconversion.h: Added.
        (gl::Identity::convert):
        (gl::Cast::convert):
        (gl::Normalize::convert):
        (gl::FixedToFloat::convert):
        (gl::SimpleDefaultValues::zero):
        (gl::SimpleDefaultValues::one):
        (gl::NormalizedDefaultValues::zero):
        (gl::NormalizedDefaultValues::one):
        (gl::VertexDataConverter::convertArray):
        (gl::VertexDataConverter::pointerAddBytes):
        (gl::VertexDataConverter::copyComponent):

2011-05-24  David Kilzer  <ddkilzer@apple.com>

        Part 2 of 2: <http://webkit.org/b/60805> Enable -Wnewline-eof on ANGLE

        Reviewed by Adam Roben.

        * Configurations/Base.xcconfig:
        (GCC_WARN_ABOUT_MISSING_NEWLINE): Added. Set to YES.

2011-05-23  David Kilzer  <ddkilzer@apple.com>

        Part 1 of 2: <http://webkit.org/b/60805> Enable -Wnewline-eof on ANGLE

        Merge ANGLE upstream commit r653 for Issue 154.

        * src/compiler/PoolAlloc.h: Added newline to end of file.
        * src/compiler/ShHandle.h: Ditto.
        * src/libEGL/Display.cpp: Ditto.

2011-05-16  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/60913> C++ exceptions should not be enabled when building with llvm-gcc-4.2
        <rdar://problem/9446430>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Fixed typo.

2011-05-04  David Kilzer  <ddkilzer@apple.com>

        Part 2 of 2: <http://webkit.org/b/56337> Enable -Werror on ANGLE

        Reviewed by Adam Barth.

        * Configurations/Base.xcconfig:
        (GCC_TREAT_WARNINGS_AS_ERRORS): Set to YES.

2011-05-04  David Kilzer  <ddkilzer@apple.com>

        Part 1 of 2: <http://webkit.org/b/56337> Enable -Werror on ANGLE

        Merge ANGLE upstream commits r572, r573, r574, r575.

        This unblocks enabling -Werror on ANGLE.  Since all changes are
        in the upstream repository, they may be safely overwritten
        during the next ANGLE update.

        * src/compiler/ConstantUnion.h:
        (ConstantUnion::operator==): Added a default case.
        * src/compiler/Intermediate.cpp:
        (TIntermBinary::promote): Added parentheses.
        * src/compiler/ParseHelper.cpp:
        (TParseContext::precisionErrorCheck): Added a default case.
        * src/compiler/PoolAlloc.cpp:
        (TAllocation::checkGuardBlock): Changed '%u' to '%lu' for size_t
        variable.  Put for loop inside #ifdef GUARD_BLOCKS/#endif macros
        to fix tautological-compare warning.
        (TAllocation::checkAllocList): Added newline to end of file.

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * Configurations/CompilerVersion.xcconfig:

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Choose the compiler based on the Xcode version for Snow Leopard debug builds.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig: Added.

2011-03-17  Jeff Miller  <jeffm@apple.com>

        Use a consistent set of file patterns in the svn:ignore property for all .xcodeproj directories, specifically:
        
        *.mode*
        *.pbxuser
        *.perspective*
        project.xcworkspace
        xcuserdata

        * ANGLE.xcodeproj: Modified property svn:ignore.
        * src/build_angle.xcodeproj: Modified property svn:ignore.

2011-01-18  Kenneth Russell  <kbr@google.com>

        Unreviewed, Leopard build fix. Remove flex/bison targets for GLSL
        grammar because the generated sources are already checked in.

        * ANGLE.xcodeproj/project.pbxproj:
        * src/build_angle.xcodeproj/project.pbxproj:

2011-01-18  Kenneth Russell  <kbr@google.com>

        Unreviewed, release build fix. Explicitly cast away const.

        * src/compiler/preprocessor/scanner.c:
        (ScanFromString):

2011-01-18  Ben Vanik  <ben.vanik@gmail.com>

        Reviewed by Kenneth Russell.

        Updating ANGLE in WebKit to r533.
        https://bugs.webkit.org/show_bug.cgi?id=47194

        * ANGLE.xcodeproj/project.pbxproj:
        * include/GLSLANG/ShaderLang.h:
        * src/common/debug.cpp:
        (gl::trace):
        * src/common/debug.h:
        * src/compiler/CodeGenGLSL.cpp:
        (ConstructCompiler):
        * src/compiler/CodeGenHLSL.cpp:
        (ConstructCompiler):
        * src/compiler/Common.h:
        (EncodeSourceLoc):
        (DecodeSourceLoc):
        * src/compiler/Compiler.cpp: Added.
        (TShHandleBase::TShHandleBase):
        (TShHandleBase::~TShHandleBase):
        (TCompiler::TCompiler):
        (TCompiler::~TCompiler):
        (TCompiler::Init):
        (TCompiler::compile):
        (TCompiler::InitBuiltInSymbolTable):
        (TCompiler::clearResults):
        (TCompiler::validateLimitations):
        (TCompiler::collectAttribsUniforms):
        * src/compiler/ExtensionBehavior.h: Added.
        * src/compiler/InfoSink.cpp:
        (TInfoSinkBase::location):
        * src/compiler/InfoSink.h:
        (TInfoSinkBase::size):
        * src/compiler/Initialize.cpp:
        (BuiltInFunctionsCommon):
        (BuiltInFunctionsVertex):
        (BuiltInFunctionsFragment):
        (StandardUniforms):
        (DefaultPrecisionVertex):
        (DefaultPrecisionFragment):
        (BuiltInConstants):
        (TBuiltIns::initialize):
        (IdentifyBuiltIns):
        (InitExtensionBehavior):
        * src/compiler/Initialize.h:
        * src/compiler/IntermTraverse.cpp:
        (TIntermLoop::traverse):
        * src/compiler/Intermediate.cpp:
        (getOperatorString):
        (TIntermediate::addBinaryMath):
        (TIntermediate::addLoop):
        (TIntermediate::postProcess):
        (TIntermBinary::promote):
        * src/compiler/OutputGLSL.cpp:
        (TOutputGLSL::visitUnary):
        (TOutputGLSL::visitLoop):
        * src/compiler/OutputHLSL.cpp:
        (sh::OutputHLSL::OutputHLSL):
        (sh::OutputHLSL::header):
        (sh::OutputHLSL::visitBinary):
        (sh::OutputHLSL::visitUnary):
        (sh::OutputHLSL::visitAggregate):
        (sh::OutputHLSL::visitLoop):
        (sh::OutputHLSL::handleExcessiveLoop):
        (sh::OutputHLSL::argumentString):
        * src/compiler/OutputHLSL.h:
        * src/compiler/ParseHelper.cpp:
        (ReportInfo):
        (DefineExtensionMacros):
        (TParseContext::error):
        (TParseContext::warning):
        (TParseContext::reservedErrorCheck):
        (TParseContext::constructorErrorCheck):
        (TParseContext::arrayQualifierErrorCheck):
        (TParseContext::extensionErrorCheck):
        (TParseContext::areAllChildConst):
        (PaParseStrings):
        * src/compiler/ParseHelper.h:
        (TParseContext::TParseContext):
        * src/compiler/PoolAlloc.cpp:
        (InitializeGlobalPools):
        (FreeGlobalPools):
        (SetGlobalPoolAllocator):
        (TPoolAllocator::TPoolAllocator):
        (TPoolAllocator::~TPoolAllocator):
        (TAllocation::checkAllocList):
        * src/compiler/PoolAlloc.h:
        * src/compiler/SearchSymbol.cpp: Added.
        (sh::SearchSymbol::SearchSymbol):
        (sh::SearchSymbol::traverse):
        (sh::SearchSymbol::visitSymbol):
        (sh::SearchSymbol::foundMatch):
        * src/compiler/SearchSymbol.h: Added.
        * src/compiler/ShHandle.h:
        (TCompiler::getAsCompiler):
        (TCompiler::getInfoSink):
        (TCompiler::getAttribs):
        (TCompiler::getUniforms):
        (TCompiler::getShaderType):
        (TCompiler::getShaderSpec):
        * src/compiler/ShaderLang.cpp:
        (getVariableMaxLength):
        (getVariableInfo):
        (ShInitBuiltInResources):
        (ShConstructCompiler):
        (ShCompile):
        (ShGetInfo):
        (ShGetInfoLog):
        (ShGetObjectCode):
        (ShGetActiveAttrib):
        (ShGetActiveUniform):
        * src/compiler/SymbolTable.cpp:
        (TSymbolTableLevel::relateToExtension):
        * src/compiler/SymbolTable.h:
        (TVariable::shareConstPointer):
        (TFunction::relateToExtension):
        (TFunction::getExtension):
        (TFunction::getParamCount):
        (TFunction::getParam):
        (TSymbolTable::getGlobalLevel):
        (TSymbolTable::relateToOperator):
        (TSymbolTable::relateToExtension):
        * src/compiler/TranslatorGLSL.cpp:
        (writeVersion):
        (TranslatorGLSL::TranslatorGLSL):
        (TranslatorGLSL::translate):
        * src/compiler/TranslatorGLSL.h:
        * src/compiler/TranslatorHLSL.cpp:
        (TranslatorHLSL::TranslatorHLSL):
        (TranslatorHLSL::translate):
        * src/compiler/TranslatorHLSL.h:
        * src/compiler/Types.h:
        (TType::TType):
        * src/compiler/UnfoldSelect.cpp:
        (sh::UnfoldSelect::visitSelection):
        * src/compiler/UnfoldSelect.h:
        * src/compiler/ValidateLimitations.cpp: Added.
        (ValidateLimitations::ValidateLimitations):
        (ValidateLimitations::visitSymbol):
        (ValidateLimitations::visitConstantUnion):
        (ValidateLimitations::visitBinary):
        (ValidateLimitations::visitUnary):
        (ValidateLimitations::visitSelection):
        (ValidateLimitations::visitAggregate):
        (ValidateLimitations::visitLoop):
        (ValidateLimitations::visitBranch):
        (ValidateLimitations::error):
        (ValidateLimitations::withinLoopBody):
        (ValidateLimitations::isLoopIndex):
        (ValidateLimitations::validateLoopType):
        (ValidateLimitations::validateForLoopHeader):
        (ValidateLimitations::validateForLoopInit):
        (ValidateLimitations::validateForLoopCond):
        (ValidateLimitations::validateForLoopExpr):
        (ValidateLimitations::validateFunctionCall):
        (ValidateLimitations::validateOperation):
        (ValidateLimitations::isConstExpr):
        (ValidateLimitations::isConstIndexExpr):
        (ValidateLimitations::validateIndexing):
        * src/compiler/ValidateLimitations.h: Added.
        (ValidateLimitations::numErrors):
        * src/compiler/VariableInfo.cpp: Added.
        (arrayBrackets):
        (getVariableDataType):
        (getVariableInfo):
        (getBuiltInVariableInfo):
        (getUserDefinedVariableInfo):
        (CollectAttribsUniforms::CollectAttribsUniforms):
        (CollectAttribsUniforms::visitSymbol):
        (CollectAttribsUniforms::visitConstantUnion):
        (CollectAttribsUniforms::visitBinary):
        (CollectAttribsUniforms::visitUnary):
        (CollectAttribsUniforms::visitSelection):
        (CollectAttribsUniforms::visitAggregate):
        (CollectAttribsUniforms::visitLoop):
        (CollectAttribsUniforms::visitBranch):
        * src/compiler/VariableInfo.h: Added.
        * src/compiler/VersionGLSL.cpp: Added.
        (TVersionGLSL::TVersionGLSL):
        (TVersionGLSL::visitSymbol):
        (TVersionGLSL::visitConstantUnion):
        (TVersionGLSL::visitBinary):
        (TVersionGLSL::visitUnary):
        (TVersionGLSL::visitSelection):
        (TVersionGLSL::visitAggregate):
        (TVersionGLSL::visitLoop):
        (TVersionGLSL::visitBranch):
        (TVersionGLSL::updateVersion):
        * src/compiler/VersionGLSL.h: Added.
        (TVersionGLSL::getVersion):
        * src/compiler/generate_glslang_lexer.sh: Added.
        * src/compiler/generate_glslang_parser.sh: Added.
        * src/compiler/glslang.h: Added.
        * src/compiler/glslang.l:
        * src/compiler/glslang.y:
        * src/compiler/glslang_lex.cpp: Added.
        (yy_get_next_buffer):
        (yy_get_previous_state):
        (yy_try_NUL_trans):
        (input):
        (yyrestart):
        (yy_switch_to_buffer):
        (yy_load_buffer_state):
        (yy_create_buffer):
        (yy_delete_buffer):
        (yy_init_buffer):
        (yy_flush_buffer):
        (yypush_buffer_state):
        (yypop_buffer_state):
        (yyensure_buffer_stack):
        (yy_scan_buffer):
        (yy_scan_string):
        (yy_scan_bytes):
        (yy_push_state):
        (yy_pop_state):
        (yy_top_state):
        (yy_fatal_error):
        (yyget_extra):
        (yyget_lineno):
        (yyget_column):
        (yyget_in):
        (yyget_out):
        (yyget_leng):
        (yyget_text):
        (yyset_extra):
        (yyset_lineno):
        (yyset_column):
        (yyset_in):
        (yyset_out):
        (yyget_debug):
        (yyset_debug):
        (yyget_lval):
        (yyset_lval):
        (yylex_init):
        (yylex_init_extra):
        (yy_init_globals):
        (yylex_destroy):
        (yy_flex_strncpy):
        (yy_flex_strlen):
        (yyalloc):
        (yyrealloc):
        (yyfree):
        (string_input):
        (check_type):
        (reserved_word):
        (yyerror):
        (glslang_initialize):
        (glslang_finalize):
        (glslang_scan):
        * src/compiler/glslang_tab.cpp: Added.
        (yytnamerr):
        (yysyntax_error):
        (glslang_parse):
        * src/compiler/glslang_tab.h: Added.
        * src/compiler/intermOut.cpp:
        (TOutputTraverser::TOutputTraverser):
        (OutputTreeText):
        (TOutputTraverser::visitSymbol):
        (TOutputTraverser::visitBinary):
        (TOutputTraverser::visitUnary):
        (TOutputTraverser::visitAggregate):
        (TOutputTraverser::visitSelection):
        (TOutputTraverser::visitConstantUnion):
        (TOutputTraverser::visitLoop):
        (TOutputTraverser::visitBranch):
        (TIntermediate::outputTree):
        * src/compiler/intermediate.h:
        (TIntermLoop::TIntermLoop):
        (TIntermLoop::getType):
        (TIntermLoop::getInit):
        (TIntermLoop::getCondition):
        (TIntermLoop::getExpression):
        (TIntermLoop::getBody):
        * src/compiler/localintermediate.h:
        * src/compiler/osinclude.h:
        (OS_GetTLSValue):
        * src/compiler/ossource_nspr.cpp: Added.
        (OS_AllocTLSIndex):
        (OS_SetTLSValue):
        (OS_FreeTLSIndex):
        * src/compiler/preprocessor/compile.h:
        * src/compiler/preprocessor/cpp.c:
        (CPPdefine):
        (CPPelse):
        (CPPif):
        (CPPifdef):
        (CPPerror):
        (CPPextension):
        (readCPPline):
        * src/compiler/preprocessor/preprocess.h:
        * src/compiler/preprocessor/scanner.c:
        (str_getch):
        (str_ungetch):
        (ScanFromString):
        (lFloatConst):
        (byte_scan):
        (yylex_CPP):
        (check_EOF):
        * src/compiler/preprocessor/scanner.h:
        * src/compiler/preprocessor/tokens.c:
        (RecordToken):
        (ReadToken):
        * src/compiler/tools: Removed.
        * src/compiler/unistd.h: Removed.
        * src/compiler/util.cpp: Added.
        (atof_dot):
        * src/compiler/util.h: Added.
        * src/libEGL/Config.cpp:
        (egl::Config::set):
        * src/libEGL/Display.cpp:
        (egl::Display::Display):
        (egl::Display::initialize):
        (egl::Display::terminate):
        (egl::Display::createDevice):
        (egl::Display::resetDevice):
        (egl::Display::createContext):
        (egl::Display::destroyContext):
        (egl::Display::getMinSwapInterval):
        (egl::Display::getMaxSwapInterval):
        (egl::Display::getDevice):
        (egl::Display::getFloatTextureSupport):
        (egl::Display::getHalfFloatTextureSupport):
        (egl::Display::getLuminanceTextureSupport):
        (egl::Display::getLuminanceAlphaTextureSupport):
        (egl::Display::getBufferPool):
        (egl::Display::getEventQuerySupport):
        (egl::Display::getDefaultPresentParameters):
        * src/libEGL/Display.h:
        * src/libEGL/Surface.cpp:
        (egl::Surface::Surface):
        (egl::Surface::~Surface):
        (egl::Surface::release):
        (egl::Surface::resetSwapChain):
        (egl::Surface::writeRecordableFlipState):
        (egl::Surface::restoreState):
        (egl::SurfaceWindowProc):
        (egl::Surface::subclassWindow):
        (egl::Surface::unsubclassWindow):
        (egl::Surface::checkForOutOfDateSwapChain):
        (egl::Surface::convertInterval):
        (egl::Surface::swap):
        (egl::Surface::getRenderTarget):
        (egl::Surface::setSwapInterval):
        * src/libEGL/Surface.h:
        * src/libEGL/libEGL.cpp:
        * src/libGLESv2/Blit.cpp:
        (gl::Blit::copySurfaceToTexture):
        (gl::Blit::setCommonBlitState):
        * src/libGLESv2/Buffer.cpp:
        (gl::Buffer::Buffer):
        (gl::Buffer::~Buffer):
        (gl::Buffer::bufferData):
        (gl::Buffer::bufferSubData):
        (gl::Buffer::getVertexBuffer):
        (gl::Buffer::getIndexBuffer):
        (gl::Buffer::invalidateStaticData):
        * src/libGLESv2/Buffer.h:
        * src/libGLESv2/Context.cpp:
        (gl::Context::Context):
        (gl::Context::~Context):
        (gl::Context::makeCurrent):
        (gl::Context::markAllStateDirty):
        (gl::Context::setFragmentShaderDerivativeHint):
        (gl::Context::setEnableVertexAttribArray):
        (gl::Context::getVertexAttribState):
        (gl::Context::getVertexAttributes):
        (gl::Context::createFence):
        (gl::Context::deleteFence):
        (gl::Context::bindTexture2D):
        (gl::Context::bindTextureCubeMap):
        (gl::Context::getFence):
        (gl::Context::getTexture2D):
        (gl::Context::getTextureCubeMap):
        (gl::Context::getSamplerTexture):
        (gl::Context::getBooleanv):
        (gl::Context::getIntegerv):
        (gl::Context::getQueryParameterInfo):
        (gl::Context::applyRenderTarget):
        (gl::Context::applyState):
        (gl::Context::lookupAttributeMapping):
        (gl::Context::applyVertexBuffer):
        (gl::Context::applyIndexBuffer):
        (gl::Context::readPixels):
        (gl::Context::clear):
        (gl::Context::drawArrays):
        (gl::Context::drawElements):
        (gl::Context::finish):
        (gl::Context::drawClosingLine):
        (gl::Context::getMaximumVaryingVectors):
        (gl::Context::getMaximumFragmentUniformVectors):
        (gl::Context::supportsEventQueries):
        (gl::Context::supportsFloatTextures):
        (gl::Context::supportsFloatLinearFilter):
        (gl::Context::supportsFloatRenderableTextures):
        (gl::Context::supportsHalfFloatTextures):
        (gl::Context::supportsHalfFloatLinearFilter):
        (gl::Context::supportsHalfFloatRenderableTextures):
        (gl::Context::getMaximumRenderbufferDimension):
        (gl::Context::getMaximumTextureDimension):
        (gl::Context::getMaximumCubeTextureDimension):
        (gl::Context::getMaximumTextureLevel):
        (gl::Context::supportsLuminanceTextures):
        (gl::Context::supportsLuminanceAlphaTextures):
        (gl::Context::supports32bitIndices):
        (gl::Context::getIncompleteTexture):
        (gl::Context::setVertexAttrib):
        (gl::Context::initExtensionString):
        (gl::Context::blitFramebuffer):
        * src/libGLESv2/Context.h:
        (gl::VertexAttribute::VertexAttribute):
        (gl::VertexAttribute::typeSize):
        (gl::VertexAttribute::stride):
        * src/libGLESv2/Fence.cpp: Added.
        (gl::Fence::Fence):
        (gl::Fence::~Fence):
        (gl::Fence::isFence):
        (gl::Fence::setFence):
        (gl::Fence::testFence):
        (gl::Fence::finishFence):
        (gl::Fence::getFenceiv):
        * src/libGLESv2/Fence.h: Added.
        * src/libGLESv2/Framebuffer.cpp:
        (gl::Framebuffer::completeness):
        (gl::DefaultFramebuffer::DefaultFramebuffer):
        (gl::DefaultFramebuffer::completeness):
        * src/libGLESv2/Program.cpp:
        (gl::Program::Program):
        (gl::Program::getSamplerMapping):
        (gl::Program::getUniformLocation):
        (gl::Program::setUniform1iv):
        (gl::Program::applyUniforms):
        (gl::Program::packVaryings):
        (gl::Program::linkVaryings):
        (gl::Program::link):
        (gl::Program::defineUniform):
        (gl::Program::createUniform):
        (gl::Program::applyUniform1iv):
        (gl::Program::resetInfoLog):
        (gl::Program::unlink):
        (gl::Program::getActiveAttribute):
        (gl::Program::getActiveUniform):
        (gl::Program::getDxDepthRangeLocation):
        * src/libGLESv2/Program.h:
        * src/libGLESv2/RefCountObject.cpp:
        (gl::RefCountObject::~RefCountObject):
        * src/libGLESv2/Renderbuffer.cpp:
        (gl::RenderbufferStorage::RenderbufferStorage):
        (gl::RenderbufferStorage::isFloatingPoint):
        (gl::Colorbuffer::Colorbuffer):
        (gl::DepthStencilbuffer::DepthStencilbuffer):
        * src/libGLESv2/Renderbuffer.h:
        * src/libGLESv2/Shader.cpp:
        (gl::Shader::Shader):
        (gl::Shader::parseVaryings):
        (gl::Shader::compileToHLSL):
        (gl::VertexShader::parseAttributes):
        * src/libGLESv2/Texture.cpp:
        (gl::Texture::Texture):
        (gl::Texture::isFloatingPoint):
        (gl::Texture::isRenderableFormat):
        (gl::Texture::selectFormat):
        (gl::Texture::loadImageData):
        (gl::Texture::loadAlphaFloatImageData):
        (gl::Texture::loadAlphaHalfFloatImageData):
        (gl::Texture::loadLuminanceImageData):
        (gl::Texture::loadLuminanceFloatImageData):
        (gl::Texture::loadLuminanceHalfFloatImageData):
        (gl::Texture::loadLuminanceAlphaImageData):
        (gl::Texture::loadLuminanceAlphaFloatImageData):
        (gl::Texture::loadLuminanceAlphaHalfFloatImageData):
        (gl::Texture::loadRGBFloatImageData):
        (gl::Texture::loadRGBHalfFloatImageData):
        (gl::Texture::loadRGBAFloatImageData):
        (gl::Texture::loadRGBAHalfFloatImageData):
        (gl::Texture::createSurface):
        (gl::Texture::setImage):
        (gl::Texture::setCompressedImage):
        (gl::Texture::subImage):
        (gl::Texture::subImageCompressed):
        (gl::Texture::copyNonRenderable):
        (gl::Texture::getD3DFormat):
        (gl::Texture::isRenderable):
        (gl::Texture2D::Texture2D):
        (gl::Texture2D::~Texture2D):
        (gl::Texture2D::redefineTexture):
        (gl::Texture2D::setImage):
        (gl::Texture2D::setCompressedImage):
        (gl::Texture2D::copyImage):
        (gl::Texture2D::copySubImage):
        (gl::Texture2D::isComplete):
        (gl::Texture2D::createTexture):
        (gl::Texture2D::convertToRenderTarget):
        (gl::Texture2D::generateMipmaps):
        (gl::Texture2D::getColorbuffer):
        (gl::Texture2D::getRenderTarget):
        (gl::TextureCubeMap::TextureCubeMap):
        (gl::TextureCubeMap::~TextureCubeMap):
        (gl::TextureCubeMap::subImage):
        (gl::TextureCubeMap::subImageCompressed):
        (gl::TextureCubeMap::isComplete):
        (gl::TextureCubeMap::createTexture):
        (gl::TextureCubeMap::convertToRenderTarget):
        (gl::TextureCubeMap::redefineTexture):
        (gl::TextureCubeMap::copyImage):
        (gl::TextureCubeMap::copySubImage):
        (gl::TextureCubeMap::generateMipmaps):
        (gl::TextureCubeMap::getColorbuffer):
        (gl::TextureCubeMap::getRenderTarget):
        (gl::Texture::TextureColorbufferProxy::TextureColorbufferProxy):
        (gl::Texture::TextureColorbufferProxy::isFloatingPoint):
        * src/libGLESv2/Texture.h:
        * src/libGLESv2/geometry/IndexDataManager.cpp:
        (gl::IndexDataManager::IndexDataManager):
        (gl::IndexDataManager::~IndexDataManager):
        (gl::convertIndices):
        (gl::computeRange):
        (gl::IndexDataManager::prepareIndexData):
        (gl::IndexDataManager::indexSize):
        (gl::IndexDataManager::typeSize):
        (gl::IndexBuffer::IndexBuffer):
        (gl::IndexBuffer::~IndexBuffer):
        (gl::IndexBuffer::getBuffer):
        (gl::IndexBuffer::unmap):
        (gl::StreamingIndexBuffer::StreamingIndexBuffer):
        (gl::StreamingIndexBuffer::~StreamingIndexBuffer):
        (gl::StreamingIndexBuffer::map):
        (gl::StreamingIndexBuffer::reserveSpace):
        (gl::StaticIndexBuffer::StaticIndexBuffer):
        (gl::StaticIndexBuffer::~StaticIndexBuffer):
        (gl::StaticIndexBuffer::map):
        (gl::StaticIndexBuffer::reserveSpace):
        (gl::StaticIndexBuffer::lookupType):
        (gl::StaticIndexBuffer::lookupRange):
        (gl::StaticIndexBuffer::addRange):
        * src/libGLESv2/geometry/IndexDataManager.h:
        (gl::IndexBuffer::size):
        * src/libGLESv2/geometry/VertexDataManager.cpp:
        (gl::VertexDataManager::VertexDataManager):
        (gl::VertexDataManager::~VertexDataManager):
        (gl::VertexDataManager::writeAttributeData):
        (gl::VertexDataManager::prepareVertexData):
        (gl::VertexDataManager::spaceRequired):
        (gl::VertexDataManager::checkVertexCaps):
        (gl::VertexDataManager::typeIndex):
        (gl::VertexDataManager::setupAttributes):
        (gl::VertexBuffer::VertexBuffer):
        (gl::VertexBuffer::~VertexBuffer):
        (gl::VertexBuffer::unmap):
        (gl::VertexBuffer::getBuffer):
        (gl::ConstantVertexBuffer::ConstantVertexBuffer):
        (gl::ConstantVertexBuffer::~ConstantVertexBuffer):
        (gl::ArrayVertexBuffer::ArrayVertexBuffer):
        (gl::ArrayVertexBuffer::~ArrayVertexBuffer):
        (gl::ArrayVertexBuffer::addRequiredSpace):
        (gl::ArrayVertexBuffer::addRequiredSpaceFor):
        (gl::StreamingVertexBuffer::StreamingVertexBuffer):
        (gl::StreamingVertexBuffer::~StreamingVertexBuffer):
        (gl::StreamingVertexBuffer::map):
        (gl::StreamingVertexBuffer::reserveRequiredSpace):
        (gl::StaticVertexBuffer::StaticVertexBuffer):
        (gl::StaticVertexBuffer::~StaticVertexBuffer):
        (gl::StaticVertexBuffer::map):
        (gl::StaticVertexBuffer::reserveRequiredSpace):
        (gl::StaticVertexBuffer::lookupAttribute):
        (gl::VertexDataManager::formatConverter):
        * src/libGLESv2/geometry/VertexDataManager.h:
        (gl::ArrayVertexBuffer::size):
        (gl::VertexDataManager::dirtyCurrentValue):
        * src/libGLESv2/geometry/backend.cpp: Removed.
        * src/libGLESv2/geometry/backend.h: Removed.
        * src/libGLESv2/geometry/dx9.cpp: Removed.
        * src/libGLESv2/geometry/dx9.h: Removed.
        * src/libGLESv2/libGLESv2.cpp:
        * src/libGLESv2/libGLESv2.def:
        * src/libGLESv2/libGLESv2.vcproj:
        * src/libGLESv2/utilities.cpp:
        (gl::UniformComponentCount):
        (gl::UniformComponentType):
        (gl::ComputePixelSize):
        (gl::CheckTextureFormatType):
        (gl::IsColorRenderable):
        (gl::IsDepthRenderable):
        (gl::IsStencilRenderable):
        (es2dx::GetAlphaSize):
        (es2dx::GetRedSize):
        (es2dx::GetGreenSize):
        (es2dx::GetBlueSize):
        (es2dx::GetDepthSize):
        (es2dx::ConvertPrimitiveType):
        (dx2es::ConvertBackBufferFormat):
        (dx2es::ConvertDepthStencilFormat):
        * src/libGLESv2/utilities.h:

2011-01-17  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        Update xcodeproj svn:ignore to include xcuserdata.

        * ANGLE.xcodeproj: Modified property svn:ignore.
        * src/build_angle.xcodeproj: Modified property svn:ignore.

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        vcproj changes can't be applied cleanly by the Windows EWS bot
        https://bugs.webkit.org/show_bug.cgi?id=50328

        * src/libEGL/libEGL.vcproj: Added property svn:eol-style.
        * src/libGLESv2/libGLESv2.vcproj: Added property svn:eol-style.

2010-11-03  Darin Adler  <darin@apple.com>

        Updated Xcode projects by opening them with Xcode 3.2.4.
        Updated svn:ignore for Xcode projects.

        * ANGLE.xcodeproj: Added property svn:ignore.
        * ANGLE.xcodeproj/project.pbxproj: Updated with Xcode 3.2.4.
        * src/build_angle.xcodeproj: Added property svn:ignore.
        * src/build_angle.xcodeproj/project.pbxproj: Updated with Xcode 3.2.4.

2010-09-01  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Roll ANGLE under webkit to r402
        https://bugs.webkit.org/show_bug.cgi?id=45004

        * ANGLE.xcodeproj/project.pbxproj:
        * include/GLES2/gl2ext.h:
        * include/GLSLANG/ResourceLimits.h: Removed.
        * include/GLSLANG/ShaderLang.h:
        * src/compiler/BaseTypes.h:
        (getPrecisionString):
        (getBasicString):
        (IsSampler):
        (getQualifierString):
        * src/compiler/Initialize.cpp:
        (BuiltInConstants):
        (IdentifyBuiltIns):
        * src/compiler/Initialize.h:
        * src/compiler/InitializeDll.cpp:
        (InitProcess):
        (DetachProcess):
        (InitThread):
        (DetachThread):
        * src/compiler/InitializeDll.h:
        * src/compiler/InitializeParseContext.h:
        * src/compiler/Intermediate.cpp:
        (GetHigherPrecision):
        (TIntermediate::addBinaryMath):
        (TIntermediate::setAggregateOperator):
        (TIntermediate::addComma):
        (TIntermediate::postProcess):
        (TIntermBinary::promote):
        (CompareStruct):
        * src/compiler/OutputGLSL.cpp:
        (TOutputGLSL::writeFunctionParameters):
        (TOutputGLSL::visitUnary):
        (TOutputGLSL::visitBranch):
        * src/compiler/OutputHLSL.cpp:
        (sh::OutputHLSL::header):
        (sh::OutputHLSL::visitBinary):
        (sh::OutputHLSL::visitAggregate):
        (sh::OutputHLSL::handleExcessiveLoop):
        (sh::OutputHLSL::addConstructor):
        * src/compiler/ParseHelper.cpp:
        (TParseContext::constructorErrorCheck):
        (TParseContext::samplerErrorCheck):
        (TParseContext::paramErrorCheck):
        (TParseContext::findFunction):
        (TParseContext::executeInitializer):
        (TParseContext::addConstructor):
        (TParseContext::addConstStruct):
        (FreeParseContextIndex):
        (GetGlobalParseContext):
        * src/compiler/PoolAlloc.h:
        (TPoolAllocator::tHeader::tHeader):
        (pool_allocator::allocate):
        (pool_allocator::deallocate):
        * src/compiler/ShaderLang.cpp:
        (ShInitialize):
        (ShFinalize):
        (ShInitBuiltInResource):
        * src/compiler/SymbolTable.cpp:
        (TType::getStructSize):
        * src/compiler/SymbolTable.h:
        (TVariable::setQualifier):
        * src/compiler/Types.h:
        (TType::TType):
        (TType::getBasicType):
        (TType::setBasicType):
        (TType::getPrecision):
        (TType::setPrecision):
        (TType::getQualifier):
        (TType::setQualifier):
        (TType::getNominalSize):
        (TType::setNominalSize):
        (TType::isMatrix):
        (TType::setMatrix):
        (TType::isArray):
        (TType::getArraySize):
        (TType::setArraySize):
        (TType::getMaxArraySize):
        (TType::setMaxArraySize):
        (TType::clearArrayness):
        (TType::setArrayInformationType):
        (TType::getArrayInformationType):
        (TType::isVector):
        (TType::isScalar):
        (TType::setStruct):
        (TType::getTypeName):
        (TType::setTypeName):
        (TType::isField):
        (TType::getFieldName):
        (TType::setFieldName):
        (TType::getBasicString):
        (TType::getPrecisionString):
        (TType::getQualifierString):
        * src/compiler/glslang.l:
        * src/compiler/glslang.y:
        * src/compiler/intermediate.h:
        (TIntermNode::getLine):
        (TIntermNode::setLine):
        (TIntermTyped::getAsTyped):
        (TIntermTyped::setType):
        (TIntermTyped::getType):
        (TIntermTyped::getTypePointer):
        (TIntermTyped::getBasicType):
        (TIntermTyped::getQualifier):
        (TIntermTyped::getPrecision):
        (TIntermTyped::getNominalSize):
        (TIntermTyped::isMatrix):
        (TIntermTyped::isArray):
        (TIntermTyped::isVector):
        (TIntermTyped::isScalar):
        (TIntermTyped::getBasicString):
        (TIntermTyped::getQualifierString):
        (TIntermSymbol::getId):
        (TIntermSymbol::getSymbol):
        (TIntermOperator::setOp):
        (TIntermBinary::setLeft):
        (TIntermBinary::setRight):
        (TIntermBinary::getLeft):
        (TIntermBinary::getRight):
        (TIntermUnary::setOperand):
        (TIntermUnary::getOperand):
        (TIntermAggregate::getAsAggregate):
        (TIntermAggregate::getSequence):
        (TIntermAggregate::setName):
        (TIntermAggregate::getName):
        (TIntermAggregate::setUserDefined):
        (TIntermAggregate::isUserDefined):
        (TIntermAggregate::getQualifier):
        (TIntermAggregate::setOptimize):
        (TIntermAggregate::setDebug):
        (TIntermSelection::getCondition):
        (TIntermSelection::getTrueBlock):
        (TIntermSelection::getFalseBlock):
        (TIntermSelection::getAsSelectionNode):
        * src/compiler/parseConst.cpp:
        (TConstTraverser::TConstTraverser):
        * src/compiler/preprocessor/atom.c:
        (InitAtomTable):
        * src/compiler/preprocessor/atom.h:
        * src/compiler/preprocessor/compile.h:
        * src/compiler/preprocessor/cpp.c:
        * src/compiler/preprocessor/cpp.h:
        * src/compiler/preprocessor/cppstruct.c:
        * src/compiler/preprocessor/memory.c:
        * src/compiler/preprocessor/memory.h:
        * src/compiler/preprocessor/parser.h:
        * src/compiler/preprocessor/preprocess.h:
        * src/compiler/preprocessor/scanner.c:
        * src/compiler/preprocessor/scanner.h:
        * src/compiler/preprocessor/slglobals.h:
        * src/compiler/preprocessor/symbols.c:
        (NewSymbol):
        * src/compiler/preprocessor/symbols.h:
        * src/compiler/preprocessor/tokens.c:
        (RecordToken):
        * src/compiler/preprocessor/tokens.h:
        * src/libEGL/Display.cpp:
        (egl::Display::Display):
        (egl::Display::initialize):
        (egl::Display::terminate):
        (egl::Display::createDevice):
        (egl::Display::createWindowSurface):
        (egl::Display::createContext):
        (egl::Display::getMultiSampleSupport):
        (egl::Display::getCompressedTextureSupport):
        * src/libEGL/Display.h:
        * src/libEGL/Surface.cpp:
        (egl::Surface::Surface):
        (egl::Surface::resetSwapChain):
        (egl::Surface::getWindowHandle):
        (egl::Surface::writeRecordableFlipState):
        (egl::Surface::applyFlipState):
        (egl::Surface::releaseRecordedState):
        (egl::Surface::checkForWindowResize):
        (egl::Surface::swap):
        * src/libEGL/Surface.h:
        * src/libEGL/libEGL.cpp:
        * src/libEGL/libEGL.vcproj:
        * src/libGLESv2/Blit.cpp:
        (gl::Blit::setVertexShader):
        (gl::Blit::setPixelShader):
        (gl::Blit::setFormatConvertShaders):
        * src/libGLESv2/Buffer.cpp:
        (gl::Buffer::Buffer):
        * src/libGLESv2/Buffer.h:
        * src/libGLESv2/Context.cpp:
        (gl::Context::Context):
        (gl::Context::~Context):
        (gl::Context::makeCurrent):
        (gl::Context::markAllStateDirty):
        (gl::Context::getReadFramebufferHandle):
        (gl::Context::getDrawFramebufferHandle):
        (gl::Context::getRenderbufferHandle):
        (gl::Context::getArrayBufferHandle):
        (gl::Context::setVertexAttribState):
        (gl::Context::createBuffer):
        (gl::Context::createProgram):
        (gl::Context::createShader):
        (gl::Context::createTexture):
        (gl::Context::createRenderbuffer):
        (gl::Context::deleteBuffer):
        (gl::Context::deleteShader):
        (gl::Context::deleteProgram):
        (gl::Context::deleteTexture):
        (gl::Context::deleteRenderbuffer):
        (gl::Context::getBuffer):
        (gl::Context::getShader):
        (gl::Context::getProgram):
        (gl::Context::getTexture):
        (gl::Context::getRenderbuffer):
        (gl::Context::getReadFramebuffer):
        (gl::Context::getDrawFramebuffer):
        (gl::Context::bindArrayBuffer):
        (gl::Context::bindElementArrayBuffer):
        (gl::Context::bindTexture2D):
        (gl::Context::bindTextureCubeMap):
        (gl::Context::bindReadFramebuffer):
        (gl::Context::bindDrawFramebuffer):
        (gl::Context::bindRenderbuffer):
        (gl::Context::useProgram):
        (gl::Context::setFramebufferZero):
        (gl::Context::setRenderbufferStorage):
        (gl::Context::getFramebuffer):
        (gl::Context::getArrayBuffer):
        (gl::Context::getElementArrayBuffer):
        (gl::Context::getCurrentProgram):
        (gl::Context::getTexture2D):
        (gl::Context::getTextureCubeMap):
        (gl::Context::getSamplerTexture):
        (gl::Context::getFloatv):
        (gl::Context::getIntegerv):
        (gl::Context::getQueryParameterInfo):
        (gl::Context::applyRenderTarget):
        (gl::Context::applyState):
        (gl::Context::applyIndexBuffer):
        (gl::Context::readPixels):
        (gl::Context::clear):
        (gl::Context::finish):
        (gl::Context::flush):
        (gl::Context::supportsShaderModel3):
        (gl::Context::getMaxSupportedSamples):
        (gl::Context::getNearestSupportedSamples):
        (gl::Context::supportsCompressedTextures):
        (gl::Context::detachBuffer):
        (gl::Context::detachTexture):
        (gl::Context::detachFramebuffer):
        (gl::Context::detachRenderbuffer):
        (gl::Context::getIncompleteTexture):
        (gl::Context::initExtensionString):
        (gl::Context::blitFramebuffer):
        * src/libGLESv2/Context.h:
        (gl::AttributeState::AttributeState):
        * src/libGLESv2/Framebuffer.cpp:
        (gl::Framebuffer::Framebuffer):
        (gl::Framebuffer::~Framebuffer):
        (gl::Framebuffer::lookupRenderbuffer):
        (gl::Framebuffer::setColorbuffer):
        (gl::Framebuffer::setDepthbuffer):
        (gl::Framebuffer::setStencilbuffer):
        (gl::Framebuffer::detachTexture):
        (gl::Framebuffer::detachRenderbuffer):
        (gl::Framebuffer::getRenderTargetSerial):
        (gl::Framebuffer::getRenderTarget):
        (gl::Framebuffer::getDepthStencil):
        (gl::Framebuffer::getDepthbufferSerial):
        (gl::Framebuffer::getStencilbufferSerial):
        (gl::Framebuffer::getColorbuffer):
        (gl::Framebuffer::getDepthbuffer):
        (gl::Framebuffer::getStencilbuffer):
        (gl::Framebuffer::getColorbufferHandle):
        (gl::Framebuffer::getDepthbufferHandle):
        (gl::Framebuffer::getStencilbufferHandle):
        (gl::Framebuffer::hasStencil):
        (gl::Framebuffer::isMultisample):
        (gl::Framebuffer::completeness):
        (gl::DefaultFramebuffer::DefaultFramebuffer):
        (gl::Framebuffer::getSamples):
        (gl::DefaultFramebuffer::completeness):
        * src/libGLESv2/Framebuffer.h:
        * src/libGLESv2/Program.cpp:
        (gl::Program::Program):
        (gl::Program::~Program):
        (gl::Program::attachShader):
        (gl::Program::detachShader):
        (gl::Program::linkVaryings):
        (gl::Program::link):
        (gl::Program::unlink):
        (gl::Program::release):
        (gl::Program::addRef):
        (gl::Program::getRefCount):
        (gl::Program::getDxViewportLocation):
        * src/libGLESv2/Program.h:
        * src/libGLESv2/RefCountObject.cpp: Added.
        (gl::RefCountObject::RefCountObject):
        (gl::RefCountObject::~RefCountObject):
        (gl::RefCountObject::addRef):
        (gl::RefCountObject::release):
        (gl::RefCountObjectBindingPointer::set):
        * src/libGLESv2/RefCountObject.h: Added.
        (gl::RefCountObject::id):
        (gl::RefCountObjectBindingPointer::RefCountObjectBindingPointer):
        (gl::RefCountObjectBindingPointer::~RefCountObjectBindingPointer):
        (gl::RefCountObjectBindingPointer::get):
        (gl::RefCountObjectBindingPointer::id):
        (gl::RefCountObjectBindingPointer::operator ! ):
        (gl::BindingPointer::set):
        (gl::BindingPointer::get):
        (gl::BindingPointer::operator -> ):
        * src/libGLESv2/Renderbuffer.cpp:
        (gl::Renderbuffer::Renderbuffer):
        (gl::Renderbuffer::~Renderbuffer):
        (gl::Renderbuffer::isColorbuffer):
        (gl::Renderbuffer::isDepthbuffer):
        (gl::Renderbuffer::isStencilbuffer):
        (gl::Renderbuffer::getRenderTarget):
        (gl::Renderbuffer::getDepthStencil):
        (gl::Renderbuffer::getWidth):
        (gl::Renderbuffer::getHeight):
        (gl::Renderbuffer::getFormat):
        (gl::Renderbuffer::getD3DFormat):
        (gl::Renderbuffer::getSerial):
        (gl::Renderbuffer::setStorage):
        (gl::RenderbufferStorage::RenderbufferStorage):
        (gl::RenderbufferStorage::~RenderbufferStorage):
        (gl::RenderbufferStorage::isColorbuffer):
        (gl::RenderbufferStorage::isDepthbuffer):
        (gl::RenderbufferStorage::isStencilbuffer):
        (gl::RenderbufferStorage::getRenderTarget):
        (gl::RenderbufferStorage::getDepthStencil):
        (gl::RenderbufferStorage::getWidth):
        (gl::RenderbufferStorage::getHeight):
        (gl::RenderbufferStorage::setSize):
        (gl::RenderbufferStorage::getFormat):
        (gl::RenderbufferStorage::getD3DFormat):
        (gl::RenderbufferStorage::getSamples):
        (gl::RenderbufferStorage::getSerial):
        (gl::RenderbufferStorage::issueSerial):
        (gl::Colorbuffer::Colorbuffer):
        (gl::Colorbuffer::isColorbuffer):
        (gl::Colorbuffer::getRedSize):
        (gl::Colorbuffer::getGreenSize):
        (gl::Colorbuffer::getBlueSize):
        (gl::Colorbuffer::getAlphaSize):
        (gl::DepthStencilbuffer::DepthStencilbuffer):
        (gl::DepthStencilbuffer::~DepthStencilbuffer):
        (gl::DepthStencilbuffer::isDepthbuffer):
        (gl::DepthStencilbuffer::isStencilbuffer):
        (gl::DepthStencilbuffer::getDepthSize):
        (gl::DepthStencilbuffer::getStencilSize):
        (gl::DepthStencilbuffer::getDepthStencil):
        (gl::Depthbuffer::Depthbuffer):
        (gl::Depthbuffer::~Depthbuffer):
        (gl::Depthbuffer::isDepthbuffer):
        (gl::Depthbuffer::isStencilbuffer):
        (gl::Stencilbuffer::Stencilbuffer):
        (gl::Stencilbuffer::~Stencilbuffer):
        (gl::Stencilbuffer::isDepthbuffer):
        (gl::Stencilbuffer::isStencilbuffer):
        * src/libGLESv2/Renderbuffer.h:
        (gl::Renderbuffer::getStorage):
        * src/libGLESv2/ResourceManager.cpp: Added.
        (gl::ResourceManager::ResourceManager):
        (gl::ResourceManager::~ResourceManager):
        (gl::ResourceManager::addRef):
        (gl::ResourceManager::release):
        (gl::ResourceManager::createBuffer):
        (gl::ResourceManager::createShader):
        (gl::ResourceManager::createProgram):
        (gl::ResourceManager::createTexture):
        (gl::ResourceManager::createRenderbuffer):
        (gl::ResourceManager::deleteBuffer):
        (gl::ResourceManager::deleteShader):
        (gl::ResourceManager::deleteProgram):
        (gl::ResourceManager::deleteTexture):
        (gl::ResourceManager::deleteRenderbuffer):
        (gl::ResourceManager::getBuffer):
        (gl::ResourceManager::getShader):
        (gl::ResourceManager::getTexture):
        (gl::ResourceManager::getProgram):
        (gl::ResourceManager::getRenderbuffer):
        (gl::ResourceManager::setRenderbuffer):
        (gl::ResourceManager::checkBufferAllocation):
        (gl::ResourceManager::checkTextureAllocation):
        (gl::ResourceManager::checkRenderbufferAllocation):
        * src/libGLESv2/ResourceManager.h: Added.
        * src/libGLESv2/Shader.cpp:
        (gl::Shader::Shader):
        (gl::Shader::addRef):
        (gl::Shader::release):
        (gl::Shader::getRefCount):
        (gl::Shader::parseVaryings):
        (gl::VertexShader::VertexShader):
        (gl::FragmentShader::FragmentShader):
        * src/libGLESv2/Shader.h:
        * src/libGLESv2/Texture.cpp:
        (gl::Texture::Image::Image):
        (gl::Texture::Texture):
        (gl::Texture::getBlitter):
        (gl::Texture::selectFormat):
        (gl::Texture::loadImageData):
        (gl::Texture::loadAlphaImageData):
        (gl::Texture::loadLuminanceImageData):
        (gl::Texture::loadLuminanceAlphaImageData):
        (gl::Texture::loadRGBUByteImageData):
        (gl::Texture::loadRGB565ImageData):
        (gl::Texture::loadRGBAUByteImageData):
        (gl::Texture::loadRGBA4444ImageData):
        (gl::Texture::loadRGBA5551ImageData):
        (gl::Texture::loadBGRAImageData):
        (gl::Texture::createSurface):
        (gl::Texture::setImage):
        (gl::Texture::setCompressedImage):
        (gl::Texture::subImage):
        (gl::Texture::subImageCompressed):
        (gl::Texture2D::Texture2D):
        (gl::Texture2D::getFormat):
        (gl::Texture2D::setCompressedImage):
        (gl::Texture2D::subImage):
        (gl::Texture2D::subImageCompressed):
        (gl::Texture2D::copyImage):
        (gl::Texture2D::copySubImage):
        (gl::Texture2D::isCompressed):
        (gl::Texture2D::getColorbuffer):
        (gl::TextureCubeMap::TextureCubeMap):
        (gl::TextureCubeMap::getFormat):
        (gl::TextureCubeMap::setCompressedImage):
        (gl::TextureCubeMap::subImage):
        (gl::TextureCubeMap::subImageCompressed):
        (gl::TextureCubeMap::isCompressed):
        (gl::TextureCubeMap::copyImage):
        (gl::TextureCubeMap::copySubImage):
        (gl::TextureCubeMap::getColorbuffer):
        (gl::Texture::TextureColorbufferProxy::addRef):
        (gl::Texture::TextureColorbufferProxy::release):
        (gl::Texture::TextureColorbufferProxy::getWidth):
        (gl::Texture::TextureColorbufferProxy::getHeight):
        (gl::Texture::TextureColorbufferProxy::getFormat):
        * src/libGLESv2/Texture.h:
        * src/libGLESv2/libGLESv2.cpp:
        * src/libGLESv2/libGLESv2.def:
        * src/libGLESv2/libGLESv2.vcproj:
        * src/libGLESv2/main.h:
        * src/libGLESv2/utilities.cpp:
        (gl::ComputeCompressedPitch):
        (gl::ComputeCompressedSize):
        (gl::IsCompressed):
        (gl::ComputePixelSize):
        (gl::CheckTextureFormatType):
        (es2dx::ConvertRenderbufferFormat):
        (es2dx::GetSamplesFromMultisampleType):
        (es2dx::GetMultisampleTypeFromSamples):
        * src/libGLESv2/utilities.h:

2010-08-17  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Moved previous link error fix to Base.xcconfig.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/Base.xcconfig:

2010-08-17  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Got rid of link errors in WebCore.

        Changed GCC_INLINES_ARE_PRIVATE_EXTERN to YES and
        GCC_SYMBOLS_PRIVATE_EXTERN to NO to match WebCore
        flags.

        * ANGLE.xcodeproj/project.pbxproj:

2010-08-04  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Update ANGLE to r352
        https://bugs.webkit.org/show_bug.cgi?id=43500

        Updated ANGLE to r352 (July 26, 2010). Built WebKit to test.

        * include/GLSLANG/ShaderLang.h:
        * src/compiler/Initialize.cpp:
        (BuiltInFunctionsCommon):
        (BuiltInFunctionsVertex):
        (BuiltInFunctionsFragment):
        (StandardUniforms):
        (DefaultPrecisionVertex):
        (DefaultPrecisionFragment):
        (BuiltInConstants):
        (TBuiltIns::initialize):
        (IdentifyBuiltIns):
        * src/compiler/Initialize.h:
        (TBuiltIns::getBuiltInStrings):
        * src/compiler/OutputGLSL.cpp:
        (TOutputGLSL::visitSelection):
        * src/compiler/ShHandle.h:
        (TCompiler::getLanguage):
        (TCompiler::getSpec):
        (TCompiler::getSymbolTable):
        (TCompiler::getInfoSink):
        * src/compiler/ShaderLang.cpp:
        (InitializeSymbolTable):
        (GenerateBuiltInSymbolTable):
        (ShInitialize):
        (ShConstructCompiler):
        (ShFinalize):
        (ShCompile):
        * src/compiler/SymbolTable.h:
        (TSymbolTable::atBuiltInLevel):
        (TSymbolTable::atGlobalLevel):
        (TSymbolTable::push):
        (TSymbolTable::getGlobalLevel):
        (TSymbolTable::currentLevel):
        * src/libGLESv2/Shader.cpp:
        (gl::Shader::Shader):
        (gl::Shader::compileToHLSL):

2010-08-03  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Adele Peterson.

        Remove some unnecessary files from the ANGLE tree.

        * src/compiler/tools/COPYING.bison: Removed.
        * src/compiler/tools/COPYING.flex: Removed.
        * src/compiler/tools/README: Removed.
        * src/compiler/tools/bison.hairy: Removed.
        * src/compiler/tools/bison.simple: Removed.

2010-08-03  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Adele Peterson.

        Clean up the ANGLE Xcode project.

        Main changes include:
        • Adding a Production configuration.
        • Modifying the library name from libangle.a to libANGLE.a.
        • Installing the headers in a subdirectory of /usr/local/include to avoid polluting the top-level directory.
        • Generating derived sources in to the built products directory so they're saved along with the symroot.
        • Switching to using .xcconfig files for maximum cleanliness.

        * ANGLE.xcodeproj/project.pbxproj:
        * Configurations/ANGLE.xcconfig: Added.
        * Configurations/Base.xcconfig: Added.
        * Configurations/DebugRelease.xcconfig: Added.

2010-08-02  Paul Sawaya  <psawaya@apple.com>

        Reviewed by Adele Peterson.

        Add ANGLE library to WebKit. From the repository (http://angleproject.googlecode.com) as of July 22.
        https://bugs.webkit.org/show_bug.cgi?id=42789

