win10虛擬顯示器開發

2017.7.7

最近在做虛擬化,需要在虛機上虛擬出一個顯示器,我使用的虛機是windows10,虛機裏面有一張透傳顯卡(可看做是物理顯卡),我嘗試過一些方法,比如編寫一個虛擬的WDDM顯卡驅動,然後在顯卡驅動上接上一個顯示器,該方法是有效的,可以成功虛擬出一個顯示器,但是在虛擬顯示器上渲染數據使用的渲染引擎沒有用到透傳顯卡,在性能上達不到我的要求,所以只好放棄用這種方法。

 

於是,通過閱讀MSDN上的WDDM開發文檔,找到了Indirect display driver開發框架,比較符合我的要求,它好像是微軟在2016年年底出來的一個框架,比較新,所以除了微軟本身外,根本找不到任何開發資料,開發過程中需要問題只能自己一點點去嘗試,比較痛苦,微軟有提供的資料如下:

 

開發文檔: https://docs.microsoft.com/zh-cn/windows-hardware/drivers/display/indirect-display-driver-model-overview

 

在開發過程中遇到一些問題,需要注意的如下:

(1)該驅動爲用戶態模式驅動,如果想要將圖片數據發送給底層硬件,需要先轉發給內核態驅動,由內核態驅動同硬件交互。

(2)該驅動不能作爲虛擬驅動存在,他需要安裝在一個設備上,否則IddCxAdapterInitAsync函數會返回失敗。

(3)該驅動貌似只能裝在usb設備上,我之前嘗試裝在PCI設備上,雖然系統上會出現一個虛擬顯示器,但是隻要你一使用這個顯示器,“桌面窗口管理器”消耗cpu資源會迅速上升,而且IddSampleMonitorAssignSwapChain都不會被操作系統調用。

 

如下是我實現的雙屏效果:

 

如果有人用到這個框架,在開發過程中有遇到新的發現,請留言討論。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章