4 ms·
That's partly because we got tremendously lucky in how the hardware sends data. Unlike some newer GPUs, the hardware has dedicated memory for the Projection and
by Jasper_ 6y ago
That's partly because we got tremendously lucky in how the hardware sends data. Unlike some newer GPUs, the hardware has dedicated memory for the Projection and Model-View Matrices, and the vertex pipeline is fixed-function.
Dolphin isn't reading 3D models, they're just tweaking the matrices that the game sends. Increased resolution sort of similar the same -- the game sends the hardware triangles in an abstract model space, which is converted to clip space (where the left of the screen is -1.0 and the right is 1.0). Increasing the resolution just means adjusting the rest of the transform; everything the game sends is in abstract space.
(Yes, I know there's a bit more to it than that, e.g. virtual XFBs, LOD biases, and so forth)
Basically, unlike the PS2, the GameCube is pretty much an ancestor of modern PC GPUs, so its way of doing graphics is very familiar to us, and maps quite well. And this is not an accident! ATI bought the company that made the GameCube's GPU (ArtX), and put out a GPU so good (the r300) that NVIDIA nearly went out of business.
Also, fun, I ran into the same "GLES doesn't support glReadPixels for depth" when working on the lens flare code for Wind Waker and Super Mario Galaxy in https://noclip.website https://noclip.website. Had to do some dirty tricks to convert it to a color format first.
- johnchristopher 6y agoWhat happened after that ? What turned the wave in favour of nVidia ? I was there (as a player) but I don't have clear memories.
- Jasper_ 6y agoMy understanding is that ATI's management bungled the software aspect, fell super behind on driver development, and gave NVIDIA way too much time to catch up, but you'll probably have to talk to someone that was there at ATI to figure out what really happened.
- radicalbyte 6y agoI had a Radeon 9500 variant and it was an amazing card. ATI got lazy and NVIDIA had better job with their drivers (heavily tweaking them for the big games for big gains). I also remember that ATI really messed up with the fabbing leaving them basically a generation behind NVIDIA for a decade or so. I was lucky with drivers but I heard a lot of horror stories so also switched to NVIDIA when I finally got around to upgrading.
- tunap 6y agoNvidia acquiring 3DFX Interactive certainly helped. IIRC, 3dfx was spanking both Nvidia & ATI, who's offerings were superior to Nvidia, in the PC graphics market.
- msbarnett 6y agoNot really. NVidia bought 3DFX for the Voodoo/Rampage T&L IP in 2000, around the same time that ATI bought ArtX. The R300/Radeon 9700 (based on the ArtX IP) came out late summer of 2002, and several months later NVidia launched the dismal GeForce FX series (which is the project that most of the 3DFX “rampage” team went to work on after acquisition). The fundamental problem with NVIDIA’s design was that it was optimized for 16-bit precision pixel shaders, and then-new DirectX 9’s “pixel shader 2.0” model mandated a 24-bit minimum precision. The R300 ran FP24 math natively, and consequently ran circles around the FX series in DX9 performance. NVidia didn’t really catch up to and surpass ATI until much, much later.
- tunap 6y agoMy timeline was off,in the late 90' the 3DFX Voodoo(3?l was eating both their lunches. I agree ATI still dominated Nvidia in sales well into the 00's, Nvidia took a long time to offer competitive cards. The solder issues & Cap Plague didn't help them any, either.
- dooglius 6y agoYou call it "lucky", but isn't it more likely that it was deliberately designed to be resolution-agnostic?
- Jasper_ 6y agoThe GameCube is not, generally, resolution-agnostic. The internal framebuffer is 640x528 pixels wide, and the hardware has this hardwired in certain places, like the VI/scanout subsystem. Games themselves even allocate the scanout buffers (XFBs) with a constant size, but they usually just submit a command to copy from the GPU's internal framebuffer (the EFB), so Dolphin can just track the memory address they send in the command and swap that out with a larger framebuffer it allocated itself. This is what I mean by "virtual XFB".