Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows ARM64 and ARM64EC support #160

Open
3 of 17 tasks
garyo opened this issue May 7, 2024 · 1 comment
Open
3 of 17 tasks

Windows ARM64 and ARM64EC support #160

garyo opened this issue May 7, 2024 · 1 comment

Comments

@garyo
Copy link
Contributor

garyo commented May 7, 2024

Open Effects Proposal for Standard Change

Please read the contribution guidelines first.

Standard Change Workflow

  • Create proposal as issue (you're doing this now!)
  • Tag this issue with standard change tag
  • Identify subcommittee: at least one plug-in vendor, and at least one host
  • Discuss the idea in this issue
  • Write new or updated code and doc
  • Publish updates as a pull request (ideally on a feature/PROPOSAL-NAME branch)
    • Make sure that PR references this issue number to keep them in sync
    • Discuss and review code in the PR
    • Meet all requirements below for accepting PR
  • When subcommittee signs off and other members don't have any further review comments,
    maintainer merges PR to master which closes PR and issue

Requirements for accepting a standard change:

  • Header files updated
  • Documentation updated
  • Release notes added
  • Compatibility review completed
  • Working code demonstrated with at least one host and one plugin
  • At least two members sign off
  • No further changes requested from membership

Summary

OpenFX plugins are installed in standard locations, based on the ABI architecture. See https://openfx.readthedocs.io/en/main/Reference/ofxPackaging.html#installation-directory-hierarchy for the current list.

On Windows, the spec currently says:

On Windows with arm64, Win-arm64 should be used (vs. current Win32 and Win64 which are Intel-specific)

Windows 11 will soon be supporting two new architectures, arm64 and arm64ec. No machines currently support this, but such machines are expected in summer of 2024. According to Microsoft, arm64ec supports running Intel code in emulation, within an arm64 application on an arm64 CPU. This should allow Intel-based plugins to run in an arm64ec host. Native arm64 applications will presumably fail to load an Intel dll, so the spec should be specific about where plugins for each architecture are installed.

The doc above says:

  • Arm64EC apps can load Intel DLLs and Arm64EC DLLs, but not Arm64 DLLs.
  • Arm64 apps can only load Arm64 DLLs.
  • Intel apps cannot load Arm64 nor Arm64EC, naturally.
  • There is also an Arm64X "fat" binary PE format which contains both Intel/Arm64EC and Arm64 binaries. See Microsoft doc.

We will need to confirm once machines and host apps are available, but I believe this will work:

  • An Arm64EC host should attempt to load plugins from Win-arm64x, then Win-arm64ec, and then from Win64.
  • An Arm64 native host should load plugins from Win-arm64x, then Win-arm64.
  • An Arm64X host will be running either its Intel/Arm64EC branch, or its Arm64 branch, so should load plugins according to the above depending on the current mode.

Requested change:

  • Add Win-arm64ec, Win-arm64, and Win-arm64x install folders to the spec along with the notes above.

Impact

This will impact all hosts and plugins which want to support Arm64 on Windows.

Documentation Impact

The only change to the doc (the spec) is to update the install dirs list, and add rationale as per the discussion in this issue.

@garyo
Copy link
Contributor Author

garyo commented May 7, 2024

I note that Microsoft specifically recommends that plugins should be built as Arm64X (similar to Mac fat or universal binaries).

@garyo garyo moved this to Upcoming Meeting Agenda Items in TSC Meeting Agenda May 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Upcoming Meeting Agenda Items
Development

No branches or pull requests

1 participant