2012-06-04 50 views
4

我有一個在桌面模式下在Windows 8上運行的專有媒體播放器。 Runtime DirectX版本爲11,但本機圖形驅動程序支持DirectX 9.
在某些具有完全相同設置的計算機上,我看到實際交換鏈的後臺緩衝區計數爲2,性能很好,而其他一些後臺緩衝區計數是7,並且丟棄了一些幀。
我沒有該播放器的源代碼,並想知道在運行時確定不同的後臺緩衝區計數的原因是什麼。
有人可以解釋爲什麼這樣的backbuffer計數會導致這樣的性能變化嗎?或者直接指出一些相關的文檔來解釋後臺緩衝區數量的含義? (更多調試信息:使用GPUView我看到,當backbuffer計數爲2時,硬件在同步模式下工作,即在每秒第二個VSync中的硬件隊列中有一個數據包(剪輯幀速率爲30fps),當使用7後緩衝器的工作是一起完成5-7幀,然後一些空VSyncs,然後再5-7幀,等等)。DirectX 11交換鏈和7個後備緩衝區

預先感謝您!

回答

4

那麼,我收到了微軟的回答。這是爲了在DC(電池)上工作時節省電力 - 這樣,處理器可以喚醒處理所有可用的緩衝區,將它們發送到GPU以進行工作,並在較長時間內進入更深的省電模式。

6

我真的沒有看到使用超過4個緩衝區(四倍緩衝,用於stereoscopy)。大多數應用程序使用2個緩衝區(雙緩衝),以便應用程序可以在第一個(正面)緩衝區呈現給監視器時開始繪製下一幀到第二個(後)緩衝區,否則應用程序將不得不等待前臺緩衝區在開始繪製下一個幀之前完成繪製到屏幕。三重緩衝只是擴展了這個想法,所以有兩個後臺緩衝區。這樣,如果應用程序能夠完成繪製整個緩衝區的速度比前臺緩衝區呈現給屏幕快,則它可以開始繪製下一幀到第三個緩衝區,而不是等待前臺緩衝區完成呈現。

我不確定這是否真的回答了您有關使用7個緩衝區的其他應用程序的問題,但我不認爲有這種需要,因爲顯示器通常只會以60到75Hz的頻率刷新。

如果您的應用程序運行速度很快,它可以在第一個緩衝區完成呈現之前繪製2個緩衝區,只需將應用程序休眠直到前臺緩衝區完成,以便讓其他某些程序有機會使用cpu ,或花費額外的時間爲您的應用程序進行其他處理。如果是媒體播放器,則可以花費額外的時間進行一些更昂貴的操作,以提高媒體播放的質量。

雖然這裏有一個描述緩衝的鏈接,但是他們不會談論超過4個緩衝區,可能是因爲沒有必要。

http://en.wikipedia.org/wiki/Multiple_buffering

P.S.可能是應用程序在使用7個緩衝區時可能會丟失一些幀頻的原因,是因爲應用程序可能無法在需要呈現給屏幕前繼續寫入所有緩衝區。如果使用多線程,這可能不會是這種情況,因爲接下來的緩衝區可以在應用程序完成繪製到所有其他後臺緩衝區之前呈現給屏幕。