Open KristopherTadlock opened 7 years ago
To clarify, Angrylion with cxd4 works perfectly in almost all cases, except for the poor performance ofc. No other combination of plugins do work with this core in vulkan.
I believe that's what happens when games use interlaced mode. That should be a relatively easy fix, though, whenever someone starts working on it.
The VI handling is very prematurely implemented right now - TinyTiger didn't really know how to properly convert this from software to hardware.
See this -
https://github.com/libretro/parallel-n64/blob/master/mupen64plus-video-paraLLEl/vi.cpp#L85
We could really use the help of guys like @LegendOfDragoon here.
Also, the glitch you see here in the distance on the ground -
this is mipmapping not being properly implemented in Parallel right now. You can see this in various other games right now. Mipmapping and VI handling are the two biggest omissions right now and I think if we had them fixed, the renderer could be close to perfect. Unfortunately TinyTiger is no longer active, so we will have to find some other willing and able devs in order to rectify this.
I think we might be wanting to incentivize fixing this and some of the other remaining issues with Parallel RDP by turning it into a bounty.
Perhaps I can take a look, once I'm able to compile this emulator.
OK, I'm starting to make progress now in fixing some of these things. I have a solution ready already for Banjo Kazooie, Banjo Tooie, Resident Evil 2 and Turok 2 at least.
Unfortunately, this will require some per-game hacks.
' // Unfortunately, the N64 RDP doesn't need to know the framebuffer // height since it's implied by the scissor box. // It only renders scanlines. // We will need to estimate the real height and potentially flush out // everything if we guess wrong. // Just employ some crappy heuristic to make this sort of work. ' To the people in this thread, can you go through more games to see which ones are afflicted by this bug? That way, I can go over each game and get the values just right.
I downloaded the newest updated released on 8/25 and there are some improvements.
Turok 2 is fantastic. I have tried every plugin I can find, and this is the only one that renders dynamic lighting and the blood effects correctly. The pause menu has a transparent layer of black pixels on the bottom that shouldn't be there, and there is occasionally some stuff there that looks like it would be fixed with overscan, but it is almost 100% flawless.
Turok Rage Wars is also fixed. The game setup menus have something going on at the edges, but in game looks pretty much perfect.
Turok 3 also works now. It also has some garbage pixels on the left side, which are present in gameplay.
Rampage 2 is basically perfect now.
Rampage 1 has some minor 2d alignment issues in the background when scrolling but is otherwise perfect.
Banjo Kazooie and Banjo Tooie are better now, but they both have mipmapping issues.
Indiana Jones is fixed, but has texture mapping issues.
Rayman 2 is pretty close to perfect now.
South Park is pretty much perfect.
Mishcief makers has some minor issues but is better.
Mortal Kombat 4 is perfect.
Excite bike 64 is perfect.
There were some games overlooked though, and some of them aren't quite right yet.
Star wars rogue squadron looks better in the menus, but when you start the first mission the sky and the ground are rendered incorrectly. Flying to high causes the x wing fighter to be obscured, and the opening cutscene is off.
Rainbow Six has the same interlacing problem, but I don't think it was mentioned before.
Conker's Bad Furday was fixed for me. This game does have some pretty severe texture mapping that make it unplayable.
Redident Evil 2 is in more or less the same state as before. The game windows is letterboxed and moved to the top of the screen. There are lots of garbage pixels below it, the opening cutscene wouldn't play, and their are some mipmapping issues as well.
Regarding Resident Evil 2 - the way I fixed these issues you mentioned in those other games is still pretty much a very dirty, nasty hack. The entire problem is that low-level RDP has no need of knowing the 'height' of the image - it just has to care about knowing how many scanlines are to be rendered, so the only information you have is the width. With hardware graphics APIs like Vulkan/GL, you don't deal in scanlines, but in framebuffer images, and you need a width/height. Deriving the correct height from the known width here is the problem.
If I wanted to fix Resident Evil 2 with the method I used for those other games, I'd really have to make a big mess out of things, since the game does some unique things as far as resolution is concerned. When using an Expansion Pak, the resolution could be different at each scene depending on how many enemies are onscreen and also the prerendered background in question.
So we really need some better heuristics for VI handling; the problem is, the method Gonetz described where you just ensure you have a big enough backbuffer image; that doesn't seem to me quite practical for Parallel N64 since compute is quite expensive already even for 320x240 images, so we require a way to do it without incurring a big performance hit.
Regarding Rogue Squadron - I see a pattern with that game and the following other games -
NASCAR 2000 - Road Rash 64 - maybe they used some kind of framebuffer fogging method which isn't being correctly handled in Parallel RDP right now, which results in half of the screen being cut off/obscured? Maybe incomplete alpha depth compare.
The strip of garbage at the left that you see in games like Turok 2 / Banjo is probably garbage that is normally not visible onscreen due to overscan; but I am almost certain it's down to incorrect VI output handling. Maybe the scissor normally would strip that away, which would come back to incorrect VI output handling right now. You don't see it with Angrylion, the reference software renderer that was used in the making of this renderer. So it should still be eventually fixed.
Banjo Kazooie Banjo Tooie Turok 2 And many others have this issue.
Using vulkan driver, with parrallel graphics plugin, HLE RSP plugin. I have tried every combination of graphics and HLE/cxd4 and I haven't found anything that fixes the issue. I have also tried lowering the graphics accuracy and disabling sychronous RDP, using pure intpreter/cached interpreter/dynamic recompiler for the CPU core, and disabling and enabling buffer swap.
This issue is not present when parallel 64 is run with the openGL driver (although there are other, different rendering errors depending on the game).
Retroarch 1.6.4 Windows 10 64 (with anniversary updated applied) GTX 1080 24GB memory intel i7700k CPU
ParaLLEl N64.zip