Dolphin, the GameCube and Wii emulator - Forums

Full Version: Hyrule Field Slowdown Observation
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
(04-05-2010, 12:22 PM)Xtreme2damax Wrote: [ -> ]But what does he mean by backwards?
(04-05-2010, 12:21 PM)[SS] Starscream Wrote: [ -> ]Xtreme, try to change some of the FIFO timing and see what happens. This may even fix Eternal Darkness in some ways.

I wish I knew how, cause I would do that. Tongue

Well I asked another fellow coder that contributes to Pcsx2, he is not sure and not all that familiar with the Dolphin code, but seems to also think that the issue lies in the Fifo_EnterLoop function. Bleh, it's probably a combination of things that could be rewritten with more efficient and faster code.

Well, if you can, look for the first FIFO commit that changed the FIFO. Probably sometime between 150 and near the 3 or 400th commit and change it back to that in this current revision.
That probably wouldn't be the best thing to do. Even though ED was broken, there have been massive improvements to the Fifo that have fixed several things, reverting back to old and possibly highly buggy code wouldn't be worth it to fix an issue with a select handful of games.

It would be nice if those more experienced with coding can suggest things to try so we can experiment a bit and test changes to see if they have any positive effects.

I'm trying to dig into the Fifo source and the source for the video plugins but so far have been unable to wrap my head around it due to my obvious lack of coding skills.
hm...does anyone know how Hyrule field was doing before those early FIFO changing commits which broke Eternal Darkness?
(04-05-2010, 11:58 AM)Xtreme2damax Wrote: [ -> ]Something j4ck.frost mentioned in a comment for revision 5272:

Quote:D3D Video_BeginField and OGL Video_BeginField are backwards. OGL does AtomicLoad first, D3D does AtomicStore first.

That whole looping and spin-waiting looks odd to me, especially the way YieldCPU is now. Shouldn't we rather look into way to make it different, rather than moving statements before/behind loops?

I can't find where Video_BeginField is located at, what file has this function and what is backwards?

YieldCPU (and the defined YieldProcessor inside) simply boil down to _mm_pause. And as far as I know, this is only effective on schizophrenic CPUs (that is, ones with Hyperthreading).
That particular part in main.cpp (both DX9 and OGL) does a spin-wait (looping until some variable becomes available) using YieldCPU, which as a whole does not really look useful to me.
My problem is that I don't really know the full path of how things run thru those methods, with SC/DC and other factors; so I can't really say what else we could do in those places.

One guess would be moving the two VideoFifo calls after FifoCriticalLeave to run before FifoCriticalEnter, but that might just move the point where desynch occurs by a few cycles.
(04-05-2010, 09:02 PM)StripTheSoul Wrote: [ -> ]hm...does anyone know how Hyrule field was doing before those early FIFO changing commits which broke Eternal Darkness?

It is not really known as Dolphin was much slower back then and quite a few issues existed that affected playability of most games.
Hyrule field gets even slower when you fill up the zora lake.
anyway has any one tried cheats ? maybe using a cheat or two to get into the other areas of Hyrule Field can help, and then see if theres the same slowdown.
I'm close to the end of the game, just before the city in the sky, Hyrule Field is at 12 - 15 FPS tops on my Core2Duo E8500 PC.
(04-11-2010, 02:50 PM)Xtreme2damax Wrote: [ -> ]I'm close to the end of the game, just before the city in the sky, Hyrule Field is at 12 - 15 FPS tops on my Core2Duo E8500 PC.

same here, but i did not necessarily mean that, what i meant was that trying a cheat that could sneak you into other parts of Hyrule field without beating Goron's mines, or is that not possible? though i have doubts about this
I think the idea is to fix the game properly and not have to avoid certain areas of the game at all.