準虛擬化的域著色器、外殼著色器和幾何著色器的制造方法
【專利摘要】本發明涉及用于在準虛擬化環境中提供域著色器、外殼著色器和幾何著色器的方法、系統及計算機程序產品。由此,使得在子分區中執行的訪客應用能夠使用物理GPU的可編程GPU流水線。vGPU(在子分區中執行)被呈現給訪客應用。vGPU展現呈現框架的DDI。DDI使訪客應用能夠向vGPU發送圖形命令,包括在物理GPU處利用域著色器、外殼著色器,和/或幾何著色器的命令。呈現組件(在根分區中執行)從vGPU接收物理GPU專用命令,包括用于使用域著色器、外殼著色器,和/或幾何著色器的命令。呈現組件調度物理GPU專用命令以供在物理GPU處執行。
【專利說明】準虛擬化的域著色器、外殼著色器和幾何著色器
[0001]背景
[0002]1.背景和相關技術
[0003]計算機系統及相關技術影響社會的許多方面。的確,計算機系統處理信息的能力已轉變了人們生活和工作的方式。現在,計算機系統通常執行在計算機系統出現以前手動執行的許多任務(例如,文字處理、日程安排、帳目管理等)。最近,計算機系統彼此耦合并耦合到其他電子設備以形成計算機系統及其他電子設備可在其上傳輸電子數據的有線和無線計算機網絡。因此,許多計算任務的執行分布在多個不同的計算機系統和/或多個不同的計算環境中。
[0004]一些計算機被配置成提供準虛擬化執行環境,準虛擬化執行環境允許訪客軟件以隔離方式共享單個計算機系統的硬件設備。一般而言,準虛擬化執行環境提供受系統管理程序支持的多個分區。每一分區包括供軟件在其中執行的隔離執行環境。分區一般包括根分區以及一個或多個子分區。根分區運行主機操作系統并管理虛擬化棧。根分區可獲得對物理設備的訪問。每一子分區托管訪客軟件(例如,訪客操作系統和訪客應用)。通過虛擬設備和系統管理程序的軟件界面向子分區提供對物理設備的訪問。
[0005]一些準虛擬化執行環境給子分區(以及在其中運行的訪客軟件)提供對一個或多個物理圖形處理單元(“GPU”)的準虛擬化訪問。對物理GPU的準虛擬化訪問的每個實現通常支持單個呈現框架。由此,如果訪客軟件正在不支持這些GPU功能的準虛擬化執行環境中執行,訪客軟件可能無法訪問物理GPU的一個或多個GPU功能。例如,如果準虛擬化執行環境支持呈現框架的傳統版本,則在該準虛擬化執行環境中執行的訪客軟件不能利用由呈現框架的新版本實現的GPU功能。即使這些功能被物理GPU支持也是如此。
[0006]因此,訪客軟件可能需要執行不被它正在其中運行的準虛擬化環境支持的GPU功能。當發生這種情況時,訪客軟件可依賴于使用全虛擬化處理單元,可使用轉換層來執行GPU功能,和/或可使用受準虛擬化環境支持的低級GPU功能。這些方案中的任何方案可潛在地導致訪客軟件性能的顯著損失。在一些情況中,訪客軟件可能根本無法執行GPU功能,引起訪客軟件的錯誤和/或訪客軟件的功能性減少。
【發明內容】
[0007]本發明涉及用于在準虛擬化環境中提供域著色器、外殼著色器和幾何著色器的方法、系統及計算機程序產品。由此,本發明的實施例向訪客應用提供了富可編程GPU流水線。
[0008]實施例包括一種用于向正在準虛擬化執行環境的子分區中執行的訪客應用提供可編程GPU流水線的方法。虛擬機會話被實例化。虛擬機會話包括提供(i)根分區(其具有對物理GPU的訪問)以及(ii)子分區(其執行訪客應用)的系統管理程序。
[0009]還在子分區中執行的虛擬化圖形處理單元(“vGPU”)被呈現給訪客應用。該vGPU向訪客應用呈現呈現框架的設備驅動器接口( “DDI”)作為用戶模式驅動器(“UMD”)的一部分。DDI提供使訪客應用能夠向vGPU發送命令的API。API使訪客應用能夠編程物理GTO的GPU流水線以利用呈現框架的一個或多個特征,包括利用域著色器、外殼著色器,和/或幾何著色器。
[0010]在根分區中執行的呈現組件從vGPU接收一個或多個物理GPU專用命令。物理GPU專用命令用于物理GPU處的域著色器、外殼著色器或幾何著色器。呈現組件調度物理GPU專用命令以供在物理GPU處執行。
[0011]提供本概述是為了以簡化的形式介紹將在以下【具體實施方式】中進一步描述的一些概念。本概述不旨在標識出所要求保護的主題的關鍵特征或必要特征,也不旨在用于幫助確定所要求保護的主題的范圍。
[0012]在隨后的描述中闡述,并且部分地將從本說明書中顯而易見,或可以通過本發明的實施來獲知。本發明的特征和優點可通過在所附權利要求書中特別指出的工具和組合來實現和獲得。本發明的這些以及其它特征、優點和特征將根據以下描述和所附權利要求而變得更顯而易見,或者可通過如此后闡述的對本發明的實踐而獲知。
【專利附圖】
【附圖說明】
[0013]為了描述可以獲得本發明的上文所列舉的及其他優點和特征的方式,將通過參考附圖中所示的本發明的各具體實施例來呈現上文簡要描述的本發明的更具體的描述。可以理解,這些附圖僅描述本發明的典型實施例,從而不被認為是對其范圍的限制,本發明將通過使用附圖用附加特征和細節來描述和說明,在附圖中:
[0014]圖1解說促成向正在準虛擬化執行環境的子分區中執行的訪客應用提供可編程圖形處理單元(“GPU”)流水線的示例計算機架構。
[0015]圖2解說用于向正在準虛擬化執行環境的子分區中執行的訪客應用提供可編程GPU流水線的示例方法的流程圖。
[0016]詳細描沭
[0017]本發明涉及用于在準虛擬化環境中提供域著色器、外殼著色器和幾何著色器的方法、系統及計算機程序產品。由此,本發明的實施例向訪客應用提供了富可編程GPU流水線。
[0018]實施例包括一種用于向正在準虛擬化執行環境的子分區中執行的訪客應用提供可編程GPU流水線的方法。虛擬機會話被實例化。虛擬機會話包括提供(i)根分區(其具有對物理GPU的訪問)以及(ii)子分區(其執行訪客應用)的系統管理程序。
[0019]也在子分區中執行的虛擬化圖形處理單元(“vGPU)被呈現給訪客應用。”該vGPU向訪客應用呈現呈現框架的設備驅動器接口( “DDI”)作為用戶模式驅動器(“UMD)的一部分。”DDI提供使訪客應用能夠向vGPU發送命令的API。API使訪客應用能夠編程物理GTO的GPU流水線以利用呈現框架的一個或多個特征,包括利用域著色器、外殼著色器,和/或幾何著色器。
[0020]在根分區中執行的呈現組件從vGPU接收一個或多個物理GPU專用命令。物理GPU專用命令用于物理GPU處的域著色器、外殼著色器或幾何著色器。呈現組件調度物理GPU專用命令以供在物理GPU處執行。
[0021]本發明的各實施例可包括或利用專用或通用計算機,該專用或通用計算機包括諸如舉例而言一個或多個處理器和系統存儲器的計算機硬件,如以下更詳細討論的。本發明范圍內的各實施例還包括用于承載或存儲計算機可執行指令和/或數據結構的物理和其他計算機可讀介質。這樣的計算機可讀介質可以是可由通用或專用計算機系統訪問的任何可用介質。存儲計算機可執行指令的計算機可讀介質是計算機存儲介質(設備)。承載計算機可執行指令的計算機可讀介質是傳輸介質。由此,作為示例而非限制,本發明的各實施例可包括至少兩種顯著不同的計算機可讀介質:計算機存儲介質(設備)和傳輸介質。
[0022]計算機存儲介質(設備)包括RAM、ROM、EEPROM、CD-ROM、固態驅動器(SSD)(如基于RAM)、閃存、相變存儲器(PCM)、其他類型的存儲器、其他光盤存儲、磁盤存儲或其他磁存儲設備、或可用于存儲計算機可執行指令或數據結構形式的所需程序代碼裝置且可由通用或專用計算機訪問的任何其他介質。
[0023]“網絡”被定義為使得電子數據能夠在計算機系統和/或模塊和/或其它電子設備之間傳輸的一個或多個數據鏈路。當信息通過網絡或另一個通信連接(硬連線、無線、或者硬連線或無線的組合)傳輸或提供給計算機時,該計算機將該連接適當地視為傳輸介質。傳輸介質可包括可用于攜帶計算機可執行指令或數據結構形式的所需程序代碼裝置并可由通用或專用計算機訪問的網絡和/或數據鏈路。上述的組合也應被包括在計算機可讀介質的范圍內。
[0024]此外,在到達各種計算機系統組件之后,計算機可執行指令或數據結構形式的程序代碼裝置可從傳輸介質自動傳輸到計算機存儲介質(設備)(或反之亦然)。例如,通過網絡或數據鏈接接收到的計算機可執行指令或數據結構可被緩存在網絡接口模塊(例如,“NIC”)內的RAM中,然后最終被傳輸到計算機系統RAM和/或計算機系統處的較不易失性的計算機存儲介質(設備)。因而,應當理解,計算機存儲介質(設備)可被包括在還利用(甚至主要利用)傳輸介質的計算機系統組件中。
[0025]計算機可執行指令例如包括,當在處理器處執行時使通用計算機、專用計算機、或專用處理設備執行某一功能或某組功能的指令和數據。計算機可執行指令例如可以是二進制代碼、諸如匯編語言之類的中間格式指令或者甚至是源代碼。盡管用結構特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權利要求書中定義的主題不必限于上述特征或動作。更具體而言,上述特征和動作是作為實現權利要求的示例形式而公開的。
[0026]本領域的技術人員將理解,本發明可以在具有許多類型的計算機系統配置的網絡計算環境中實踐,這些計算機系統配置包括個人計算機、臺式計算機、膝上型計算機、消息處理器、手持式設備、多處理器系統、基于微處理器的或可編程消費電子設備、網絡PC、小型計算機、大型計算機、移動電話、PDA、平板、尋呼機、路由器、交換機等等。本發明也可在其中通過網絡鏈接(或者通過硬連線數據鏈路、無線數據鏈路,或者通過硬連線和無線數據鏈路的組合)的本地和遠程計算機系統兩者都執行任務的分布式系統環境中實施。在分布式系統環境中,程序模塊可以位于本地和遠程存儲器存儲設備二者中。
[0027]圖1解說促成向正在準虛擬化執行環境的子分區中執行的訪客應用提供可編程GI3U流水線的示例計算機架構100。參考圖1,計算機架構100包括物理硬件102。物理硬件102可包括任何適合的硬件設備,諸如一個或多個通用處理器、系統存儲器,等等。如所描繪的,物理硬件102包括物理GPU104,并且可包括多個物理GPU。
[0028]物理GPU104是被配置成執行并行處理任務(諸如圖形呈現任務)的處理設備。物理GPU104支持各種GPU功能。一些受支持的GPU功能是固定功能,而一些受支持的GPU功能是可編程功能。可編程功能提供可編程呈現流水線(與僅固定呈現流水線相對)。可編程呈現流水線使一個GPU功能的輸出能夠變成另一個GPU功能的輸入。具體而言,物理GPU104支持傳統可編程功能(B卩,被傳統呈現框架支持的功能)和較新的可編程功能(即,被較新的呈現框架支持的功能)。傳統可編程功能可包括頂點著色器和像素著色器。較新的可編程功能可包括域著色器、外殼著色器和幾何著色器。
[0029]計算機架構100還包括系統管理程序106。系統管理程序106在物理硬件102之上執行并且支持虛擬化平臺。虛擬化平臺提供多個分區。每一分區提供訪客軟件在其中執行的隔離邏輯單元。如描繪的,計算機架構100包括根分區108和子分區110。
[0030]根分區108執行主機操作系統,并且具有對物理硬件102的直接訪問(如物理硬件102上顯現的根分區108所描繪的)。每一子分區提供用于執行訪客應用的執行環境(例如操作系統和/或應用)并且可以按準虛擬化方式間接地訪問物理硬件102。也即,每一子分區向訪客軟件提供一個或多個軟件界面(例如,虛擬化硬件)。訪客軟件進而使用軟件界面來訪問物理硬件102。計算機架構100可包括多個子分區。
[0031]如所描繪的,訪客軟件112在子分區110中執行。訪客軟件112包括操作系統和/或在操作系統中執行的應用程序。訪客軟件112包括或使用圖形運行時114。訪客軟件112可以是包括運行時114的操作系統,或者可以是在操作系統中執行的使用由操作系統提供的圖形運行時114的應用。圖形運行時114與一個或多個圖形呈現框架對應,并且提供使訪客軟件112能夠請求對受支持的呈現框架的GPU功能(例如,各種著色器)的執行的 API。
[0032]子分區110向訪客軟件112提供對vGPUl 16的訪問。vGPUl 16使物理GPU104虛擬化,使訪客軟件112能夠間接地訪問物理GPU104。由此,vGPUl 16被配置成向訪客軟件112展示受圖形運行時114支持的呈現框架的功能性的全部或子集連同物理GPU104的任何對應功能性。
[0033]具體而言,vGPUl 16被配置成向訪客軟件112展現使訪客軟件112能夠調用vGPUl 16以供訪問物理GPUlOla的GPU功能的一個或多個軟件界面。vGPU106進而結合根分區108中的呈現組件132來工作以在物理GPU104上執行任何經請求的GPU功能。
[0034]如所描繪的,VGPU116包括用戶模式驅動器118以及在子分區110的用戶模式中執行的傳統用戶模式驅動器112。每一用戶模式驅動器展現一個或多個設備驅動器接口(“DDI”),其使訪客軟件112能夠通過調用vGPUl 16在物理GPU104處間接地請求對GPU功能的執行。傳統用戶模式驅動器122展現與受傳統呈現框架支持的GPU功能性對應的傳統DDI124。例如,傳統DDI124可包括與固定GPU功能相關的DDI,或與受傳統呈現框架(諸如頂點著色器和/或像素著色器)支持的一些可編程GPU功能相關的DDI。由此,VGPU116的傳統用戶模式驅動器122使圖形運行時114能夠利用傳統呈現框架。
[0035]另一方面,用戶模式驅動器118展示與受一個或多個較新呈現框架支持的GPU功能性對應的以及不被傳統呈現框架支持的GPU功能性對應的DDI120。例如,DDI120可包括與附加可編程GPU功能相關的DDI,諸如域著色器、外殼著色器和/或幾何著色器。在一些實施例中DDI120展示受一個或多個較新呈現框架支持的所有DDI。
[0036]在一些實施例中,每一用戶模式驅動器展示來自微軟?公司的DirectX敗呈現框架的DDI。例如,傳統用戶模式驅動器122可支持DirectX?系列的第9版(例如,版本9.0c)。由此,傳統DDI124可包括來自Direct3D系列的第9版(例如,與固定GPU功能以及與受第9版Direct3D支持的一些可編程GPU功能相關的DDI,諸如頂點著色器和/或像素著色器)的DDI。繼續DiKCtXB.的示例,用戶模式驅動器118可支持一個或多個較新版本的DirectX?,諸如DirectX?系列的第10版和/或第11版。由此,DDI120可包括來自第10版和/或第11版的Direct3D中的一個或多個的DDI (例如,與域著色器、外殼著色器和/或幾何著色器相關的DDI)。此外,DDI120還可包括Direct2D DDI。在一些實施例中,DDI120包括所有第10版和第11版DirectX? DDI,從而使圖形運行時114能夠利用第10版和第11版DirectX?全部功能性范圍。
[0037]在一些實施例中,DDI120包括與第10版、第10.1版以及第11版Direct3D相關的以下DDI:
[0038]Direct3D10
[0039]PFND3DIODDI_CALCPRIVATEDEPTHSTENCILSTATESIZE
[0040]pfnCalcPrivateDepthStenciIStateSize ;
[0041]PFND3D10DDI—CALCPRIVATEELEMENTLAYOUTSIZE
[0042]pfnCalcPrivateElementLayoutSize ;
[0043]PFND3D10DDI—CALCPRIVATEOPENEDRESOURCESIZE
[0044]pfnCalcPrivateOpenedResourceSize ;
[0045]PFND3D10DDI—CALCPRIVATEQUERYSIZE
[0046]pfnCalcPrivateQuerySize ;
[0047]PFND3D10DDI—CALCPRIVATERASTERIZERSTATESIZE
[0048]pfnCalcPrivateRasterizerStateSize ;
[0049]PFND3D10DDI—CALCPRIVATERENDERTARGETVIEWSIZE
[0050]pfnCalcPrivateRenderTargetViewSize ;
[0051]PFND3D10DDI—CALCPRIVATESAMPLERSIZE
[0052]pfnCalcPrivateSamplerSize ;
[0053]PFND3D10DDI_CALCPRIVATESHADERSIZE
[0054]pfnCalcPrivateShaderSize ;
[0055]PFND3D10DDI—CHECKC0UNTER
[0056]pfnCheckCounter ;
[0057]PFND3D10DDI—CHECKC0UNTERINF0
[0058]pfnCheckCounter Info ;
[0059]PFND3D10DDI—CHECKF0RMATSUPP0RT
[0060]pfnCheckFormatSupport ;
[0061]PFND3D10DDI_CHECKMULTISAMPLEQUALITYLEVELS
[0062]pfnCheckMultisampIeQualityLeveIs ;
[0063]PFND3D10DDI—CLEARDEPTHSTENCILVIEW
[0064]pfnClearDepthStenciIView ;
[0065]PFND3D10DDI—CLEARRENDERTARGETVIEW[0066]pfnClearRenderTargetView ;
[0067]PFND3D10DDI—CREATEDEPTHSTENCILSTATE
[0068]pfnCreateDepthStenciIState ;
[0069]PFND3D10DDI—CREATEELEMENTLAYOUT
[0070]pfnCreateElementLayout ;
[0071 ]PFND3D10DDI—CREATEGEOMETRYSHADER
[0072]pfnCreateGeometryShader ;
[0073]PFND3D10DDI—CREATEPIXELSHADER
[0074]pfnCreatePixeIShader ;
[0075]PFND3D10DDI—CREATEQUERY
[0076]pfnCreateQuery ;
[0077]PFND3DIODDI_CREATERASTERIZERSTATE
[0078]pfnCreateRasterizerState ;
[0079]PFND3D10DDI—CREATERENDERTARGETVIEW
[0080]pfnCreateRenderTargetView ;
[0081 ]PFND3D10DDI—CREATESAMPLER
[0082]pfnCreateSampler ;
[0083]PFND3DIODDI—CREATEVERTEXSHADER
[0084]pfnCreateVertexShader ;
[0085]PFND3D10DDI—DESTROYBLENDSTATE
[0086]pfnDestroyBlendState ;
[0087]PFND3D10DDI—DESTROYDEPTHSTENCILSTATE
[0088]pfnDestroyDepthStenciIState ;
[0089]PFND3D10DDI_DESTR0YDEPTHSTENCILVIEW
[0090]pfnDestroyDepthStenciIView ;
[0091]PFND3D10DDI—DESTROYDEVICE
[0092]pfnDestroyDevice ;
[0093]PFND3D10DDI—DESTROYELEMENTLAYOUT
[0094]pfnDestroyElementLayout ;
[0095]PFND3D10DDI—DESTROYQUERY
[0096]pfnDestroyQuery ;
[0097]PFND3DIODDI_DESTROYRASTERIZERSTATE
[0098]pfnDestroyRasterizerState ;
[0099]PFND3D10DDI_DESTR0YRENDERTARGETVIEW
[0100]pfnDestroyRenderTargetView ;PFND3D10DDI—DESTROYRESOURCE
[0101]pfnDestroyResource ;
[0102]PFND3D10DDI—DESTROYSAMPLER
[0103]pfnDestroySampler ;
[0104]PFND3D10DDI—DESTROYSHADER[0105]pfnDestroyShader ;
[0106]PFND3D10DDI—DESTROYSHADERRESOURCEVIEW
[0107]pfnDestroyShaderResourceView ;
[0108]PFND3D10DDI—DRAW
[0109]pfnDraw ;
[0110]PFND3D10DDI_DRAWAUT0
[0111]pfnDrawAuto ;
[0112]PFND3D10DDI—DRAWINDEXED
[0113]pfnDrawIndexed ;
[0114]PFND3D10DDI—DRAWINDEXEDINSTANCED
[0115]pfnDrawIndexedlnstanced ;
[0116]PFND3D10DDI—DRAWINSTANCED
[0117]pfnDrawInstanced ;
[0118]PFND3D10DDI—FLUSH
[0119]pfnFlush ;
[0120]PFND3D10DDI—GENMIPS
[0121]pfnGenMips ;
[0122]PFND3D10DDI—IA—SETINDEXBUFFER
[0123]pfnlaSetIndexBuffer ;
[0124]PFND3D10DDI—IA—SETTOPOLOGY
[0125]pfnlaSetTopology ;
[0126]PFND3D10DDI—IA—SETVERTEXBUFFERS
[0127]pfnlaSetVertexBuffers ;
[0128]PFND3D10DDI—OPENRESOURCE
[0129]pfnOpenResource ;
[0130]PFND3D10DDI—QUERYBEGIN
[0131]pfnQueryBegin ;
[0132]PFND3D10DDI—QUERYEND
[0133]pfnQueryEnd ;
[0134]PFND3D10DDI—QUERYGETDATA
[0135]pfnQueryGetData ;
[0136]PFND3D10DDI_RESETPRIMITIVEID
[0137]pfnResetPrimitivelD ;
[0138]PFND3D10DDI—RESOURCECOPY
[0139]pfnResourceCopy ;
[0140]PFND3D10DDI—RESOURCECOPY
[0141]pfnResourceConvert ;
[0142]PFND3D10DDI—RESOURCECOPYREGION
[0143]pfnResourceCopyRegion ;[0144]PFND3DIODDI_RES0URCEC0PYREGION
[0145]pfnResourceConvertRegion ;
[0146]PFND3D10DDI_RES0URCEISSTAGINGBUSY
[0147]pfnResourceIsStagingBusy ;
[0148]PFND3D10DDI_RES0URCEMAP
[0149]pfnDynami cIABufferMapNoOverwri te ;
[0150]PFND3D10DDI_RES0URCEMAP
[0151]pfnDynamicConstantBufferMapDiscard ;
[0152]PFND3D10DDI_RES0URCEMAP
[0153]pfnDynamicIABufferMapDiscard ;
[0154]PFND3D10DDI_RES0URCEMAP
[0155]pfnDynamicResourceMapDiscard ;
[0156]PFND3D10DDI_RES0URCEMAP
[0157]pfnStagingResourceMap ;
[0158]PFND3D10DDI_RES0URCEMAP
[0159]pfnResourceMap ;
[0160]PFND3D10DDI_RES0URCEREADAFTERWRITEHAZARD
[0161]pfnResourceReadAfterffriteHazard ;
[0162]PFND3D10DDI_RES0URCERES0LVESUBRES0URCE
[0163]pfnResourceResoIveSubresource ;
[0164]PFND3D10DDI_RES0URCEUNMAP
[0165]pfnDynamicIABufferUnmap ;
[0166]PFND3D10DDI_RES0URCEUNMAP
[0167]pfnDynamicConstantBufferUnmap ;
[0168]PFND3D10DDI_RES0URCEUNMAP
[0169]pfnDynamicResourceUnmap ;
[0170]PFND3D10DDI_RES0URCEUNMAP
[0171]pfnStagingResourceUnmap ;
[0172]PFND3D10DDI_RES0URCEUNMAP
[0173]pfnResourceUnmap ;
[0174]PFND3D10DDI_RES0URCEUPDATESUBRES0URCEUP
[0175]pfnDefaultConstantBufferUpdateSubresourceUP ;
[0176]PFND3D10DDI_RES0URCEUPDATESUBRES0URCEUP
[0177]pfnResourceUpdateSubresourceUP ;
[0178]PFND3D10DDI_SETBLENDSTATE
[0179]pfnSetBlendState ;
[0180]PFND3DIODDI_SETC0NSTANTBUFFERS
[0181]pfnVsSetConstantBuffers ;
[0182]PFND3DIODDI_SETC0NSTANTBUFFERS[0183]pfnPsSetConstantBuffers ;
[0184]PFND3DIODDI_SETCONSTANTBUFFERS
[0185]pfnGsSetConstantBuffers ;
[0186]PFND3DIODDI_SETCONSTANTBUFFERS
[0187]pfnHsSetConstantBuffers ;
[0188]PFND3DIODDI_SETCONSTANTBUFFERS
[0189]pfnDsSetConstantBuffers ;
[0190]PFND3D10DDI—SETDEPTHSTENCILSTATE
[0191]pfnSetDepthStenciIState ;
[0192]PFND3D10DDI—SETINPUTLAYOUT
[0193]pfnlaSetInputLayout ;
[0194]PFND3DIODDI_SETPREDICATION
[0195]pfnSetPredication ;
[0196]PFND3D10DDI—SETRASTERIZERSTATE
[0197]pfnSetRasterizerState ;
[0198]PFND3D10DDI—SETSAMPLERS
[0199]pfnPsSetSamplers ;
[0200]PFND3D10DDI—SETSAMPLERS
[0201]pfnVsSetSamplers ;
[0202]PFND3D10DDI—SETSAMPLERS
[0203]pfnGsSetSamplers ;
[0204]PFND3D10DDI—SETSAMPLERS
[0205]pfnHsSetSamplers ;
[0206]PFND3D10DDI—SETSAMPLERS
[0207]pfnDsSetSamplers ;
[0208]PFND3D10DDI—SETSCISSORRECTS
[0209]pfnSetScissorRects ;
[0210]PFND3DI ODD I_SETSHADER
[0211]pfnPsSetShader ;
[0212]PFND3DI ODD I_SETSHADER
[0213]pfnVsSetShader ;
[0214]PFND3DI ODD I_SETSHADER
[0215]pfnGsSetShader ;
[0216]PFND3DI ODD I_SETSHADER
[0217]pfnHsSetShader ;
[0218]PFND3DI ODD I_SETSHADER
[0219]pfnDsSetShader ;
[0220]PFND3D10DDI—SETSHADERRESOURCES
[0221]pfnPsSetShaderResources ;[0222]PFND3D10DDI—SETSHADERRESOURCES
[0223]pfnVsSetShaderResources ;
[0224]PFND3D10DDI—SETSHADERRESOURCES
[0225]pfnGsSetShaderResources ;
[0226]PFND3D10DDI—SETSHADERRESOURCES
[0227]pfnHsSetShaderResources ;
[0228]PFND3D10DDI—SETSHADERRESOURCES
[0229]pfnDsSetShaderResources ;
[0230]PFND3D10DDI—SETTEXTFILTERSIZE
[0231]pfnSetTextFiIterSize ;
[0232]PFND3D10DDI_SETVERTEXPIPELINE0UTPUT
[0233]pfnSetVertexPipeIineOutput ;
[0234]PFND3D10DDI—SETVIEWPORTS
[0235]pfnSetViewports ;
[0236]PFND3D10DDI_SHADERRES0URCEVIEWREADAFTERWRITEHAZARD
[0237]pfnShaderResourceViewReadAfterWriteHazard ;
[0238]PFND3D10DDI—SO—SETTARGETS
[0239]pfnSoSetTargets ;
[0240]Direct3D10.1
[0241]PFND3D10—1DDI—CALCPRIVATEBLENDSTATESIZE
[0242]pfnCalcPrivateBlendStateSize ;
[0243]PFND3D10—1DDI—CREATEBLENDSTATE
[0244]pfnCreateBlendState ;
[0245]Direct3Dll
[0246]PFND3D11DDI—ABANDONCOMMANDLIST
[0247]pfnAbandonCommandList ;
[0248]PFND3D11DDI—CALCDEFERREDCONTEXTHANDLESIZE
[0249]pfnCalcDeferredContextHandleSize ;
[0250]PFND3D11DDI—CALCPRIVATECOMMANDLISTSIZE
[0251]pfnCalcPrivateCommandListSize ;
[0252]PFND3D11DDI—CALCPRIVATEDEFERREDCONTEXTSIZE
[0253]pfnCalcPrivateDeferredContextSize ;
[0254]PFND3D11DDI—CALCPRIVATEDEPTHSTENCILVIEWSIZE
[0255]pfnCalcPrivateDepthStenciIViewSize ;
[0256]PFND3D11DDI_CALCPRIVATEGE0METRYSHADERWITHSTREAM0UTPUT
[0257]pfnCalcPrivateGeometryShaderWithStreamOutput ;
[0258]PFND3D11DDI—CALCPRIVATERESOURCESIZE
[0259]pfnCalcPrivateResourceSize ;
[0260]PFND3D11DDI—CALCPRIVATESHADERRESOURCEVIEWSIZE[0261]pfnCalcPrivateShaderResourceViewSize ;
[0262]PFND3D11DDI—CALCPRIVATETESSELLATIONSHADERSIZE
[0263]pfnCalcPrivateTesseIIationShaderSize ;
[0264]PFND3D11DDI—CALCPRIVATEUNORDEREDACCESSVIEWSIZE
[0265]pfnCalcPrivateUnorderedAccessViewSize ;
[0266]PFND3D11DDI_CHECKDEFERREDC0NTEXTHANDLESIZES
[0267]pfnCheckDeferredContextHandleSizes ;
[0268]PFND3D11DDI—CLEARUNORDEREDACCESSVIEWFLOAT
[0269]pfnClearUnorderedAccessViewFloat ;
[0270]PFND3D11DDI—CLEARUNORDEREDACCESSVIEWUINT
[0271]pfnClearUnorderedAccessViewUint ;
[0272]PFND3D11DDI—COMMANDLISTEXECUTE
[0273]pfnCommandListExecute ;
[0274]PFND3D11DDI_C0PYSTRUCTUREC0UNT
[0275]pfnCopyStructureCount ;
[0276]PFND3D11DDI—CREATECOMMANDLIST
[0277]pfnCreateCommandList ;
[0278]PFND3D11DDI—CREATEDEFERREDCONTEXT
[0279]pfnCreateDeferredContext ;
[0280]PFND3D11DDI—CREATEDEPTHSTENCILVIEW
[0281]pfnCreateDepthStenciIView ;
[0282]PFND3D11DDI—CREATEDOMAINSHADER
[0283]pfnCreateDomainShader ;
[0284]PFND3D11DDI_CREATEGE0METRYSHADERWITHSTREAM0UTPUT
[0285]pfnCreateGeometryShaderWithStreamOutput ;
[0286]PFND3D11DDI_CREATEHULLSHADER
[0287]pfnCreateHulIShader ;
[0288]PFND3D11DDI—CREATERESOURCE
[0289]pfnCreateResource ;
[0290]PFND3D11DDI—CREATESHADERRESOURCEVIEW
[0291]pfnCreateShaderResourceView ;
[0292]PFND3D11DDI—CREATEUNORDEREDACCESSVIEW
[0293]pfnCreateUnorderedAccessView ;
[0294]PFND3D11DDI—DESTROYCOMMANDLIST
[0295]pfnDestroyCommandList ;
[0296]PFND3D11DDI—DESTROYCOMMANDLIST
[0297]pfnRecycIeDestroyCommandList ;
[0298]PFND3D11DDI_DESTR0YUN0RDEREDACCESSVIEW
[0299]pfnDestroyUnorderedAccessView ;
【權利要求】
1.在包括一個或多個處理器以及系統存儲器的計算機系統處,所述計算機系統還包括物理圖形處理單元(“GPU”),一種用于向在準虛擬化執行環境的子分區中執行的訪客應用提供可編程GPU流水線的方法,所述方法包括: 實例化虛擬機會話的動作,包括對提供(i)具有對所述物理GPU的訪問的根分區以及(ii)執行所述訪客應用的子分區的系統管理程序進行實例化; 向所述訪客應用呈現虛擬化的圖形處理單元(“vGPU”)的動作,所述vGPU在所述子分區中執行,包括向所述訪客應用呈現呈現框架的多個設備驅動器接口(“DDI”)作為所述vGPU的用戶模式驅動器(“UMD”)的一部分,所述多個DDI提供使所述訪客應用能夠向所述vGPU發送命令以供編程所述物理GPU的GPU流水線來利用所述呈現框架的一個或多個特征的應用編程接口,包括利用域著色器、外殼著色器,或幾何著色器中的至少一個;以及 在所述根分區中執行的呈現組件從所述vGPU接收至少一個物理GPU專用命令以供在所述物理GPU處使用域著色器、外殼著色器或幾何著色器中的一個或多個的動作;以及 呈現組件調度至少一個物理GPU專用命令以供在所述物理GPU處執行的動作。
2.如權利要求1所述的方法,其特征在于,所述在根分區中執行的呈現組件從所述vGPU接收至少一個物理GPU專用命令的動作包括所述呈現組件接收至少一個物理GPU專用命令以供使用域著色器的動作。
3.如權利要求1所述的方法,其特征在于,所述在根分區中執行的呈現組件從所述vGPU接收至少一個物理GPU專用命令的動作包括所述呈現組件接收至少一個物理GPU專用命令以供使用外殼著色器 的動作。
4.如權利要求1所述的方法,其特征在于,所述在根分區中執行的呈現組件從所述vGPU接收至少一個物理GPU專用命令的動作包括呈現組件接收至少一個物理GPU專用命令以供使用幾何著色器的動作。
5.如權利要求1所述的方法,其特征在于,所述UMD把從所述訪客應用收到的任何圖形命令轉換成對應的物理GPU專用命令并且在命令緩沖器中存儲所述對應的物理GPU專用命令。
6.如權利要求5所述的方法,其特征在于,所述向訪客應用呈現所述vGPU的動作包括呈現包括內核模式驅動器(“KMD”)的vGPU的動作,所述KMD被配置成從所述命令緩沖器構建直接存儲器存取緩沖器。
7.如權利要求6所述的方法,其特征在于,所述UMD向所述KMD發送包含物理GPU專用計算著色器命令的命令緩沖器。
8.如權利要求6所述的方法,其特征在于,對提供(i)具有對所述物理GPU的訪問的根分區以及(ii)執行所述訪客應用的子分區的系統管理程序進行實例化包括在所述UMD、所述KMD和所述呈現組件間協商一個或多個通信協議的動作,包括確定合成設備的類型以基于受所述UMD支持的呈現框架的版本來實例化。
9.如權利要求1所述的方法,其特征在于,所述多個DDI使所述訪客應用能夠向所述vGPU發送圖形命令以供編程所述物理GPU的GPU流水線來利用所述呈現框架的所有特征。
10.如權利要求9所述的方法,其特征在于,所述UMD包括被啟用以與傳統UMD并發執行的新UMD,并且其中所述呈現組件被啟用以與新UMD和傳統UMD兩者通信,從而使新的三維呈現框架和傳統三維呈現框架兩者能被并發地使用。
11.一種供在計算機系統處使用的計算機程序產品,所述計算機程序產品用于實現一種向在準虛擬化執行環境的子分區中執行的訪客應用提供GPU加速的計算功能性的方法,所述計算機程序產品包括其上存儲有計算機可執行指令的一個或多個計算機存儲介質,當所述計算機可執行指令在處理器處被執行時使得所述計算機系統執行所述方法,所述方法包括以下: 實例化虛擬機會話,包括對提供(i)具有對所述物理GPU的訪問的根分區以及(ii)執行所述訪客應用的子分區的系統管理程序進行實例化; 向所述訪客應用呈現虛擬化的圖形處理單元(“vGPU”),所述vGPU在子分區中執行,包括向所述訪客應用呈現呈現框架的多個設備驅動器接口(“DDI”)作為所述vGPU的用戶模式驅動器(“UMD”)的一部分,所述多個DDI提供使所述訪客應用能夠向所述vGPU發送命令以供編程物理GPU的GPU流水線來利用所述呈現框架的一個或多個特征的應用編程接口,包括利用域著色器、外殼著色器,或幾何著色器中的至少一個;以及 在所述根分區中執行的呈現組件處接收至少一個物理GPU專用命令以供在所述物理GPU處使用域著色器、外殼著色器或幾何著色器中的一個或多個;以及調度所述至少一個物理GPU專用命令以供在所述物理GPU處執行。
12.如權利要求11所述的計算機程序產品,其特征在于,所述UMD把從所述訪客應用收到的任何圖形命令轉換成對應的物理GPU專用命令并且在命令緩沖器中存儲所述對應的物理GPU專用命令。
13.如權利要求12所述的計算機程序產品,其特征在于,所述向訪客應用呈現所述vGPU的動作包括呈現包括內核模式驅動器(“KMD”)的vGPU的動作,所述KMD被配置成從所述命令緩沖器構建直接存儲器存取緩沖器。
14.如權利要求11所述的計算機程序產品,其特征在于,所述多個DDI使所述訪客應用能夠向所述vGPU發送命令以供編程所述物理GPU的GPU流水線來利用Direct2D和Direct3D兩者的功能。
15.一種計算機系統,所述計算機系統包括: 一個或多個處理器; 圖形處理單元(“GPU”); 系統存儲器;以及 一個或多個計算機可讀存儲設備,其上存儲有表示虛擬化的圖形處理單元(“vGPU”)和呈現組件的計算機可執行指令, 其中所述vGPU被配置成在子分區中執行并且包括用戶模式驅動器(“UMD”),所述用戶模式驅動器被配置成: 向在子分區中執行的訪客應用呈現DirectX呈現框架的多個設備驅動器接口(“DDI”),所述多個DDI提供使所述訪客應用能夠向所述vGPU發送命令以供編程所述GPU的GPU流水線來利用所述DirectX呈現框架的域著色器、外殼著色器,或幾何著色器中的一個或多個的應用編程接口 ;以及 將vGPU專用命令轉換成GPU專用命令;以及 其中所述呈現組件被配置成在根分區中執行以及在使用所述DirectX呈現框架的域著色器、外殼著色器,或幾何著色器中的一個或多個的同時從所述vGPU接收至少一個GPU專 用命令以及調度所述至少一個物理GPU專用命令以供在所述GPU處執行。
【文檔編號】G06F9/38GK104040494SQ201380005279
【公開日】2014年9月10日 申請日期:2013年1月10日 優先權日:2012年1月13日
【發明者】M·P·馬拉卡帕利, H·張, L·譚, M·巴魯, P·斯坦恩斯庫, B·A·庫瑪, E·K·韓, A·貝爾金, J·D·梅杰, W·M·P·約翰斯通 申請人:微軟公司