列舉 Cofunctional VidPN 來源和目標模式
本主題描述影片呈現網路 (VidPN) 管理員和顯示迷你埠驅動程式如何共同作業,以列舉影片呈現來源和目標上可用的模式。 閱讀本材料之前,您應該先熟悉下列主題中的內容:
VidPN 管理員不時會要求顯示迷你埠驅動程式列舉顯示適配卡影片呈現來源和目標上可用的模式。 一般而言,要求具有下列模式:
VidPN 管理員會建立或取得已釘選在其來源和目標的一些模式,但並非全部的 VidPN。
VidPN 管理員會呼叫 DxgkDdiIsSupportedVidPn ,以判斷是否可以擴充 VidPN 以形成顯示器適配卡上支援的功能性 VidPN。 也就是說,它會詢問模式是否可以固定在其餘來源和目標上,而不需要變更現有的固定模式。
VidPN 管理員會呼叫 DxgkDdiEnumVidPnCofuncModality ,以取得尚未釘選模式的來源和目標上可用的模式。
傳遞至 DxgkDdiEnumVidPnCofuncModality 的其中一個自變數是稱為限制 VidPN 之 VidPN 物件的句柄。
DxgkDdiEnumVidPnCofuncModality 必須執行下列動作:
檢查限制 VidPN。
針對沒有固定模式的每個來源和目標,請調整模式集,使其是與條件約束共同運作的最大可能模式集。
對於沒有固定縮放轉換的每個路徑,請調整縮放支援旗標,使其與條件約束並用。
針對沒有固定旋轉轉換的每個路徑,請調整旋轉支援旗標,使其與條件約束並用。
針對具有固定模式的每個來源,報告該來源可用的多重取樣方法。
下列段落詳細說明如何執行上一個點符清單中的每個工作。
檢查限制 VidPN
限制 VidPN 的下列屬性是 DxgkDdiEnumVidPnCofuncModality 必須接受的條件約束。
拓撲 (來源與目標之間的關聯集)
固定模式
調整、調整支援、旋轉和旋轉支援每個路徑
每個路徑的目標色彩基礎
每個路徑的目標色彩係數動態範圍
每個路徑的內容類型(圖形或視訊)
每個路徑的伽瑪坡道
若要從限制 VidPN 擷取條件約束,請執行下列步驟:
首先,呼叫 pfnGetTopology 函式,以取得代表限制 VidPN 拓撲之 VidPN 拓撲的 VidPN 拓撲介面指標。
呼叫 pfnAcquireFirstPathInfo 和 pfnAcquireNextPathInfo 函式,以取得限制 VidPN 拓撲中每個路徑的相關信息。 特定路徑的相關信息(來源標識符、目標標識符、縮放轉換、旋轉轉換、目標色彩基礎等)包含在D3DKMDT_VIDPN_PRESENT_PATH結構中。
針對每個路徑,將路徑的來源標識碼傳遞至 pfnAcquireSourceModeSet 函式,以取得路徑的來源。
呼叫 pfnAcquirePinnedModeInfo 函式,以判斷在來源模式集中釘選的模式(如果有的話)。 如果來源的模式集有固定模式,可能不需要檢查集合中的其餘模式。 如果模式集沒有釘選模式,請呼叫 pfnAcquireFirstModeInfo 和 pfnAcquireNextModeInfo 來檢查集合中的其餘模式。
使用類似的程式來檢查目標模式集,並判斷哪些目標模式集已釘選模式。
調整模式集
當您檢查與限制 VidPN 拓撲中來源和目標相關聯的模式集時,請記下哪些模式集合已釘選模式。 如果模式集沒有固定模式,請判斷是否需要調整。 如果模式集包含與條件約束不搭配運作的模式,或缺少條件約束的可用模式,則必須調整模式集。
針對具有已連線監視器的視訊簡訊簡報目標,您也必須考慮監視所支援的模式集合。 即使顯示適配卡上的視訊存在目標支援特定模式(指定條件約束),只有在連線的監視器也支援模式時,才應該在目標模式中列出該模式。 若要判斷連線監視器支援的模式,請執行下列步驟:
-
呼叫 pfnAcquireMonitorSourceModeSet。 如果模式集不需要調整,您可以單獨離開。 如果需要調整模式集,則必須建立新的模式集,並將現有的模式集取代為新的模式集。
-
若要建立並填入新的來源模式集,請呼叫 pfnCreateNewSourceModeSet。
_DXGK_VIDPNSOURCEMODESET_INTERFACE
然後呼叫 pfnCreateNewModeInfo 和 pfnAddMode。
-
最後呼叫 pfnAssignSourceModeSet ,以新的來源模式取代現有的來源模式集。
調整縮放支援旗標
針對限制 VidPN 拓撲中的每個路徑,判斷路徑是否具有釘選的縮放轉換。 若要進行該判斷,請檢查 vpnPath。ContentTransformation.Scaling,其中 vpnPath 是代表路徑的D3DKMDT_VIDPN_PRESENT_PATH結構。 如果 為 vpnPath。ContentTransformation.Scaling 設定為 D3DKMDT_VPPS_IDENTITY、 D3DKMDT_VPPS_CENTERED或 D3DKMDT_VPPS_STRETCHED,然後釘選路徑的縮放轉換。 否則,不會釘選調整轉換。
如果路徑沒有釘選的縮放轉換,請判斷路徑的縮放支援旗標是否需要調整。 如果支援旗標顯示對非條件約束共函式的調整類型支援,或是無法顯示對條件約束可搭配條件約束之調整類型的支援,則必須調整支援旗標。 若要改變縮放支援旗標,請設定保存旗標之D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT結構的成員。
調整旋轉支援旗標
調整路徑的旋轉支援旗標類似於調整路徑的縮放支援旗標。 假設 vpnPath 是D3DKMDT_VIDPN_PRESENT_PATH結構。 如果 為 vpnPath。ContentTransformation.Rotation 設定為 D3DKMDT_VPPR_IDENTITY、 D3DKMDT_VPPR_ROTATE90、 D3DKMDT_VPPR_ROTATE180或 D3DKMDT_VPPR_ROTATE270,然後釘選路徑的旋轉轉換。 否則,不會釘選旋轉轉換。 旋轉支援旗標位於 vpnPath 中。ContentTransformation.RotationSupport。
報告多重取樣方法
如果顯示適配卡有一或多個視訊輸出編解碼器能夠透過多重取樣進行反鋸齒,則您必須針對具有釘選模式的每個來源報告可用的多重取樣方法(給定條件約束)。 若要報告可用的多重取樣方法,請執行下列步驟:
D3DDDI_MULTISAMPLINGMETHOD 結構有兩個成員,您必須設定這個成員,其特徵是多重取樣方法。 NumSamples 成員表示取樣的子像素數目。 NumQualityLevels 成員指出方法可以運作的品質層級數目。 只要每次增加層級都會明顯改善所呈現影像的品質,您就可以指定任意數目的質量等級。
列舉樞紐
如先前所述, DxgkDdiEnumVidPnCofuncModality 必須建立模式集合,這些模式集與傳入其 hConstrainingVidPn 參數的 VidPN 搭配運作。 在某些情況下,DxgkDdiEnumVidPnCofuncModality 必須根據 EnumPivotType 和 EnumPivot 參數中傳遞的其他資訊(列舉樞紐)來增強其行為。
列舉樞紐可以是下列其中一項:
特定視訊呈現來源的模式集
特定影片呈現目標的模式集
特定 VidPN 目前路徑的調整轉換
特定 VidPN 目前路徑的旋轉轉換
如果列舉樞紐是一個模式集,則 DxgkDdkEnumVidPnCofuncModality 必須讓該模式保持不變。 如果列舉樞紐是路徑的縮放(旋轉)轉換,則 DxgkDdiEnumVidPnCofuncModality 不得變更該路徑的縮放(旋轉)支援旗標。