>A lot of things have changed in the last quarter-century – in 1997 NVIDIA had yet to even coin the term “GPU”
[1] https://www.anandtech.com/show/21542/end-of-the-road-an-anan...
Edit: source https://www.computer.org/publications/tech-news/chasing-pixe...
https://archive.org/details/byte-magazine-1985-02/1985_02_BY...
The Emotion Engine (CPU) to GS (GPU) link was what made the PS2 so impressive for the time, but it also made it somewhat hard to code for and immensely hard to emulate. If I recall correctly, the N64 has something like 4x the memory bandwidth (shared) of the PS1, and the PS2 had roughly 6x (3GB/s) the system bandwidth of the N64. However, the PS2's GS RAM clocked in at 48GB/s, more than the external memory bandwidth of the Cell (~25GB/s), which meant that PS3 emulation of PS2 games was actually done with embedded PS2 hardware.
It was a bonkers machine. I don't think workstation GPU bandwidth created 50GB/s for another 5-6 years. That said, it was an ultra simple pipeline with 4MB of RAM and insane DMA requirements, which actually got crazier with the Cell in the PS3. I was at Sony (in another division) in that era. It was a wild time for hardware tinkering and low level software.
But for more reading https://www.psdevwiki.com/ps2/Graphics_Synthesizer
The author has a bunch of other things in their post they don’t expand upon either which are significantly more esoteric as well though, so I think this is very much geared for a particular audience.
A few link outs would have helped for sure.
I prayed for programmable blending via "blending shaders" (and FWIW programmable texture decoding via "texture shaders" - useful for custom texture format/compression, texture synthesis, etc) since i first learned about pixel shaders waay back in early 2000s.
Somehow GPUs got raytracing before programmable blending when the former felt like some summer night dream and the latter just about replacing yet another fixed function block with a programmable one :-P
(still waiting for texture shaders though)
https://medium.com/pocket-gems/programmable-blending-on-ios-...
This is a great example of using it: https://vulkan.org/user/pages/09.events/vulkanised-2024/vulk...
OTOY does all their rendering with compute nowadays.
It's vaguely like comparing a full CPU emulator with something that implements the ADD and MUL instructions.
Just to clarify, Dolphin's specialized shaders simulate fixed-function blending/texturing too. What's different about ubershaders is that a single shader can handle a wide variety of fixed-function states whereas a specialized shader can only handle a single state.
Thus whereas specialized shaders have to be generated and compiled on-the-fly resulting in stutter; ubershaders can all be pre-compiled before running the game. Add to this the capability to asynchronously compile specialized shaders to replace ubershaders and the performance loss of ubershaders becomes negligible. A rare case of having your cake and eating it too.