I think it’s best to understand the history of OpenCL in Cycles to understand why it was removed. And then I’ll talk about the new APIs to explain why they’re limited.
Back in version Blender 2.79, Cycles used CUDA to provide GPU rendering support to Nvidia. It also had OpenCL to provide GPU rendering support to AMD GPUs (and in later releases Intel GPUs?).
With the release of Blender 2.80, OpenCL in Cycles was removed from the MacOS build of Blender. This is because Apple had stopped supporting OpenCL and the Cycles developers were now experiencing issues with the OpenCL compiler on MacOS, something that would be best fixed by Apple updating the compiler (which they weren’t doing as they stopped support it).
As time continued with the release of various Blender versions, OptiX was added for Nvidia GPUs (primarily Nvidia RTX), and OpenCL was improved upon and updated. However, there were frequent issues that occurred with OpenCL. With the release of Blender 2.83? All AMD GPUs running certain modern GPU drivers had large rendering errors. And I believe there were issues with OpenCL rendering having issues with volumetrics (still present in 2.93?) (I’m not sure if this was a Cycles bug or a driver bug).
So when the Cycles team decided to re-write Cycles in the form of Cycles-X, they decided to remove OpenCL as an option. It just had lots of issues.
That’s the history of OpenCL and why I believe it was removed. Now onto why the new APIs are being used and why there are limitations on them.
During some point in the development of Cycles-X, AMD and the Blender foundation were in contact and AMD proposed the idea of using the “HIP” rendering backend for AMD GPUs. There were a few advantages to using this system:
- HIP is very similar to CUDA in terms of code style. Meaning maintaining HIP code should be quite similar to maintaining CUDA code.
- AMD was willing to take on the task of porting Cycles to HIP + adding various features. Compared to letting the Blender foundation do all the work.
There’s just a few issues with HIP.
During the early development of Cycles-X, HIP was only supported on Linux.
And support for modern GPUs was missing or lacking? - I may be wrong on this one.
So, along side adding HIP support to Cycles, HIP had to be ported to Windows. HIP had to be updated to have better support for modern GPUs. And the AMD GPU drivers on Windows had to be updated to support it.
The focus was on getting HIP in Cycles working on RDNA2 or newer GPUs. And that’s what they did with the initial release of Cycles-X. (RDNA1 support was also enabled as it appeared to work well)
Support for older GPUs was being investigated. This is because older GPUs were having experiencing crashes or errors when trying to run Cycles HIP. And these issues need to be fixed before they can be enabled.
Work has been done and support for Vega has now been enabled in Blender 3.2 (there are still some issues with it and that is under investigation). Older GPUs like Polaris are also being “investigated” to see if they can be enabled.
Along side the addition of HIP, Apple contributed code for a “Metal” backend that allows MacOS users to use Cycles with their GPU. It supports all(?) AMD and Apple GPUs supported in MacOS 12.3.
And recently, Intel has provided OneAPI, used to provide Intel GPU rendering support in Cycles. It is limited to Xe GPUs.
A large benefit of this is that the rendering APIs/backends are being provided by the company that made them, rather than leaving development entirely up to the Blender foundation. This reduces the workload on the Cycles developers. And it means compiler and/or driver bugs are expected to be fixed in a more timely manner (something that has been very important for the development of HIP and Metal, as both had bugs related to the drivers/compilers during the development).
Just for completion sake.
Apple’s Metal in Cycles supports all AMD and Apple GPUs supported in MacOS 12.3
Intel’s OneAPI in Cycles plans to support Intel Xe and newer.
AMD’s HIP in Cycles supports AMD Vega and newer.
Nvidia’s CUDA in Cycles supports Nvidia Kepler (GTX 700) and newer
Nvidia’s OptiX in Cycles supports Nvidia Maxwell (GTX 900) and newer? - I may be wrong about this.