2013-10-13 69 views
3

我正在研究用於Linux和Windows的便攜式GUI工具包,並且遇到了一些性能問題。在幾個系統上(因爲我的上網本基於臭名昭着的英特爾GMA 3650)受安裝的驅動程序影響很大。X11 GUI性能

但是什麼是悖論,當安裝後備VESA驅動程序時,我的代碼的性能是遠高於專用專有驅動程序的

另一方面與專有驅動程序,如預期電腦的性能是非常好的。硬件加速工程,高清視頻播放沒有問題,這種方式只有我的代碼受這種奇怪的反向方式影響。

我的代碼使用類似的Xlib,Xft的,並行線程等

在Windows端口(使用WINAPI)運行的公共庫在極快的速度沒有任何問題。即使在葡萄酒。另一個悖論是,爲Windows編譯並在WINE中運行的相同程序的繪製速度比Linux編譯程序快得多。

什麼可能是造成這種影響的原因,以及爲了修復它而在哪裏挖掘。

的源代碼庫是managed by fossil scm

一個測試例子是在trunk/freshlib/TestFreshLib.fpr(爲純FASM編譯freshlib/test_code0/TestLib.asm

這是便攜式例如其可被編譯爲Windows和Linux爲好。

更新1:經過一番思考和代碼探索之後,我有一個假設。我使用兩種不同的方法在窗口上繪製圖形:

  1. 使用XLib繪圖函數繪製線條和矩形。
  2. 使用Xft庫來繪製文本。

我測試的控件使用雙緩衝,其中圖像緩衝區是服務器端的像素圖。

但是IIRC,Xft在客戶端繪製,然後將圖像作爲位圖圖像發送到X服務器,而XLib直接在服務器端繪製。

這兩種方法之間可能存在某些衝突(以某種方式與硬件加速相關)導致性能下降?

+0

這聽起來很不可思議。你能否將問題隔離到SSCCE中? –

+0

什麼是SSCCE?請注意,我不是C/C++或Linux/X11編程方面的專家。 :) – johnfound

+1

啊,我知道它「短,自成體系,正確,例子」。但不幸的是沒有。我當然可以指出你的存儲庫 - 它是一個開源的,但有一大堆文件,我不知道在哪裏搜索問題。 (而且是彙編語言:)) – johnfound

回答

0

雖然它可以自動執行(Apple爲此目的使用XQuartz API設計了Opencl),但X庫並非設計爲使用硬件加速。 OpenGL和DirectX很適合在3D環境中使用,您可以在遊戲中找到它們。

但是,您也可以將其用於2D。 Direct3D旨在使用多邊形Direct2D用於平板圖形。一開始,OpenGl被設計爲保持通用目的:因此,您可以使用許多功能來實現硬件加速圖形。

主要的X11實現包括GLX DRI和Gallium。
我從來沒有寫過使用這些API的東西,但我只知道某些程序通過這種方式加速了他們的繪圖。

在後備VESA中觀察到的性能優勢可能有以下解釋: 專有驅動程序會執行額外的檢查(例如,看它是否被要求使用硬件加速;因爲它是常規的Xlib,它不會加速大多數時間),而後備驅動程序不能使用硬件加速,並且不能使用CPU而不是GPU。