Future graphics card emulation
Posted: Tue 09 Jun, 2020 4:33 pm
Requests for "please emulate 'x' graphics card" seem to be popping up periodically, so I've made this post in a (probably futile) attempt to stop this. Below are my thoughts on every graphics card that might be considered for emulation, along with how difficult it is and how likely I am to look at it.
A few things that I would have thought I wouldn't need to point out but probably do :
This is based on how difficult _I_ would find emulating each card and how likely _I_ am to emulate them. While it's theoretically possible that someone else will come along with a complete emulation of a TNT or something, so far this hasn't happened so I'm sticking to reality here.
If the card you're thinking of isn't listed then it probably isn't interesting enough to be worth emulating.
For difficulty, 'Easy' means a rough time estimate would be in days, 'Medium' weeks, 'Hard' months. This is an _estimate_, not a guarantee. Unexpected issues do occur, particularly when PCem is involved.
'High' likelihood means I have plans to implement it. 'Medium' means I would like to get round to it at some point. 'Low' means given infinite time I might get round to it, but I probably won't. 'None' means there's no chance of it happening.
None of this is a _promise_ that I will emulate any of these.
Anyway :
3Dfx Voodoo Rush (Alliance)
Probably doable, I have technical reference for the AT25 chip used on this and a real card to test against. Would require AT25 emulation (SVGA, 2D acceleration, video acceleration), plus some refactoring of Voodoo emulation to allow integration and to emulate the few Rush-specific features.
Difficulty: Medium
Likelihood of being added: Medium
3Dfx Voodoo Rush (Macronix)
I've not seen any documentation for the Macronix 2D chip, which would make this a non-starter.
Difficulty: Very high
Likelihood of being added: None (unless a datasheet shows up)
3Dfx Voodoo Banshee
I did write emulation for the SVGA core for this a few years ago, this has probably bitrotted a bit but could be brought back into shape. 2D acceleration needs writing, given the way this integrates into the 3D command submission system this will probably be non-trivial. The 3D core is basically the same as Voodoo 2 but there will be quite a bit of work refactoring it to integrate everything together. This is on my list for in the next year or so.
Difficulty: Medium
Likelihood of being added: High
3Dfx Voodoo 3
Functionally this is a Banshee variant, so emulation would come 'for free' with the Banshee. However the existing render code is nowhere near fast enough for V3 performance so this would be a bit pointless without (a lot of) further work to try to bring the speed up.
Sadly I suspect that if I tried to add the Banshee without also adding the V3, regardless of performance, someone would end up adding it themselves and going "ha ha! Sarah's crap and couldn't emulate it come use my fork instead".
Difficulty: High (mostly optimisation)
Likelihood of being added: Medium
3Dfx Voodoo 4/5
No chip documentation available and no open source drivers to look at (Glide source releases only go up to V3, Mesa driver just talks to Glide) mean this would require a lot of reverse engineering. It would also run deep into the performance issue again (VSA-100 is a lot faster than V3 for single texturing) so realistically this isn't going to happen. Sorry.
Difficulty: Very high (reverse engineering, plus a lot of optimisation)
Likelihood of being added: Low
3DLabs GameGlint (Creative 3D Blaster VLB)
Probably looks like a Permedia subset, in which case if the Permedia2 was emulated then it _might_ be possible to emulate this. No promises.
Difficulty: Medium (hopefully, once Permedia2 added)
Likelihood of being added: Low
3DLabs Permedia
Similar situation to the GameGlint, probably looks like a subset of Permedia2. Not very interesting on it's own.
Difficulty: Medium (hopefully, once Permedia2 added)
Likelihood of being added: Low
3DLabs Permedia2
I have register documentation. This would mainly be interesting to try to emulate the older chips though, as by itself it's just a poor D3D accelerator.
Difficulty: Hard
Likelihood of being added: Low
Alliance AT25
Would be implemented as part of Voodoo Rush work. Not very interesting on it's own.
Difficulty: Medium
Likelihood of being added: Medium
Alliance AT3D
AT25 with an awful 3D core (or rather, AT25 is AT3D with the 3D core either absent or non-functional). I have the technical reference, but why bother?
Difficulty: Medium (on top of AT25)
Likelihood of being added: Low
ATI 3D Rage
Basically Mach64 with extended video acceleration and a crap 3D engine. I do have register documentation, however the 3D engine is so lacklustre (it doesn't even support z buffering, meaning compatibility is awful) that there doesn't seem to be much point.
Difficulty: Medium
Likelihood of being added: Low
ATI 3D Rage II
3D Rage with an improved 3D engine and more video functions. No register documentation, though I think it's a superset of the original 3D Rage rather than something totally new. But why bother when you could emulate the Rage Pro instead?
Difficulty: High
Likelihood of being added: Low
ATI 3D Rage Pro
3D engine register documentation isn't available, but the Mesa driver gives most of the details, including of the DMA command system. It's still largely Mach64 based so this wouldn't be a start-from-scratch situation. This is on my list for some point in the future.
I have Personal History and Unresolved Trauma with the Rage Pro, which is why it's more likely to be emulated than some of the other cards here.
Difficulty: Medium/high
Likelihood of being added: Medium
ATI Rage 128
Mesa driver again gives register documentation, but this doesn't look like a Mach64 variant so would be a lot more work.
Difficulty: High bordering on very high
Likelihood of being added: Low
ATI Radeon
Hahahahahahaha.
Difficulty: Ultra high
Likelihood of being added: None
Cirrus Logic Laguna3D
I have full register documentation, but it's not a very interesting chip to emulate; it's just a bad D3D accelerator.
Difficulty: Medium
Likelihood of being added: Low
Matrox Millennium
Looks like it should just be a Mystique without the 3D functionality, and with external RAMDAC and clock generation. If it's that simple it should be in the next release, if not then it won't.
Difficulty: Low (hopefully)
Likelihood of being added: High (next release?)
Matrox Mystique
Code exists in buggy form. I intend to try to get this releasable for the next PCem release.
Difficulty: Medium (hopefully)
Likelihood of being added: High (next release?)
Matrox G100
Mostly a Mystique superset, adding texture filtering, 'better' alpha stippling and AGP support. Wouldn't be impossible to add as an extension to the Mystique emulation, but the only value would be for comedy screenshots; unlike the Mystique, there aren't any chip-specific games
Difficulty: Medium (once Mystique is in)
Likelihood of being added: Low
Matrox G200
Hmm. This again looks like a Mystique extension, though there are quite a number of differences in the 3D engine. Register documentation exists for everything except the Warp Engine (a RISC processor that does triangle setup), which could be a showstopper. Apparently the D3D microcode has been RE'd to the point where a HLE-type emulation of this might be possible, but I'd have to be convinced that this will actually be reliable in the long term.
Difficulty: High
Likelihood of being added: Low (though someone at VOGONS was looking at it I think)
Matrox G400
G200++
Difficulty: High (once G200 was implemented)
Likelihood of being added: Low
nVIDIA NV-1
I believe this mostly looks like a Riva 128 with a very different 3D engine. Not a lot of direct documentation around, but it may be possible to reverse engineer the bits that are needed. Maybe.
Difficulty: High (once Riva 128 was implemented)
Likelihood of being added: Medium
nVIDIA Riva 128
The most likely of the early nVIDIA boards to be implemented. No official documentation, but there is some unofficial stuff in existence. Would likely involve some level of reverse engineering and digging through things like UtahGLX, but if it could be made to work then a lot of the code could be reused for other nVIDIA chips.
Difficulty: High bordering on very high
Likelihood of being added: Medium
nVIDIA TNT/TNT2
If the 3D engine looks like an extension of the Riva 128 then this may be possible. If not then it would be much more difficult. nouveau has TNT support so could be used as a source for documentation. This would involve a lot of the same optimisation work that V3 would require, especially for TNT2.
Difficulty: Medium/high (once Riva 128 was implemented)
Likelihood of being added: Medium
nVIDIA GeForce
Hahahahahahaha.
Difficulty: Ultra high
Likelihood of being added: None
PowerVR PCX1/2
I think there was someone looking at this, at least at one point? No register documentation, acres of reverse engineering, and something I doubt I'm going to involve myself in.
Difficulty: Very high/Ultra high
Likelihood of being added: Low
PowerVR Neon250
Technically the Dreamcast guys have emulated most of this, so the DC version could be used as a starting point. Still a lot of work though, and it was never a very good card anyway.
Difficulty: Very high
Likelihood of being added: Low
Rendition V1000
Quite an interesting architecture on the Verite cards. I'm quite interested in looking at this at some point. The documentation I have is for the V2200, but most of it applies to the V1000 as well.
Difficulty: High
Likelihood of being added: Medium
Rendition V2200
While the documentation I have is actually for this chip, I'd probably add the V1000 first. The V2200 mostly adds some fixed-function hardware as well as a few tweaks to the RISC architecture.
Difficulty: Medium (after V1000 added)
Likelihood of being added: Medium
S3 Trio64V+
On paper this should be fairly easy - Trio64 + something that looks a lot like the ViRGE video overlay. Of course this is PCem so _nothing_ is ever easy.
Difficulty: Easy (I think)
Likelihood of being added: Medium/High
S3 Trio3D
No available documentation that I can find, but my understanding is it's basically ViRGE/DX plus some new blend modes and AGP in some versions. Shouldn't be the most difficult reverse engineering to do, but it's frankly not very interesting.
Difficulty: Medium (probably)
Likelihood of being added: Low
S3 Savage3D
Mostly the same as Savage4, hence emulate that one first. Mesa documents the register differences between this and Savage4. Maybe PCem should emulate terrible chip yield?
Difficulty: Medium (after Savage4 added)
Likelihood of being added: Medium/Low
S3 Savage4
I have register documentation (though I don't think it's 100% complete), plus there's a Mesa driver to stare at. Probably would be lower priority than the V3, Rage Pro or TNT though.
Difficulty: Hard
Likelihood of being added: Medium
S3 Savage2000
Not seen any register documentation. Mesa's Savage driver seems to have some S2000 support but it looks pretty incomplete. Given that this is a card with a roughly GeForce-level feature set and hugely buggy drivers I don't fancy reverse engineering it if I'm honest...
Difficulty: Ultra Hard
Likelihood of being added: None
A few things that I would have thought I wouldn't need to point out but probably do :
This is based on how difficult _I_ would find emulating each card and how likely _I_ am to emulate them. While it's theoretically possible that someone else will come along with a complete emulation of a TNT or something, so far this hasn't happened so I'm sticking to reality here.
If the card you're thinking of isn't listed then it probably isn't interesting enough to be worth emulating.
For difficulty, 'Easy' means a rough time estimate would be in days, 'Medium' weeks, 'Hard' months. This is an _estimate_, not a guarantee. Unexpected issues do occur, particularly when PCem is involved.
'High' likelihood means I have plans to implement it. 'Medium' means I would like to get round to it at some point. 'Low' means given infinite time I might get round to it, but I probably won't. 'None' means there's no chance of it happening.
None of this is a _promise_ that I will emulate any of these.
Anyway :
3Dfx Voodoo Rush (Alliance)
Probably doable, I have technical reference for the AT25 chip used on this and a real card to test against. Would require AT25 emulation (SVGA, 2D acceleration, video acceleration), plus some refactoring of Voodoo emulation to allow integration and to emulate the few Rush-specific features.
Difficulty: Medium
Likelihood of being added: Medium
3Dfx Voodoo Rush (Macronix)
I've not seen any documentation for the Macronix 2D chip, which would make this a non-starter.
Difficulty: Very high
Likelihood of being added: None (unless a datasheet shows up)
3Dfx Voodoo Banshee
I did write emulation for the SVGA core for this a few years ago, this has probably bitrotted a bit but could be brought back into shape. 2D acceleration needs writing, given the way this integrates into the 3D command submission system this will probably be non-trivial. The 3D core is basically the same as Voodoo 2 but there will be quite a bit of work refactoring it to integrate everything together. This is on my list for in the next year or so.
Difficulty: Medium
Likelihood of being added: High
3Dfx Voodoo 3
Functionally this is a Banshee variant, so emulation would come 'for free' with the Banshee. However the existing render code is nowhere near fast enough for V3 performance so this would be a bit pointless without (a lot of) further work to try to bring the speed up.
Sadly I suspect that if I tried to add the Banshee without also adding the V3, regardless of performance, someone would end up adding it themselves and going "ha ha! Sarah's crap and couldn't emulate it come use my fork instead".
Difficulty: High (mostly optimisation)
Likelihood of being added: Medium
3Dfx Voodoo 4/5
No chip documentation available and no open source drivers to look at (Glide source releases only go up to V3, Mesa driver just talks to Glide) mean this would require a lot of reverse engineering. It would also run deep into the performance issue again (VSA-100 is a lot faster than V3 for single texturing) so realistically this isn't going to happen. Sorry.
Difficulty: Very high (reverse engineering, plus a lot of optimisation)
Likelihood of being added: Low
3DLabs GameGlint (Creative 3D Blaster VLB)
Probably looks like a Permedia subset, in which case if the Permedia2 was emulated then it _might_ be possible to emulate this. No promises.
Difficulty: Medium (hopefully, once Permedia2 added)
Likelihood of being added: Low
3DLabs Permedia
Similar situation to the GameGlint, probably looks like a subset of Permedia2. Not very interesting on it's own.
Difficulty: Medium (hopefully, once Permedia2 added)
Likelihood of being added: Low
3DLabs Permedia2
I have register documentation. This would mainly be interesting to try to emulate the older chips though, as by itself it's just a poor D3D accelerator.
Difficulty: Hard
Likelihood of being added: Low
Alliance AT25
Would be implemented as part of Voodoo Rush work. Not very interesting on it's own.
Difficulty: Medium
Likelihood of being added: Medium
Alliance AT3D
AT25 with an awful 3D core (or rather, AT25 is AT3D with the 3D core either absent or non-functional). I have the technical reference, but why bother?
Difficulty: Medium (on top of AT25)
Likelihood of being added: Low
ATI 3D Rage
Basically Mach64 with extended video acceleration and a crap 3D engine. I do have register documentation, however the 3D engine is so lacklustre (it doesn't even support z buffering, meaning compatibility is awful) that there doesn't seem to be much point.
Difficulty: Medium
Likelihood of being added: Low
ATI 3D Rage II
3D Rage with an improved 3D engine and more video functions. No register documentation, though I think it's a superset of the original 3D Rage rather than something totally new. But why bother when you could emulate the Rage Pro instead?
Difficulty: High
Likelihood of being added: Low
ATI 3D Rage Pro
3D engine register documentation isn't available, but the Mesa driver gives most of the details, including of the DMA command system. It's still largely Mach64 based so this wouldn't be a start-from-scratch situation. This is on my list for some point in the future.
I have Personal History and Unresolved Trauma with the Rage Pro, which is why it's more likely to be emulated than some of the other cards here.
Difficulty: Medium/high
Likelihood of being added: Medium
ATI Rage 128
Mesa driver again gives register documentation, but this doesn't look like a Mach64 variant so would be a lot more work.
Difficulty: High bordering on very high
Likelihood of being added: Low
ATI Radeon
Hahahahahahaha.
Difficulty: Ultra high
Likelihood of being added: None
Cirrus Logic Laguna3D
I have full register documentation, but it's not a very interesting chip to emulate; it's just a bad D3D accelerator.
Difficulty: Medium
Likelihood of being added: Low
Matrox Millennium
Looks like it should just be a Mystique without the 3D functionality, and with external RAMDAC and clock generation. If it's that simple it should be in the next release, if not then it won't.
Difficulty: Low (hopefully)
Likelihood of being added: High (next release?)
Matrox Mystique
Code exists in buggy form. I intend to try to get this releasable for the next PCem release.
Difficulty: Medium (hopefully)
Likelihood of being added: High (next release?)
Matrox G100
Mostly a Mystique superset, adding texture filtering, 'better' alpha stippling and AGP support. Wouldn't be impossible to add as an extension to the Mystique emulation, but the only value would be for comedy screenshots; unlike the Mystique, there aren't any chip-specific games
Difficulty: Medium (once Mystique is in)
Likelihood of being added: Low
Matrox G200
Hmm. This again looks like a Mystique extension, though there are quite a number of differences in the 3D engine. Register documentation exists for everything except the Warp Engine (a RISC processor that does triangle setup), which could be a showstopper. Apparently the D3D microcode has been RE'd to the point where a HLE-type emulation of this might be possible, but I'd have to be convinced that this will actually be reliable in the long term.
Difficulty: High
Likelihood of being added: Low (though someone at VOGONS was looking at it I think)
Matrox G400
G200++
Difficulty: High (once G200 was implemented)
Likelihood of being added: Low
nVIDIA NV-1
I believe this mostly looks like a Riva 128 with a very different 3D engine. Not a lot of direct documentation around, but it may be possible to reverse engineer the bits that are needed. Maybe.
Difficulty: High (once Riva 128 was implemented)
Likelihood of being added: Medium
nVIDIA Riva 128
The most likely of the early nVIDIA boards to be implemented. No official documentation, but there is some unofficial stuff in existence. Would likely involve some level of reverse engineering and digging through things like UtahGLX, but if it could be made to work then a lot of the code could be reused for other nVIDIA chips.
Difficulty: High bordering on very high
Likelihood of being added: Medium
nVIDIA TNT/TNT2
If the 3D engine looks like an extension of the Riva 128 then this may be possible. If not then it would be much more difficult. nouveau has TNT support so could be used as a source for documentation. This would involve a lot of the same optimisation work that V3 would require, especially for TNT2.
Difficulty: Medium/high (once Riva 128 was implemented)
Likelihood of being added: Medium
nVIDIA GeForce
Hahahahahahaha.
Difficulty: Ultra high
Likelihood of being added: None
PowerVR PCX1/2
I think there was someone looking at this, at least at one point? No register documentation, acres of reverse engineering, and something I doubt I'm going to involve myself in.
Difficulty: Very high/Ultra high
Likelihood of being added: Low
PowerVR Neon250
Technically the Dreamcast guys have emulated most of this, so the DC version could be used as a starting point. Still a lot of work though, and it was never a very good card anyway.
Difficulty: Very high
Likelihood of being added: Low
Rendition V1000
Quite an interesting architecture on the Verite cards. I'm quite interested in looking at this at some point. The documentation I have is for the V2200, but most of it applies to the V1000 as well.
Difficulty: High
Likelihood of being added: Medium
Rendition V2200
While the documentation I have is actually for this chip, I'd probably add the V1000 first. The V2200 mostly adds some fixed-function hardware as well as a few tweaks to the RISC architecture.
Difficulty: Medium (after V1000 added)
Likelihood of being added: Medium
S3 Trio64V+
On paper this should be fairly easy - Trio64 + something that looks a lot like the ViRGE video overlay. Of course this is PCem so _nothing_ is ever easy.
Difficulty: Easy (I think)
Likelihood of being added: Medium/High
S3 Trio3D
No available documentation that I can find, but my understanding is it's basically ViRGE/DX plus some new blend modes and AGP in some versions. Shouldn't be the most difficult reverse engineering to do, but it's frankly not very interesting.
Difficulty: Medium (probably)
Likelihood of being added: Low
S3 Savage3D
Mostly the same as Savage4, hence emulate that one first. Mesa documents the register differences between this and Savage4. Maybe PCem should emulate terrible chip yield?
Difficulty: Medium (after Savage4 added)
Likelihood of being added: Medium/Low
S3 Savage4
I have register documentation (though I don't think it's 100% complete), plus there's a Mesa driver to stare at. Probably would be lower priority than the V3, Rage Pro or TNT though.
Difficulty: Hard
Likelihood of being added: Medium
S3 Savage2000
Not seen any register documentation. Mesa's Savage driver seems to have some S2000 support but it looks pretty incomplete. Given that this is a card with a roughly GeForce-level feature set and hugely buggy drivers I don't fancy reverse engineering it if I'm honest...
Difficulty: Ultra Hard
Likelihood of being added: None