@@ -83,8 +83,6 @@ Where...
8383 - ``Win32 `` - for Microsoft Windows (Intel x86, 32 bit)
8484 - ``Win64 `` - for Microsoft Windows (Intel x64, 64 bit)
8585 - ``Win-arm64ec `` - for Microsoft Windows (ARM64EC)
86- - ``Win-arm64 `` - for Microsoft Windows (ARM64)
87- - ``Win-arm64x `` - for Microsoft Windows (ARM64X)
8886 - ``IRIX `` - for SGI IRIX plug-ins (compiled 32 bit) (*DEPRECATED *)
8987 - ``IRIX64 `` - for SGI IRIX plug-ins (compiled 64 bit) (*DEPRECATED *)
9088 - ``Linux-x86 `` - for Linux on x86 CPUs (compiled 32 bit)
@@ -113,29 +111,35 @@ to merge multiple architectures into a single binary on MacOS.
113111Windows Architectures
114112^^^^^^^^^^^^^^^^^^^^^
115113
116- As of 2024, Windows supports Arm64 CPUs. It uses two distinct ABIs,
114+ As of 2024, Windows supports Arm64 CPUs. It uses two distinct ABIs:
117115*Arm64 * for native code, and *Arm64EC * for x64/Arm64 compatibility, in
118116which x64 apps running in emulation on Arm64 hardware can interoperate
119117with x64 DLLs (also in emulation) or Arm64EC DLLs (which are native
120118Arm64 code with x64-compatible calling conventions). Arm64EC apps
121- cannot load native Arm64 DLLs, only Intel or Arm64EC.
122-
123- Windows also supports an Arm64X "fat" binary PE format which
124- contains both Intel/Arm64EC and Arm64 binaries.
125-
126- **Search Order **: Since apps built natively for Arm64 ("Arm64" abi)
127- can only load Arm64 DLLs, those apps should attempt to load plugins
128- from the "Win-arm64" folder first, then "Win-arm64x". Arm64EC hosts
129- (running on an Arm64 system) should try the "Win-arm64ec" folder
130- first, then "Win-arm64x". Arm64EC hosts can also use x64 DLLs, so they
131- may try "Win64" as well, but should prefer the other folders to avoid
132- running the plugin in emulation. An Arm64X host will be running either
133- its Arm64EC branch or its Arm64 branch depending on how it's launched,
134- so it should load plugins according to the above depending on the
135- current mode.
136-
137- Note that there is no "fat binary" format on Windows that contains
138- Intel x64 *and * arm64 code.
119+ cannot load native Arm64 DLLs, only Intel or Arm64EC. Windows also
120+ supports an Arm64X "fat" binary PE format which contains both
121+ Intel/Arm64EC and Arm64 binaries. Note that there is no "fat binary"
122+ format on Windows that contains plain Intel x64 *and * Arm64 code.
123+
124+ In practice, the Windows hosts that run on Arm64 hardware today (such
125+ as DaVinci Resolve and Vegas Pro) are Arm64EC; there are not yet any
126+ native Arm64 or Arm64X OpenFX hosts. This standard therefore defines a
127+ single new folder, ``Win-arm64ec ``, and defers naming ``Win-arm64 ``
128+ and ``Win-arm64x `` folders until a host needs them (see *Future
129+ Architecture Compatibility * below).
130+
131+ **Plug-ins **: Arm64EC plug-ins must be installed in the
132+ ``Win-arm64ec `` folder. An Arm64X plug-in (which includes an Arm64EC
133+ branch) may also be installed there so that Arm64EC hosts will find
134+ it.
135+
136+ **Hosts **: An Arm64EC host should load plug-ins from the
137+ ``Win-arm64ec `` folder. Because an unmodified x64 host runs in
138+ emulation on Arm64 hardware and would otherwise look only in
139+ ``Win64 ``, an x64 host should detect when it is running under Arm64
140+ emulation and, if so, also check the ``Win-arm64ec `` folder when it
141+ exists, preferring a native Arm64EC plug-in there over the emulated
142+ x64 plug-in in ``Win64 ``.
139143
140144Future Architecture Compatibility
141145^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -153,6 +157,13 @@ named by ``Linux-${uname -m}`` which for arm64 should be
153157``Linux-aarch64 ``. Using ``uname -m `` rather than a hard-coded list
154158allows for transparently supporting any future architectures.
155159
160+ On Windows, when native Arm64 or Arm64X OpenFX hosts appear, the
161+ standard expects to add ``Win-arm64 `` and ``Win-arm64x `` folders
162+ following the same naming pattern. A native Arm64 host (which can load
163+ only Arm64 DLLs) would then prefer ``Win-arm64 ``, falling back to
164+ ``Win-arm64x ``. These folder names are reserved but not yet
165+ normative, pending a host that needs them.
166+
156167
157168Structure
158169^^^^^^^^^
0 commit comments