<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dolphin/Source/Core/VideoCommon/Fifo.cpp, branch stable</title>
<subtitle>GameCube and Wii emulator</subtitle>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/'/>
<entry>
<title>Fifo: Rewrite SyncGpu</title>
<updated>2015-06-08T21:16:24+00:00</updated>
<author>
<name>degasus</name>
<email>wickmarkus@web.de</email>
</author>
<published>2015-06-03T21:21:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=d31bed8b79a1266d7ac9c7c6f0e45c20d36aaf4c'/>
<id>d31bed8b79a1266d7ac9c7c6f0e45c20d36aaf4c</id>
<content type='text'>
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 (&gt;1.0) or slower(&lt;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
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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 (&gt;1.0) or slower(&lt;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
</pre>
</div>
</content>
</entry>
<entry>
<title>Common: Update BlockingLoop to only use one atomic.</title>
<updated>2015-05-30T10:58:09+00:00</updated>
<author>
<name>degasus</name>
<email>wickmarkus@web.de</email>
</author>
<published>2015-05-30T00:42:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=bfa61105d5a96306a98fa807c3f94b0b9178591d'/>
<id>bfa61105d5a96306a98fa807c3f94b0b9178591d</id>
<content type='text'>
This merges two atomic&lt;bool&gt; into one atomic&lt;int&gt;.
We did move the bit from one bool to another, now we can use operator--.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This merges two atomic&lt;bool&gt; into one atomic&lt;int&gt;.
We did move the bit from one bool to another, now we can use operator--.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fifo: Extract syncing loop</title>
<updated>2015-05-30T10:58:09+00:00</updated>
<author>
<name>degasus</name>
<email>wickmarkus@web.de</email>
</author>
<published>2015-05-27T18:53:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=02a3a063c346cf0372a51d4f1133dc436e9b22c0'/>
<id>02a3a063c346cf0372a51d4f1133dc436e9b22c0</id>
<content type='text'>
It's now a new helper function within common.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It's now a new helper function within common.
</pre>
</div>
</content>
</entry>
<entry>
<title>CommandProcessor: Replace volatile usages with atomics</title>
<updated>2015-05-27T07:53:29+00:00</updated>
<author>
<name>Lioncash</name>
<email>mathew1800@gmail.com</email>
</author>
<published>2015-05-27T07:08:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=1ba3b4e7ac9d53710454c46ac5384ee44a096b70'/>
<id>1ba3b4e7ac9d53710454c46ac5384ee44a096b70</id>
<content type='text'>
Also remove said variables from being globals.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Also remove said variables from being globals.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fifo: Replace usages of volatile with atomics</title>
<updated>2015-05-27T04:42:56+00:00</updated>
<author>
<name>Lioncash</name>
<email>mathew1800@gmail.com</email>
</author>
<published>2015-05-27T04:42:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=4cb55cc42730d419e59ab40e2462a3986a91a13a'/>
<id>4cb55cc42730d419e59ab40e2462a3986a91a13a</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Set copyright year to when a file was created</title>
<updated>2015-05-25T11:22:31+00:00</updated>
<author>
<name>Tillmann Karras</name>
<email>tilkax@gmail.com</email>
</author>
<published>2015-05-24T04:55:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=30ebb2459eb97ba544547183854775df8460b475'/>
<id>30ebb2459eb97ba544547183854775df8460b475</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Update license headers to GPLv2+</title>
<updated>2015-05-25T11:22:31+00:00</updated>
<author>
<name>Tillmann Karras</name>
<email>tilkax@gmail.com</email>
</author>
<published>2015-05-17T23:08:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=cefcb0ace9d363b3679b4e93bcc9ec05f1e5f4f8'/>
<id>cefcb0ace9d363b3679b4e93bcc9ec05f1e5f4f8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Exit ReadDataFromFifoOnCPU, PushFifoAuxBuffer early if shutting down (GpuRunningState=false)</title>
<updated>2015-04-22T02:33:29+00:00</updated>
<author>
<name>comex</name>
<email>comexk@gmail.com</email>
</author>
<published>2015-04-21T18:46:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=06dd0ba3b467487a697d0bcb66d929e2a1516620'/>
<id>06dd0ba3b467487a697d0bcb66d929e2a1516620</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fifo: rewrite Fifo_PauseAndLock</title>
<updated>2015-04-06T10:35:35+00:00</updated>
<author>
<name>degasus</name>
<email>wickmarkus@web.de</email>
</author>
<published>2015-03-29T13:05:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=74795b45539ebee1c2af78fd6dca9022c3189c76'/>
<id>74795b45539ebee1c2af78fd6dca9022c3189c76</id>
<content type='text'>
This lock isn't required any more as our FlushGpu garanty to block until the GPU is idle
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This lock isn't required any more as our FlushGpu garanty to block until the GPU is idle
</pre>
</div>
</content>
</entry>
<entry>
<title>Fifo: only touch the SIMD state once in the single core loop</title>
<updated>2015-04-06T10:35:35+00:00</updated>
<author>
<name>degasus</name>
<email>wickmarkus@web.de</email>
</author>
<published>2015-03-14T07:02:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=b1ffd32f5f09a86598bb47c4b392b28354ed0a87'/>
<id>b1ffd32f5f09a86598bb47c4b392b28354ed0a87</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
