- A CUDA implementation, if the host uses CUDA
- A Metal implementation, for Apple
- An OpenCL implementation
- A fallback CPU-based implementation
- You don't need a DirectCompute implementation, because thankfully no one is idiotic enough to use it.
- You don't need a Vulkan implementation, because no one is doing compute on Vulkan (afaik).
The state of graphics and compute APIs is utter insanity. Especially Apple can go fuck off and die with their extremely moronic move of introducing OpenCL as an open standard in '09 and then presenting Metal as their closed API in '14, moving against OpenCL, OpenGL and Vulkan. nVidia at least has the excuse they were first to market with CUDA (and it's easier to program), and they stuck to it.
[1] THE standard for video effects, think "VST, but better and for video".
WebGPU has compute I believe (or hopefully will) so could theoretically act as a good common API that isn’t controlled by a single vendors whims
It looks like Vulkan is going to be the best-supported common platform for compute, at least for modern hardware. They need compute in the standard to support the core graphics use case anyway, so we might as well use that same support for general-purpose tasks. On Apple platforms, MoltenVk can implement Vulkan support on top of Metal
By the way, Google also completely ignored OpenCL and came up with its own Renderscript dialect instead.
I have not tested on Apple, but I did on ARM Linux. Their HLSL to GLES GLSL translation worked OK for my purposes. In the documentation they say they support most of them for both graphics and compute, VK and Metal included.
It’s an open source project by Pixar, adopted by large parts of the film industry and seeing adoption by both Unreal and Unity as well.
It’s IMHO a more comprehensive format than gltf , with the big downside being that it’s not supported by the web. However if you join the community, you can see that many big industry players are very involved with it right now.
glTF is a full scene exchange format, however, I deal with glTF files on a daily basis and the overwhelming majority contain only models and animation.
JPEG XL is simple enough to be written cleanly and largely from scratch, instead of being based on a fork of the crusty VP8 codebase.
Edit: to explain what I mean by supported extensions in case it comes up. USD is the format/library. It can be represented in three forms. USDA for ASCII, usdc for binary and usdz is a zipped bundle of the other two including any asset dependencies like textures, audio or other referenced usd files
I don't like it because WebP doesn't add anything else than better compression compared to PNG and JPEG. AVIF or JPEG XL bring HDR support, so Apple should have adopted one of them. Even Google is planning WebP 2.0 because they noticed that WebP isn't enough: https://www.youtube.com/watch?v=zogxpP2lm-o
You can start by reading the Mac OS X Internals, followed by Mac OS X and iOS Internals: To the Apple's Core.
Then hop over to Apple's archive, https://developer.apple.com/library/archive/navigation/
I'm hopeful for WebGPU in the future, not just for its features and expected cross-platform support, but because I expect a pretty thorough test suite to emerge, holding developers' feet to the fire to make their drivers actually work.
Maybe those that enjoy outputting pixels or debugging messages will be fine with it.
Wasn't Apple the first big adopter of OpenGL? Windows had proprietary standards, Apple had OpenGL.
Sure, now they move to Metal, but it's not entirely accurate to say that "Apple has fought against open standards in graphics" generally...
Repeating the same nonsense over and over again still doesn't make it true.
Windows always had full support for every graphics API - be it proprietary (like Direct3D) or open (like OpenGL).
The difference between Apple and Microsoft was that Apple controlled access to the API, that's why you were stuck with outdated OGL versions on MacOS and can probably say goodbye to OGL entirely on their future Apple Silicon products.
Microsoft on the other hand simply stopped providing anything but a OpenGL 1.2 implementation, while leaving API support to the hardware vendors via drivers. This happened all the way back in Windows 95 already, which is why some vendors provided their own APIs (remember GLIDE?), while others shipped "MiniGL" drivers just for Quake.
Microsoft never prevented drivers from providing graphics APIs or applications from using them and redirected OpenGL calls to the hardware driver when available.
Even on mobile, probably unknown in US, but Symbian and J2ME were the big motivation for OpenGL ES on mobiles, with N95 being the first handset with proper hardware acceleration.
Well, yeah, and the Apple II used Wozniak's quirky graphics mode. But I meant the OS X era Apple, you're going back a bit...
As usual, companies at the edge of bankruptcy tend to be a bit more "open".
As a graphics developer, all I can say is... sigh. Apple has fought against open standards in graphics. They never overtly move against open standards (that I'm aware of) instead they use their dominant platform and refuse to or drag their heels in implementing support for open APIs.
Even though there's a new era of cross platform graphics APIs in Metal, WebGPU, and Vulkan, the fight has now moved onto formats, as everyone except Apple work towards open formats like WebP, glTF, basis universal (fortunately they can't avoid that last one), while Apple announces they'll use USDZ instead, or not add support for WebP.