Skip to content

[iOS] Delete software rendering fallback in iOS embedder #190041

Closed

Description

@cbracken

Currently, the iOS embedder has a fallback mechanism to use software rendering (IOSRenderingAPI::kSoftware / CALayer) if MTLCreateSystemDefaultDevice() fails to initialize a Metal device. Most of this logic lives in engine/src/flutter/shell/platform/darwin/ios/rendering_api_selection.mm.

This fallback was historically necessary for the iOS Simulator running in older CI environments or on host machines that lacked GPU paravirtualization (pre-macOS Catalina/Xcode 11).

We can safely remove this fallback and enforce IOSRenderingAPI::kMetal since:

  • Impeller Migration: Flutter has fully migrated iOS to Impeller, which strictly requires a hardware-accelerated graphics API (Metal) and possesses no CPU software backend like Skia did. As the legacy Skia backend is removed from the engine, this Skia-dependent software fallback becomes dead code.
  • Universal CI Metal Support: All modern CI environments capable of running Xcode 14+ (which requires macOS 12+) use Apple's modern virtualisation framework. This framework natively supports paravirtualised graphics and Metal on the iOS Simulator.
  • Parity with macOS Embedder: The macOS desktop embedder (FlutterRenderer.mm) already hardcodes its configuration to Metal and successfully operates without any software rendering fallback.

This issue is the iOS equivalent of #156628, which tracks removing the software rendering fallback on Android.

Proposed Changes:

  • Remove IOSRenderingAPI::kSoftware from rendering_api_selection.h and .mm.
  • Remove the TARGET_OS_SIMULATOR fallback logic in GetRenderingAPIForProcess().
  • Remove the CALayer return path in GetCoreAnimationLayerClassForRenderingAPI().
  • Clean up any associated Skia software surface manager code specific to iOS.

Activity

  1. self-assigned this
    on Jul 26, 2026
  2. added
    platform-iosiOS applications specifically
    c: tech-debtTechnical debt, code quality, testing, etc.
    team-iosOwned by iOS platform team
    on Jul 26, 2026
  3. added
    fyi-engineFor the attention of Engine team
    engineflutter/engine related. See also e: labels.
    on Jul 27, 2026
  4. added
    P2Important issues not at the top of the work list
    triaged-iosTriaged by iOS platform team
    on Jul 31, 2026
  5. 3 remaining items

  6. added a commit that references this issue on Aug 5, 2026
  7. cbracken commented on Aug 14, 2026

    @cbracken
    MemberAuthor

    This is now complete.

  8. github-actions commented on Aug 28, 2026

    @github-actions

    This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

  9. locked as resolved and limited conversation to collaborators on Aug 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

P2Important issues not at the top of the work listc: tech-debtTechnical debt, code quality, testing, etc.engineflutter/engine related. See also e: labels.platform-iosiOS applications specificallyteam-iosOwned by iOS platform teamtriaged-iosTriaged by iOS platform team

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions