diff --git a/.gitignore b/.gitignore
index 6d9040a..c8c9b6c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,7 +58,6 @@
 /third_party/vulkan-tools/src
 /third_party/vulkan-validation-layers/src
 /third_party/vulkan_memory_allocator
-/third_party/zlib
 /tools/clang
 /tools/flex-bison/linux/bison
 /tools/flex-bison/linux/flex
diff --git a/src/common/gl/cgl/FunctionsCGL.cpp b/src/common/gl/cgl/FunctionsCGL.cpp
index b57f42b..3e5a37a 100644
--- a/src/common/gl/cgl/FunctionsCGL.cpp
+++ b/src/common/gl/cgl/FunctionsCGL.cpp
@@ -35,6 +35,7 @@ SOFT_LINK_FUNCTION_SOURCE(OpenGL, CGLDestroyContext, CGLError, (CGLContextObj ct
 SOFT_LINK_FUNCTION_SOURCE(OpenGL, CGLDestroyPixelFormat, CGLError, (CGLPixelFormatObj pix), (pix))
 SOFT_LINK_FUNCTION_SOURCE(OpenGL, CGLErrorString, const char *, (CGLError error), (error))
 SOFT_LINK_FUNCTION_SOURCE(OpenGL, CGLReleaseContext, void, (CGLContextObj ctx), (ctx))
+SOFT_LINK_FUNCTION_SOURCE(OpenGL, CGLGetCurrentContext, CGLContextObj, (void), ())
 SOFT_LINK_FUNCTION_SOURCE(OpenGL, CGLSetCurrentContext, CGLError, (CGLContextObj ctx), (ctx))
 SOFT_LINK_FUNCTION_SOURCE(OpenGL,
                           CGLSetVirtualScreen,
diff --git a/src/common/gl/cgl/FunctionsCGL.h b/src/common/gl/cgl/FunctionsCGL.h
index 9112659..39df6fe 100644
--- a/src/common/gl/cgl/FunctionsCGL.h
+++ b/src/common/gl/cgl/FunctionsCGL.h
@@ -57,6 +57,7 @@ SOFT_LINK_FUNCTION_HEADER(OpenGL,
                           (GLuint display_mask, CGLRendererInfoObj *rend, GLint *nrend),
                           (display_mask, rend, nrend))
 SOFT_LINK_FUNCTION_HEADER(OpenGL, CGLReleaseContext, void, (CGLContextObj ctx), (ctx))
+SOFT_LINK_FUNCTION_HEADER(OpenGL, CGLGetCurrentContext, CGLContextObj, (void), ())
 SOFT_LINK_FUNCTION_HEADER(OpenGL, CGLSetCurrentContext, CGLError, (CGLContextObj ctx), (ctx))
 SOFT_LINK_FUNCTION_HEADER(OpenGL,
                           CGLSetVirtualScreen,
diff --git a/src/common/utilities.cpp b/src/common/utilities.cpp
index c953ff9..63b3a59 100644
--- a/src/common/utilities.cpp
+++ b/src/common/utilities.cpp
@@ -6,6 +6,11 @@
 
 // utilities.cpp: Conversion functions and other utility routines.
 
+// Older clang versions have a false positive on this warning here.
+#if defined(__clang__)
+#pragma clang diagnostic ignored "-Wglobal-constructors"
+#endif
+
 #include "common/utilities.h"
 #include "GLES3/gl3.h"
 #include "common/mathutil.h"
diff --git a/src/compiler/preprocessor/preprocessor_tab_autogen.cpp b/src/compiler/preprocessor/preprocessor_tab_autogen.cpp
index 4711774..cf25e48 100644
--- a/src/compiler/preprocessor/preprocessor_tab_autogen.cpp
+++ b/src/compiler/preprocessor/preprocessor_tab_autogen.cpp
@@ -1,5 +1,7 @@
 /* A Bison parser, made by GNU Bison 3.3.2.  */
 
+/* Apple Note: For the avoidance of doubt, Apple elects to distribute this file under the terms of the BSD license. */
+
 /* Bison implementation for Yacc-like parsers in C
 
    Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
diff --git a/src/compiler/translator/glslang_tab_autogen.cpp b/src/compiler/translator/glslang_tab_autogen.cpp
index 130b98a..33b83db 100644
--- a/src/compiler/translator/glslang_tab_autogen.cpp
+++ b/src/compiler/translator/glslang_tab_autogen.cpp
@@ -1,5 +1,7 @@
 /* A Bison parser, made by GNU Bison 3.3.2.  */
 
+/* Apple Note: For the avoidance of doubt, Apple elects to distribute this file under the terms of the BSD license. */
+
 /* Bison implementation for Yacc-like parsers in C
 
    Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
diff --git a/src/compiler/translator/glslang_tab_autogen.h b/src/compiler/translator/glslang_tab_autogen.h
index 5306032..0250300 100644
--- a/src/compiler/translator/glslang_tab_autogen.h
+++ b/src/compiler/translator/glslang_tab_autogen.h
@@ -1,5 +1,7 @@
 /* A Bison parser, made by GNU Bison 3.3.2.  */
 
+/* Apple Note: For the avoidance of doubt, Apple elects to distribute this file under the terms of the BSD license. */
+
 /* Bison interface for Yacc-like parsers in C
 
    Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
diff --git a/src/gpu_info_util/SystemInfo.cpp b/src/gpu_info_util/SystemInfo.cpp
index f748949..54c3db5 100644
--- a/src/gpu_info_util/SystemInfo.cpp
+++ b/src/gpu_info_util/SystemInfo.cpp
@@ -47,6 +47,8 @@ std::string VendorName(VendorID vendor)
             return "Vivante";
         case kVendorID_VMWare:
             return "VMWare";
+        case kVendorID_Apple:
+            return "Apple";
         default:
             return "Unknown (" + std::to_string(vendor) + ")";
     }
@@ -160,6 +162,11 @@ bool IsVivante(VendorID vendorId)
     return vendorId == kVendorID_Vivante;
 }
 
+bool IsApple(VendorID vendorId)
+{
+    return vendorId == kVendorID_Apple;
+}
+
 bool ParseAMDBrahmaDriverVersion(const std::string &content, std::string *version)
 {
     const size_t begin = content.find_first_of("0123456789");
diff --git a/src/gpu_info_util/SystemInfo.h b/src/gpu_info_util/SystemInfo.h
index ad17698..509a1e9 100644
--- a/src/gpu_info_util/SystemInfo.h
+++ b/src/gpu_info_util/SystemInfo.h
@@ -67,9 +67,8 @@ struct SystemInfo
     bool isAMDSwitchable = false;
     // Only true on dual-GPU Mac laptops.
     bool isMacSwitchable = false;
-    // Only true on Apple Silicon Macs when running iOS binaries.
-    // See https://developer.apple.com/documentation/foundation/nsprocessinfo/3608556-iosapponmac
-    bool isiOSAppOnMac = false;
+    // Only true on Apple Silicon Macs when running in macCatalyst.
+    bool needsEAGLOnMac   = false;
 
     // Only available on Android
     std::string machineManufacturer;
@@ -99,6 +98,7 @@ constexpr VendorID kVendorID_Intel    = 0x8086;
 constexpr VendorID kVendorID_NVIDIA   = 0x10DE;
 constexpr VendorID kVendorID_Qualcomm = 0x5143;
 constexpr VendorID kVendorID_VMWare   = 0x15ad;
+constexpr VendorID kVendorID_Apple    = 0x106B;
 
 // Known non-PCI (i.e. Khronos-registered) vendor IDs
 constexpr VendorID kVendorID_Vivante     = 0x10001;
@@ -124,6 +124,7 @@ bool IsSwiftshader(VendorID vendorId);
 bool IsVeriSilicon(VendorID vendorId);
 bool IsVMWare(VendorID vendorId);
 bool IsVivante(VendorID vendorId);
+bool IsApple(VendorID vendorId);
 
 // Use a heuristic to attempt to find the GPU used for 3D graphics. Sets activeGPUIndex,
 // isOptimus, and isAMDSwitchable.
diff --git a/src/gpu_info_util/SystemInfo_apple.mm b/src/gpu_info_util/SystemInfo_apple.mm
index c7756f6..a49dc52 100644
--- a/src/gpu_info_util/SystemInfo_apple.mm
+++ b/src/gpu_info_util/SystemInfo_apple.mm
@@ -19,25 +19,7 @@ namespace angle
 
 bool GetSystemInfo(SystemInfo *info)
 {
-#    if defined(ANGLE_PLATFORM_MACCATALYST) && defined(ANGLE_CPU_ARM64)
-    static bool isiOSAppOnMac = false;
-    static dispatch_once_t once;
-    dispatch_once(&once, ^{
-      isiOSAppOnMac = [[NSProcessInfo processInfo] isiOSAppOnMac];
-    });
-
-    if (isiOSAppOnMac)
-    {
-        GetSystemInfo_ios(info);
-        if (info)
-        {
-            info->isiOSAppOnMac = true;
-        }
-        return info;
-    }
-
-    return GetSystemInfo_mac(info);
-#    elif defined(ANGLE_PLATFORM_MACOS) || defined(ANGLE_PLATFORM_MACCATALYST)
+#if defined(ANGLE_PLATFORM_MACOS) || defined(ANGLE_PLATFORM_MACCATALYST)
     return GetSystemInfo_mac(info);
 #    else
     return GetSystemInfo_ios(info);
diff --git a/src/gpu_info_util/SystemInfo_ios.cpp b/src/gpu_info_util/SystemInfo_ios.cpp
index 323af2c..e52ecb3 100644
--- a/src/gpu_info_util/SystemInfo_ios.cpp
+++ b/src/gpu_info_util/SystemInfo_ios.cpp
@@ -18,8 +18,9 @@ namespace angle
 bool GetSystemInfo_ios(SystemInfo *info)
 {
     {
-        // TODO(anglebug.com/4275): Get the actual system version.
+        // TODO(anglebug.com/4275): Get the actual system version and GPU info.
         info->machineModelVersion = "0.0";
+        info->gpus.emplace_back().vendorId = kVendorID_Apple;
     }
 
     return true;
diff --git a/src/gpu_info_util/SystemInfo_macos.mm b/src/gpu_info_util/SystemInfo_macos.mm
index b1cd055..c5e039e 100644
--- a/src/gpu_info_util/SystemInfo_macos.mm
+++ b/src/gpu_info_util/SystemInfo_macos.mm
@@ -322,6 +322,10 @@ bool GetSystemInfo_mac(SystemInfo *info)
         info->isMacSwitchable = true;
     }
     
+#if defined(ANGLE_PLATFORM_MACCATALYST) && defined(ANGLE_CPU_ARM64)
+    info->needsEAGLOnMac = true;
+#endif
+
     return true;
 }
 
diff --git a/src/libANGLE/Caps.cpp b/src/libANGLE/Caps.cpp
index f906783..1dddd4d 100644
--- a/src/libANGLE/Caps.cpp
+++ b/src/libANGLE/Caps.cpp
@@ -630,7 +630,12 @@ static bool DetermineDepthTextureANGLESupport(const TextureCapsMap &textureCaps)
 {
     constexpr GLenum requiredFormats[] = {
         GL_DEPTH_COMPONENT16,
+#if !defined(ANGLE_PLATFORM_IOS) && (!defined(ANGLE_PLATFORM_MACCATALYST) || !defined(ANGLE_CPU_ARM64))
+        // TODO(dino): Temporarily Removing the need for GL_DEPTH_COMPONENT32_OES
+        // because it is not supported on iOS.
+        // TODO(dino): I think this needs to be a runtime check when running an iOS app on Mac.
         GL_DEPTH_COMPONENT32_OES,
+#endif
         GL_DEPTH24_STENCIL8_OES,
     };
 
@@ -642,7 +647,12 @@ static bool DetermineDepthTextureOESSupport(const TextureCapsMap &textureCaps)
 {
     constexpr GLenum requiredFormats[] = {
         GL_DEPTH_COMPONENT16,
+#if !defined(ANGLE_PLATFORM_IOS) && (!defined(ANGLE_PLATFORM_MACCATALYST) || !defined(ANGLE_CPU_ARM64))
+        // TODO(dino): Temporarily Removing the need for GL_DEPTH_COMPONENT32_OES
+        // because it is not supported on iOS.
+        // TODO(dino): I think this needs to be a runtime check when running an iOS app on Mac.
         GL_DEPTH_COMPONENT32_OES,
+#endif
     };
 
     return GetFormatSupport(textureCaps, requiredFormats, true, true, true, true, false);
diff --git a/src/libANGLE/State.cpp b/src/libANGLE/State.cpp
index 7b08d8d..a804486 100644
--- a/src/libANGLE/State.cpp
+++ b/src/libANGLE/State.cpp
@@ -6,6 +6,9 @@
 
 // State.cpp: Implements the State class, encapsulating raw GL state.
 
+// Older clang versions have a false positive on this warning here.
+#pragma clang diagnostic ignored "-Wglobal-constructors"
+
 #include "libANGLE/State.h"
 
 #include <string.h>
diff --git a/src/libANGLE/formatutils.cpp b/src/libANGLE/formatutils.cpp
index 3f9f37d..5e628f2 100644
--- a/src/libANGLE/formatutils.cpp
+++ b/src/libANGLE/formatutils.cpp
@@ -1034,7 +1034,7 @@ static InternalFormatInfoMap BuildInternalFormatInfoMap()
     angle::SystemInfo info;
     if (angle::GetSystemInfo(&info))
     {
-        if (info.isiOSAppOnMac)
+        if (info.needsEAGLOnMac)
         {
             // Using OpenGLES.framework.
             AddRGBAFormat(&map, GL_BGRA_EXT,       false,  8,  8,  8,  8, 0, GL_BGRA_EXT,       GL_UNSIGNED_BYTE,               GL_UNSIGNED_NORMALIZED, false, RequireES<2, 0>,                                  AlwaysSupported, RequireES<2, 0>,                                NeverSupported, NeverSupported);
diff --git a/src/libANGLE/renderer/gl/apple/DisplayApple_api.cpp b/src/libANGLE/renderer/gl/apple/DisplayApple_api.cpp
index de216fb..e63a8b6 100644
--- a/src/libANGLE/renderer/gl/apple/DisplayApple_api.cpp
+++ b/src/libANGLE/renderer/gl/apple/DisplayApple_api.cpp
@@ -37,7 +37,7 @@ DisplayImpl *CreateDisplayCGLOrEAGL(const egl::DisplayState &state)
         break;
     }
 
-    if (info.isiOSAppOnMac)
+    if (info.needsEAGLOnMac)
     {
         return new rx::DisplayEAGL(state);
     }
diff --git a/src/libANGLE/renderer/gl/cgl/ContextCGL.cpp b/src/libANGLE/renderer/gl/cgl/ContextCGL.cpp
index bdf5597..be99b85 100644
--- a/src/libANGLE/renderer/gl/cgl/ContextCGL.cpp
+++ b/src/libANGLE/renderer/gl/cgl/ContextCGL.cpp
@@ -13,6 +13,8 @@
 #include "libANGLE/Display.h"
 #include "libANGLE/renderer/gl/cgl/DisplayCGL.h"
 
+#if defined(ANGLE_PLATFORM_MACOS) || defined(ANGLE_PLATFORM_MACCATALYST)
+
 namespace rx
 {
 
@@ -63,3 +65,5 @@ void ContextCGL::onDestroy(const gl::Context *context)
 }
 
 }  // namespace rx
+
+#endif  // defined(ANGLE_PLATFORM_MACOS) || defined(ANGLE_PLATFORM_MACCATALYST)
\ No newline at end of file
diff --git a/src/libANGLE/renderer/gl/eagl/FunctionsEAGL.h b/src/libANGLE/renderer/gl/eagl/FunctionsEAGL.h
index ece235a..ae0207b 100644
--- a/src/libANGLE/renderer/gl/eagl/FunctionsEAGL.h
+++ b/src/libANGLE/renderer/gl/eagl/FunctionsEAGL.h
@@ -17,7 +17,7 @@
 #    import <OpenGLES/EAGLDrawable.h>
 #    import <OpenGLES/EAGLIOSurface.h>
 
-#    include "libANGLE/renderer/gl/apple/SoftLinking.h"
+#    include "common/apple/SoftLinking.h"
 
 SOFT_LINK_FRAMEWORK_HEADER(OpenGLES)
 
diff --git a/src/libANGLE/renderer/gl/eagl/FunctionsEAGL.mm b/src/libANGLE/renderer/gl/eagl/FunctionsEAGL.mm
index 7779792..076d072 100644
--- a/src/libANGLE/renderer/gl/eagl/FunctionsEAGL.mm
+++ b/src/libANGLE/renderer/gl/eagl/FunctionsEAGL.mm
@@ -14,7 +14,7 @@
 #    import <OpenGLES/EAGLDrawable.h>
 #    import <OpenGLES/EAGLIOSurface.h>
 
-#    include "libANGLE/renderer/gl/apple/SoftLinking.h"
+#    include "common/apple/SoftLinking.h"
 
 SOFT_LINK_FRAMEWORK_SOURCE(OpenGLES)
 
diff --git a/src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm b/src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm
index f16c3e7..45e6d0f 100644
--- a/src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm
+++ b/src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm
@@ -206,7 +206,9 @@ egl::Error IOSurfaceSurfaceEAGL::bindTexImage(const gl::Context *context,
         // TODO(kbr): possibly more state to be set here, including setting any
         // pixel unpack buffer to 0 when using ES 3.0 contexts.
         gl::PixelUnpackState defaultUnpackState;
-        stateManager->setPixelUnpackState(defaultUnpackState);
+        if (IsError(stateManager->setPixelUnpackState(context, defaultUnpackState))) {
+            return egl::EglBadState() << "Failed to set pixel unpack state.";
+        }
         textureData = IOSurfaceGetBaseAddress(mIOSurface);
     }
 
@@ -238,7 +240,9 @@ egl::Error IOSurfaceSurfaceEAGL::releaseTexImage(const gl::Context *context, EGL
         gl::PixelPackState state;
         state.rowLength = mRowStrideInPixels;
         state.alignment = 1;
-        stateManager->setPixelPackState(state);
+        if (IsError(stateManager->setPixelPackState(context, state))) {
+            return egl::EglBadState() << "Failed to set pixel unpack state.";
+        }
         // TODO(kbr): possibly more state to be set here, including setting any
         // pixel pack buffer to 0 when using ES 3.0 contexts.
         const auto &format = kIOSurfaceFormats[mFormatIndex];
diff --git a/src/libANGLE/renderer/gl/renderergl_utils.cpp b/src/libANGLE/renderer/gl/renderergl_utils.cpp
index 99772c4..11f47e6 100644
--- a/src/libANGLE/renderer/gl/renderergl_utils.cpp
+++ b/src/libANGLE/renderer/gl/renderergl_utils.cpp
@@ -1358,7 +1358,7 @@ void GenerateCaps(const FunctionsGL *functions,
 
 #if defined(ANGLE_PLATFORM_MACOS) || defined(ANGLE_PLATFORM_MACCATALYST)
     angle::SystemInfo info;
-    if (angle::GetSystemInfo(&info) && !info.isiOSAppOnMac)
+    if (angle::GetSystemInfo(&info) && !info.needsEAGLOnMac)
     {
         VendorID vendor = GetVendorID(functions);
         if ((IsAMD(vendor) || IsIntel(vendor)) && *maxSupportedESVersion >= gl::Version(3, 0))
