summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Fifo.cpp
AgeCommit message (Collapse)Author
2017-02-01Remove special condition for auto dual core determinismJosJuice
2017-01-27CommandProcessor: Limit scope of ugly SCPFifoStruct.degasus
It's only used as an interface between two classes. So no need to declare it in the backend export header.
2016-11-11BlockingLoop: Yield to UI message pump while waiting.Jules Blok
2016-10-11SyncGPU: Fix savestate.degasus
2016-10-08Remove Frameskipanthony
2016-10-03Fifo: Fix SyncGPU.degasus
2016-09-17Fifo: Use SyncGPU timings for single core.degasus
2016-09-03Core: Change CoreTiming event key from int to EventType*EmptyChaos
Replace 'int' keys with something that carries type information. Performance is neutral.
2016-08-23Merge pull request #4141 from lioncash/vtxMarkus Wick
VertexManagerBase: Get rid of static state
2016-08-22Merge pull request #4132 from lioncash/enum-fifoMarkus Wick
Fifo: Make SyncGPUReason an enum class
2016-08-21VertexManagerBase: Get rid of static behaviorLioncash
2016-08-19Merge pull request #3386 from lioncash/memoryJosJuice
Common: Namespace MemoryUtil
2016-08-18Fifo: Make SyncGPUReason an enum classLioncash
2016-08-10Use Common::Flag and Common::Event when possibleLéo Lam
Replaces old and simple usages of std::atomic<bool> with Common::Flag (which was introduced after the initial usage), so it's clear that the variable is a flag and because Common::Flag is well tested. This also replaces the ready logic in WiimoteReal with Common::Event since it was basically just unnecessarily reimplementing Common::Event.
2016-08-07Common: namespace MemoryUtilLioncash
2016-07-19Fifo: Call AllowSleep instead of Wakeup when pausing.EmptyChaos
BlockingLoop was being woken when the emulator was being paused which would cause the loop to busy spin. Issue 9692.
2016-06-24Reformat all the things. Have fun with merge conflicts.Pierre Bourdon
2016-04-10Alternative fix: promote cycleslate to an s64 everywhere.Scott Mansell
Also changed a few functions to be static.
2016-01-25Fifo: Make g_use_deterministic_gpu_thread a TU-local variableLioncash
2016-01-25Fifo: Make g_bSkipCurrentFrame a TU-local variableLioncash
This is only ever queried, making it a global isn't necessary.
2016-01-25Merge pull request #3530 from degasus/syncgpufixPierre Bourdon
Fifo: Fix SyncGPU.
2016-01-24Fifo: More comments for SyncGPU functions.degasus
2016-01-24Fifo: Fix SyncGPU.degasus
CBoot::BootUp() did call CoreTiming::Advance which itself blocks on the GPU, but the GPU thread wasn't started already. This commit moves the SyncGPU initialization into the Fifo.cpp file and call it after BootUp().
2016-01-24OpcodeDecoder: Add namespaceLioncash
2016-01-17VideoCommon: Header cleanupLioncash
Also remedies places where the video backends and core rely on things being indirectly included.
2016-01-12Fifo: Create a "Fifo" namespace.degasus
2015-12-25Fifo: Convert define into constantLioncash
Also moves it to the cpp file where it's used.
2015-11-02VideoCommon: VertexManager -> VertexManagerBaseTillmann Karras
It may be a bit weird to see calls to static functions in VertexManagerBase now, but at least it's easier to see what's going on.
2015-09-11Partially revert "General: Toss out PRI macro usage"Lioncash
2015-06-12Options: merge SCoreStartupParameter into SConfigdegasus
2015-06-08Fifo: Rewrite SyncGpudegasus
The new implementation has 3 options: SyncGpuMaxDistance SyncGpuMinDistance SyncGpuOverclock The MaxDistance controlls how many CPU cycles the CPU is allowed to be in front of the GPU. Too low values will slow down extremly, too high values are as unsynchronized and half of the games will crash. The -MinDistance (negative) set how many cycles the GPU is allowed to be in front of the CPU. As we are used to emulate an infinitiv fast GPU, this may be set to any high (negative) number. The last parameter is to hack a faster (>1.0) or slower(<1.0) GPU. As we don't emulate GPU timing very well (eg skip the timings of the pixel stage completely), an overclock factor of ~0.5 is often much more accurate than 1.0
2015-05-30Common: Update BlockingLoop to only use one atomic.degasus
This merges two atomic<bool> into one atomic<int>. We did move the bit from one bool to another, now we can use operator--.
2015-05-30Fifo: Extract syncing loopdegasus
It's now a new helper function within common.
2015-05-27CommandProcessor: Replace volatile usages with atomicsLioncash
Also remove said variables from being globals.
2015-05-27Fifo: Replace usages of volatile with atomicsLioncash
2015-05-25Set copyright year to when a file was createdTillmann Karras
2015-05-25Update license headers to GPLv2+Tillmann Karras
2015-04-21Exit ReadDataFromFifoOnCPU, PushFifoAuxBuffer early if shutting down ↵comex
(GpuRunningState=false) This was causing a race condition where the "absurdly large aux buffer" panic alert would be triggered in the last bit of fifo processing on the CPU thread in deterministic mode (i.e. netplay). SyncGPU is supposed to move the auxiliary queue data to the beginning of the containing buffer so we don't have to deal with wraparound; if GpuRunningState is false, however, it just returns, because it's set to false by another thread - thus it doesn't know whether RunGpuLoop is still executing (in which case it can't just reset the pointers, because it may still be using the buffer) or not (in which case the condition variable it normally waits for to avoid the previous problem will never be signaled). However, SyncGPU's caller PushFifoAuxBuffer wasn't aware of this, so if the buffer was filling at just the right time, it'd stay full and that function would complain that it was about to overflow it. Similar problem with ReadDataFromFifoOnCPU afaik. Fix this by returning early from those as well; other callers of SyncGPU should be safe. A *slightly* cleaner alternative would be giving the CPU thread a way to tell when RunGpuLoop has actually exited, but whatever, this works.
2015-04-06Fifo: rewrite Fifo_PauseAndLockdegasus
This lock isn't required any more as our FlushGpu garanty to block until the GPU is idle
2015-04-06Fifo: only touch the SIMD state once in the single core loopdegasus
2015-04-06Fifo: only sleep once within every ms of emulated timedegasus
2015-04-06Fifo: rewrite sync on idle skipping hackdegasus
Now it's done without a busy loop
2015-04-06Fifo: use the outer loop on sync GPUdegasus
2015-04-06Fifo: Replace busy loop with condition variabledegasus
2015-02-28Fifo: small cleanupTillmann Karras
2015-02-28Fifo: drop unused functionsTillmann Karras
2015-02-22VideoCommon: perf querys by async eventsdegasus
2015-02-22VideoCommon: implement swap requests in the full async waydegasus
2015-02-22VideoCommon: use a new async event system for efb accessdegasus
2014-12-10FIFO: allocate slightly more for SIMD vertex loader overreadsFiora
May fix crashes in rare cases.