Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 39 additions & 12 deletions Documentation/sources/Reference/ofxPackaging.rst
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,11 @@ Where...

- ``MacOS`` - for Apple Macintosh OS X universal or architecture-specific binaries
- ``MacOS-x86-64`` - *DEPRECATED*. Formerly used for Intel Macs during the transition from PowerPC.
- ``Win32`` - for Microsoft Windows (compiled 32 bit)
- ``Win64`` - for Microsoft Windows (compiled 64 bit)
- ``Win32`` - for Microsoft Windows (Intel x86, 32 bit)
- ``Win64`` - for Microsoft Windows (Intel x64, 64 bit)
- ``Win-arm64ec`` - for Microsoft Windows (ARM64EC)
- ``Win-arm64`` - for Microsoft Windows (ARM64)
- ``Win-arm64x`` - for Microsoft Windows (ARM64X)
- ``IRIX`` - for SGI IRIX plug-ins (compiled 32 bit) (*DEPRECATED*)
- ``IRIX64`` - for SGI IRIX plug-ins (compiled 64 bit) (*DEPRECATED*)
- ``Linux-x86`` - for Linux on x86 CPUs (compiled 32 bit)
Expand All @@ -107,24 +110,48 @@ binaries (since the plug-in .ofx file must always be named to match the
top-level bundle name), but it should not be difficult for any plug-in
to merge multiple architectures into a single binary on MacOS.

Windows Architectures
^^^^^^^^^^^^^^^^^^^^^

As of 2024, Windows supports Arm64 CPUs. It uses two distinct ABIs,
*Arm64* for native code, and *Arm64EC* for x64/Arm64 compatibility, in
which x64 apps running in emulation on Arm64 hardware can interoperate
with x64 DLLs (also in emulation) or Arm64EC DLLs (which are native
Arm64 code with x64-compatible calling conventions). Arm64EC apps
cannot load native Arm64 DLLs, only Intel or Arm64EC.

Windows also supports an Arm64X "fat" binary PE format which
contains both Intel/Arm64EC and Arm64 binaries.

**Search Order**: Since apps built natively for Arm64 ("Arm64" abi)
can only load Arm64 DLLs, those apps should attempt to load plugins
from the "Win-arm64" folder first, then "Win-arm64x". Arm64EC hosts
(running on an Arm64 system) should try the "Win-arm64ec" folder
first, then "Win-arm64x". Arm64EC hosts can also use x64 DLLs, so they
may try "Win64" as well, but should prefer the other folders to avoid
running the plugin in emulation. An Arm64X host will be running either
its Arm64EC branch or its Arm64 branch depending on how it's launched,
so it should load plugins according to the above depending on the
current mode.

Note that there is no "fat binary" format on Windows that contains
Intel x64 *and* arm64 code.

Future Architecture Compatibility
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

NOTE: this section is not yet normative, but informational.

Note that Windows and Linux do not support universal binaries. Each
Note that Linux does not support universal binaries. Each
.ofx file is for one architecture, so a host must check the proper
architecture-specific subdir.
architecture-specific subdir. Windows on Arm64 processors is similar.

When Windows and/or Linux support alternative processor architectures
When OpenFX apps on Linux support alternative processor architectures
such as arm64, hosts should look in appropriately-named subdirs for
the proper .ofx plugin file. On Windows with arm64, ``Win-arm64``
should be used (vs. current ``Win32`` and ``Win64`` which are
Intel-specific). On Linux, hosts should look in the subdir named by
``Linux-${uname -m}`` which for arm64 should be ``Linux-aarch64``.
Using ``uname -m`` rather than a hard-coded list allows for
transparently supporting any future architectures.

the proper .ofx plugin file. On Linux, hosts should look in the subdir
named by ``Linux-${uname -m}`` which for arm64 should be
``Linux-aarch64``. Using ``uname -m`` rather than a hard-coded list
allows for transparently supporting any future architectures.


Structure
Expand Down
3 changes: 2 additions & 1 deletion release-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@ This is version 1.6 of the OpenFX API.

## Key Features of OpenFX Version 1.6:

## Fixes in OpenFX Version 1.6:
## Fixes

## Deprecations

## Detailed List of Changes

- Add `kOfxImageEffectPropNoSpatialAwareness`. Allows the host and plugin to coordinate a render that ensures no spatial changes to the image.
- Add plugin install locations for Windows Arm64

# Release Notes - 1.5

Expand Down
Loading