Imagination GPUs now support OpenGL 4.6
blog.imaginationtech.com
blog.imaginationtech.com
Things like Nanite spark a little hope, since they've shown that software-rasterization via compute can be faster than the standard graphics pipeline with the hardware rasterizer for small, dense triangles. Seems like a matter of time until everything goes compute, even large triangles. Maybe the recent addition of work-graphs in DirectX is one step in that direction?
The HW rasterizer is not that efficient if the triangles are tiny, which is the case for nanite.
Not happening anytime soon. The industry has lined up pretty solidly behind Khronos/Vulkan.
Basically, instead of graphics being a framework, I want graphics to be a straightforward library you include and use in your CUDA/HIP/SYCL/OpenCL code.
how would that work? like GPU frameworks would just be compute (like cuda) and some small component of it would just allow to write the end result to a buffer which would be displayed or smth?
What industry? Gaming industry is mostly using DirectX or Gnm/PSSL.
The Nintendo Switch and PCs support OpenGL and Vulkan. But those are both dwarfed by mobile gaming which I think makes up more than half of the entire gaming market, and both iPhone and Android support OpenGL. Although I don't know if the majority of mobile games use it or not.
OpenGL on Apple is on life support to support existing software, Apple platforms are all in on Metal now.
The only platforms where OpenGL and Vulkan are first class citizens is Linux, Android and Windows (barely). And Vulkan is still second fiddle to DirectX on Windows.
It would be hard to quantify exactly how much of it is using OpenGL, as a percentage.
However, for a very rough upper bound I quickly looked up these:
* Mobile gaming apparently makes 52% of the entire gaming market in 2023
* Android is 78% of mobile gaming
That could mean OpenGL makes up to 40% of the entire gaming market just from Android.
Although I have no idea what percentage of Android games use OpenGL and wouldn't know how to look that up. I also don't know how accurate those percentages are. I got them from brief Google queries and got both the 52% and 78% figures from the featured snippet.
But even if that 40% is much too high, we still need to add switch and PC games and I would find a figure of 30% of the gaming industry using openGL to be believable. That would put OpenGL as the largest API which I didn't expect, even as a possibility.
Imho Vulkan is the least used of all the APIs if you disregard it as a compatibility layer
Would you mind expanding on this?
I'll readily admit, I'm neither smart nor patient enough for Vulkan so I quickly gave up and learned CUDA instead, because it was way easier to write a naive software-rasterizer for triangles in CUDA, than it was to combine a compute shader and a vertex+fragment shader in Vulkan. I'm just rendering a single buffer with ~100k compute-generated triangles, and learning Vulkan for that just wasn't worth it.
Something which requires you to buy new hardware from a specific brand, and load an out-of-tree binary-only module on your kernel? That's not what I want graphics programming to be like.
The Vulkan API might be clunkier (I don't know, I haven't looked at the CUDA API, since I don't have the required hardware), but at least it can work everywhere.
I guess you can technically call that software rasterization now that GPUs are very programmable. But it's not how the word is usually used.
It's not just micro-triangles, it works for triangles that span multiple pixels. And that's not a special case, that's the standard nowadays, except for games targeting very low-end devices.
The dedicated hardware is nice for general-purpose support for arbitrary triangle-soups. But if you structure triangles a certain way and have a certain amount of density (which you want for modern games), you can specifically optimize for that and beat the general-purpose hardware rasterizer.
Sure, the implementations today are thin layers over D3D12, Vulkan and Mantel. But it is a proper API, cross platform and without the implementation overhead.
Next time I need to draw some graphics I will definitely use WebGPU instead of OpenGL or Vulkan.
PS. Don't let the name fool you. It is a proper render API, Mozilla has written their implementation in rust and Google in C++.
Would not be surprised if WebGPU do get native support by the drivers in the future.
Overstatement of the year award candidate.
Vulkan and OpenGL both already support mesh shaders, which is a compute-oriented alternative to the traditional rasterization pipeline.
I think he meant development overhead, not performance overhead.
OpenGL is exactly what you said, "an API where the common things are easy, and the super powerful low-level optimizations are optional."
Of course I'm not saying that these libraries don't exist, but they haven't taken off in the way they expected
I'm guessing this niche is just pretty small in commercial sense; most people probable end up just using UE/Unity/... as their graphics API.
Mesh shaders are a step in the right direction, but they are still embedded in all that unnecessary Vulkan fluff. I would want these things in CUDA because it does the opposite approach of Vulkan - it makes the common things easy, and the hard/powerful things optional. Just let me draw things directly in CUDA, and maybe give access to the hardware rasterizer via a CUDA call.
Only if the common thing does not include running on hardware of more than one vendor. Which is a pretty common requirement for any consumer software.
GPU compute is awful, almost as bad as GPU rendering.
Would you have the time to expand on this thought a bit? I am curious. Thanks!!
It is telling of the GPU compute landscape that there is separate implementation for each vendor
How do you think OpenGL/Vulkan works under the hood? It's been a very long time since fixed function pipelines.
If these vendors came up with different enough hardware to need a new driver from scratch, they'd just focus on Vulkan and use Zink for opengl.
After all, opengl is a relatively high level API. It is sensible to implement it in a hardware-independent manner on top of Vulkan.
There are a lot of chips that are very poorly documented and supported by abysmal proprietary SDK. The software part of hardware is so often an afterthought yet it is also what makes or breaks the product.
And they're sort of known for historically being very anti open source and their SDK difficult to continuously integrate into a larger product.
You'd think some hardware player would buy them to get a foot in the GPU/AI game.
Are these GPUs fully open source?
Note that these GPU's are widely used in (mostly low end) phones, and I think power the UI in some other household items with screens. They provided iPhone GPU's till 2017 (and there is debate if Apples new GPU might contain some imagination tech)
That’s just crazy. If there’s anything a minor GPU player needs its community support.
Maybe these days that's changing but it's a big change for a company like this to embrace.
Their business model is to license the GPU IP block to other companies to integrate into their own chips.
It's worth noting that Imagination designed the GPUs used in iPhones up until the iPhone 8 when Apple switched to their own design.
Currently they do not support the specific variant used in JH7110, but they seem to both be variants of the same architecture.
JH7110 has the BXE-4-32MC1[0], whereas the driver currently supports the BXS-4-64-MC1[1].
0. https://www.imaginationtech.com/product/img-bxe-4-32-mc1/
1. https://www.imaginationtech.com/product/img-bxs-4-64-mc1/
This company makes GPUs?
Yes, and they've been around for a while. If you're old enough, you might remember the name "PowerVR".
Today, they mostly license GPU designs to SoC vendors. You'll find their designs in e.g. Android phones.
Notably, JH7110 (RISC-V SoC used in VisionFive2 and Star64) uses one of their recent GPUs.
Currently they do not support the specific variant used in JH7110, but they seem to both be variants of the same architecture.
JH7110 has the BXE-4-32MC1[0], whereas the driver currently supports the BXS-4-64-MC1[1].
No idea about compute, and AIUI openCL suport in mesa3d is still a disaster for all drivers.
0. https://www.imaginationtech.com/product/img-bxe-4-32-mc1/
1. https://www.imaginationtech.com/product/img-bxs-4-64-mc1/
Besides the JH7110 there's TH1520 and it's using the BXM-4-64-MC1, also not supported, but 2X the speed of BXE-4-64-MC1 if I understand it correctly.