<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments for fishsoup</title>
	<atom:link href="http://blog.fishsoup.net/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.fishsoup.net</link>
	<description>Owen Taylor on Coding, Food, etc.</description>
	<lastBuildDate>Tue, 08 Nov 2011 23:41:34 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>Comment on Application/Compositor Synchronization by Pierce Lopez</title>
		<link>http://blog.fishsoup.net/2011/11/08/applicationcompositor-synchronization/#comment-2434</link>
		<dc:creator><![CDATA[Pierce Lopez]]></dc:creator>
		<pubDate>Tue, 08 Nov 2011 23:41:34 +0000</pubDate>
		<guid isPermaLink="false">http://blog.fishsoup.net/?p=417#comment-2434</guid>
		<description><![CDATA[And then there&#039;s triple-buffering, used in some video games, in which you keep rendering frames as fast as possible to two alternating backing buffers even if you&#039;re rendering faster than the swap interval, and the swap takes the most recently rendered of the two back buffers and swaps it with the front buffer, thus three buffers total. This of course spins the cpu and gpu and wastes a lot of power...]]></description>
		<content:encoded><![CDATA[<p>And then there&#8217;s triple-buffering, used in some video games, in which you keep rendering frames as fast as possible to two alternating backing buffers even if you&#8217;re rendering faster than the swap interval, and the swap takes the most recently rendered of the two back buffers and swaps it with the front buffer, thus three buffers total. This of course spins the cpu and gpu and wastes a lot of power&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Application/Compositor Synchronization by Alexander Chehovsky</title>
		<link>http://blog.fishsoup.net/2011/11/08/applicationcompositor-synchronization/#comment-2433</link>
		<dc:creator><![CDATA[Alexander Chehovsky]]></dc:creator>
		<pubDate>Tue, 08 Nov 2011 21:52:15 +0000</pubDate>
		<guid isPermaLink="false">http://blog.fishsoup.net/?p=417#comment-2433</guid>
		<description><![CDATA[I&#039;m so glad to hear that someone is actually working on getting this implemented, as without synchronization compositing in X11 is largely useless due to tearing and reduced performance. Thanks for your work.]]></description>
		<content:encoded><![CDATA[<p>I&#8217;m so glad to hear that someone is actually working on getting this implemented, as without synchronization compositing in X11 is largely useless due to tearing and reduced performance. Thanks for your work.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Frame Timing: the Simple Way by Owen</title>
		<link>http://blog.fishsoup.net/2011/06/30/frame-timing-the-simple-way/#comment-2430</link>
		<dc:creator><![CDATA[Owen]]></dc:creator>
		<pubDate>Fri, 01 Jul 2011 22:28:51 +0000</pubDate>
		<guid isPermaLink="false">http://blog.fishsoup.net/?p=403#comment-2430</guid>
		<description><![CDATA[I really don&#039;t see any reason to consider the compositor to be a extra source of &quot;beating&quot; - something that is hard to time - even currently, we should normally be able to make the compositor just a slightly slow vblank update - in the most common case - no transparency, borders don&#039;t need to be drawn - updating the front buffer for a maximized window is a simple blit of 5M-10M of data - in other words, about 0.5-2ms of memory bandwidth. So that&#039;s 14ms for the app and 2ms for the compositor.

In terms of providing a full scene graph to the compositor - think about scrolling in a web page - from a pixels perspective, it&#039;s a blit, and drawing one line of text - from a scene graph perspective, it&#039;s going to be a complete rerendering of thousands of objects moving. It&#039;s certainly going to be a while before a pixel perspective is no longer a useful perspective - maybe in hardware of 5 years we can avoid caching to pixmaps - but certainly not in the hardware of today.

I&#039;m actually a little skeptical that you are seeing &quot;beating&quot; against the refresh rate rather all sorts of other visual timing problems that can occur - yes, you could see the equivalent of &quot;wagon wheel&quot; beating when scrolling a web page or a terminal, but it can&#039;t happen when moving the mouse, because mouse motion doesn&#039;t have high frequency components that can fold back to lower frequencis - the highest frequency is the frequency at which you are wiggling the mouse.

Certainly there is a time when we&#039;ll have suffiicient GPU power that temporaral antialiasing make sense. But even then, I don&#039;t think it makes sense to do it in the compositor - in the limit of tons of GPU power, timing is quite predictable - you get one frame every refresh cycle - so applications can certainly do motion blur themselves.]]></description>
		<content:encoded><![CDATA[<p>I really don&#8217;t see any reason to consider the compositor to be a extra source of &#8220;beating&#8221; &#8211; something that is hard to time &#8211; even currently, we should normally be able to make the compositor just a slightly slow vblank update &#8211; in the most common case &#8211; no transparency, borders don&#8217;t need to be drawn &#8211; updating the front buffer for a maximized window is a simple blit of 5M-10M of data &#8211; in other words, about 0.5-2ms of memory bandwidth. So that&#8217;s 14ms for the app and 2ms for the compositor.</p>
<p>In terms of providing a full scene graph to the compositor &#8211; think about scrolling in a web page &#8211; from a pixels perspective, it&#8217;s a blit, and drawing one line of text &#8211; from a scene graph perspective, it&#8217;s going to be a complete rerendering of thousands of objects moving. It&#8217;s certainly going to be a while before a pixel perspective is no longer a useful perspective &#8211; maybe in hardware of 5 years we can avoid caching to pixmaps &#8211; but certainly not in the hardware of today.</p>
<p>I&#8217;m actually a little skeptical that you are seeing &#8220;beating&#8221; against the refresh rate rather all sorts of other visual timing problems that can occur &#8211; yes, you could see the equivalent of &#8220;wagon wheel&#8221; beating when scrolling a web page or a terminal, but it can&#8217;t happen when moving the mouse, because mouse motion doesn&#8217;t have high frequency components that can fold back to lower frequencis &#8211; the highest frequency is the frequency at which you are wiggling the mouse.</p>
<p>Certainly there is a time when we&#8217;ll have suffiicient GPU power that temporaral antialiasing make sense. But even then, I don&#8217;t think it makes sense to do it in the compositor &#8211; in the limit of tons of GPU power, timing is quite predictable &#8211; you get one frame every refresh cycle &#8211; so applications can certainly do motion blur themselves.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Frame Timing: the Simple Way by S</title>
		<link>http://blog.fishsoup.net/2011/06/30/frame-timing-the-simple-way/#comment-2429</link>
		<dc:creator><![CDATA[S]]></dc:creator>
		<pubDate>Fri, 01 Jul 2011 15:52:32 +0000</pubDate>
		<guid isPermaLink="false">http://blog.fishsoup.net/?p=403#comment-2429</guid>
		<description><![CDATA[Sure, full scene graph rendered by compositor, not application (like NCQ for sata) will be better solution. Too many abstraction layers, huge data structures, and actual flushing must be as close to hardware as possible.

Imagine hardware in 5-6 years, it will render real motion blur (real temporal antialiasing like in cinema, not funny fuzzy long trails after moving objects on bad monitors). Compositor know when next frame must be updated in realtime, application do not.

For now, best what we can do it at least suppress temporal aliasing noise. Example - scrolling terminal window with mouse, or even mouse pointer moving. I can see frequency beats between monitor refresh rate and application render time, it is very annoying. Recently we got compositor, so add third frequency source (monitor, compositor, application) all 3 fights berween other.

How to suppress frequency beats? Ideally - proper filter (aka motion blur).

Some approximation to motion blur:

Dithering as in color output devices ? Add small random number ( Tdisp=floor(Tapplication+0.5*(random())) of frame time, add it to actual temporal ? need test.

Anyway, we must know how long rendering take place, but in reality we cannot. It is more like TCP congestion estimators,]]></description>
		<content:encoded><![CDATA[<p>Sure, full scene graph rendered by compositor, not application (like NCQ for sata) will be better solution. Too many abstraction layers, huge data structures, and actual flushing must be as close to hardware as possible.</p>
<p>Imagine hardware in 5-6 years, it will render real motion blur (real temporal antialiasing like in cinema, not funny fuzzy long trails after moving objects on bad monitors). Compositor know when next frame must be updated in realtime, application do not.</p>
<p>For now, best what we can do it at least suppress temporal aliasing noise. Example &#8211; scrolling terminal window with mouse, or even mouse pointer moving. I can see frequency beats between monitor refresh rate and application render time, it is very annoying. Recently we got compositor, so add third frequency source (monitor, compositor, application) all 3 fights berween other.</p>
<p>How to suppress frequency beats? Ideally &#8211; proper filter (aka motion blur).</p>
<p>Some approximation to motion blur:</p>
<p>Dithering as in color output devices ? Add small random number ( Tdisp=floor(Tapplication+0.5*(random())) of frame time, add it to actual temporal ? need test.</p>
<p>Anyway, we must know how long rendering take place, but in reality we cannot. It is more like TCP congestion estimators,</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What to do if you can&#8217;t do 60fps? by Matt</title>
		<link>http://blog.fishsoup.net/2011/06/22/what-to-do-if-you-cant-do-60fps/#comment-2427</link>
		<dc:creator><![CDATA[Matt]]></dc:creator>
		<pubDate>Wed, 29 Jun 2011 02:50:07 +0000</pubDate>
		<guid isPermaLink="false">http://blog.fishsoup.net/?p=379#comment-2427</guid>
		<description><![CDATA[It seems to me that the problem you&#039;re trying to deal with is the temporal analog of the spatial sampling problem. Of course there is a ton of literature on sampling artifacts in 1-dimensional time-varying signals too. In fact it&#039;s probably the dominant mode of explaining the concepts. So look for digital signal processing books for the very basics. Expanding the math for 2-dimensional images is an exercise left for the reader in these books ;).

Motion blur would be akin to super sampling then filtering the buffered samples to a lower output rate. Sample at 60 frames per second and then filter down to 30 fps being somewhat analogous to sampling at 1200x800 and then non-nearest-neighbor filtering down to 600x400.

If you drop frames then you&#039;re doing something more like nearest neighbor scaling and will suffer analogous artifacts. In fact, I think you&#039;re virtually guaranteed that there is a worst-case animation for any fixed frame dropping scheme. For example, imagine if the red dot had bounced off a wall in a series of 3 frames. If your frame dropping scheme drops the middle frame then it appears as if no animation has occurred at all, or that the motion of the ball suddenly changed without hitting anything. On the other hand, if the motion is parallel to the &quot;wall&quot; then dropping a frame won&#039;t be noticeable. So which frame dropping scheme you ought to choose really depends heavily on which direction the ball is moving and what its phase the frames are relative to your fixed frame dropping scheme.

Since you have &quot;a lot&quot; of frames per second (more than 3 :)) perhaps the best way to drop frames is to add some small limited amount of jitter when selecting which frames to drop. This is just like some of the old spatial sampling schemes did when nearest-neighbor was no longer acceptable. That should get rid of the really annoying &quot;regular&quot; aliasing artifacts in exchange for the less noticeable irregular ones. Another drawback is you&#039;ll see slight fluctuations in CPU/GPU load so other jitter-sensitive tasks (e.g. smoothly tracking mouse input, where latency variability is more annoying/important than low throughput) might be negatively impacted.]]></description>
		<content:encoded><![CDATA[<p>It seems to me that the problem you&#8217;re trying to deal with is the temporal analog of the spatial sampling problem. Of course there is a ton of literature on sampling artifacts in 1-dimensional time-varying signals too. In fact it&#8217;s probably the dominant mode of explaining the concepts. So look for digital signal processing books for the very basics. Expanding the math for 2-dimensional images is an exercise left for the reader in these books <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Motion blur would be akin to super sampling then filtering the buffered samples to a lower output rate. Sample at 60 frames per second and then filter down to 30 fps being somewhat analogous to sampling at 1200&#215;800 and then non-nearest-neighbor filtering down to 600&#215;400.</p>
<p>If you drop frames then you&#8217;re doing something more like nearest neighbor scaling and will suffer analogous artifacts. In fact, I think you&#8217;re virtually guaranteed that there is a worst-case animation for any fixed frame dropping scheme. For example, imagine if the red dot had bounced off a wall in a series of 3 frames. If your frame dropping scheme drops the middle frame then it appears as if no animation has occurred at all, or that the motion of the ball suddenly changed without hitting anything. On the other hand, if the motion is parallel to the &#8220;wall&#8221; then dropping a frame won&#8217;t be noticeable. So which frame dropping scheme you ought to choose really depends heavily on which direction the ball is moving and what its phase the frames are relative to your fixed frame dropping scheme.</p>
<p>Since you have &#8220;a lot&#8221; of frames per second (more than 3 <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) perhaps the best way to drop frames is to add some small limited amount of jitter when selecting which frames to drop. This is just like some of the old spatial sampling schemes did when nearest-neighbor was no longer acceptable. That should get rid of the really annoying &#8220;regular&#8221; aliasing artifacts in exchange for the less noticeable irregular ones. Another drawback is you&#8217;ll see slight fluctuations in CPU/GPU load so other jitter-sensitive tasks (e.g. smoothly tracking mouse input, where latency variability is more annoying/important than low throughput) might be negatively impacted.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What to do if you can&#8217;t do 60fps? by Juan Pablo Ugarte</title>
		<link>http://blog.fishsoup.net/2011/06/22/what-to-do-if-you-cant-do-60fps/#comment-2426</link>
		<dc:creator><![CDATA[Juan Pablo Ugarte]]></dc:creator>
		<pubDate>Wed, 29 Jun 2011 00:19:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.fishsoup.net/?p=379#comment-2426</guid>
		<description><![CDATA[Yes on theaters they show each frame twice which does not mean they leave it longer, they actually shut the shutter twice on each frame to make you think its a different frame (not sure how much that actually helps)

On the tv you can not do that so they came up with interlacing and showing each frame in two separate fields
makes you think the motion is more fluid.

This is why movies on NTSC dont look as smooth as in PAL
Because on PAL they simply run the movie faster (25fps) which makes the motion fluid but has other problems like having a different pitch (pretty bad for music)

On NTSC you simply show one frame during two fields and the next frame for 3 (12*2+12*3=60)

We could try different pulldown patterns when the app can not hit 60 so for example if it can hit 50, the compositor will have to show a frame twice every 5, for 40 every 2 and so on.

Its either that or tearing, I personally preffer stepping down to multiples of the actual display rate, in this case if an app can not hit 60 I preffer to go down to 30 then 20 and 15.
But pulldown is a valid option here. (even more with higher rate displays)

BTW owen:
http://en.wikipedia.org/wiki/Telecine
I ussually hang out at #glade3]]></description>
		<content:encoded><![CDATA[<p>Yes on theaters they show each frame twice which does not mean they leave it longer, they actually shut the shutter twice on each frame to make you think its a different frame (not sure how much that actually helps)</p>
<p>On the tv you can not do that so they came up with interlacing and showing each frame in two separate fields<br />
makes you think the motion is more fluid.</p>
<p>This is why movies on NTSC dont look as smooth as in PAL<br />
Because on PAL they simply run the movie faster (25fps) which makes the motion fluid but has other problems like having a different pitch (pretty bad for music)</p>
<p>On NTSC you simply show one frame during two fields and the next frame for 3 (12*2+12*3=60)</p>
<p>We could try different pulldown patterns when the app can not hit 60 so for example if it can hit 50, the compositor will have to show a frame twice every 5, for 40 every 2 and so on.</p>
<p>Its either that or tearing, I personally preffer stepping down to multiples of the actual display rate, in this case if an app can not hit 60 I preffer to go down to 30 then 20 and 15.<br />
But pulldown is a valid option here. (even more with higher rate displays)</p>
<p>BTW owen:<br />
<a href="http://en.wikipedia.org/wiki/Telecine" rel="nofollow">http://en.wikipedia.org/wiki/Telecine</a><br />
I ussually hang out at #glade3</p>
]]></content:encoded>
	</item>
</channel>
</rss>

