DXGI1_2_DDI_BASE_FUNCTIONS結構 (dxgiddi.h)
包含 Windows 顯示驅動程式模型 (WDDM) 1.2 和更新版本的使用者模式顯示驅動程式可以實作的函式指標,以執行低階工作,例如將轉譯的畫面呈現至輸出、控制伽瑪、取得共用和 Windows 圖形裝置介面 (GDI) 互通介面的通知,以及管理全螢幕轉換。
語法
typedef struct DXGI1_2_DDI_BASE_FUNCTIONS {
HRESULT()(DXGI_DDI_ARG_PRESENT *) * pfnPresent;
HRESULT()(DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS *) * pfnGetGammaCaps;
HRESULT()(DXGI_DDI_ARG_SETDISPLAYMODE *) * pfnSetDisplayMode;
HRESULT()(DXGI_DDI_ARG_SETRESOURCEPRIORITY *) * pfnSetResourcePriority;
HRESULT()(DXGI_DDI_ARG_QUERYRESOURCERESIDENCY *) * pfnQueryResourceResidency;
HRESULT()(DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES *) * pfnRotateResourceIdentities;
HRESULT()(DXGI_DDI_ARG_BLT *) * pfnBlt;
HRESULT()(DXGI_DDI_ARG_RESOLVESHAREDRESOURCE *) * pfnResolveSharedResource;
HRESULT()(DXGI_DDI_ARG_BLT1 *) * pfnBlt1;
HRESULT()(DXGI_DDI_ARG_OFFERRESOURCES *) * pfnOfferResources;
HRESULT()(DXGI_DDI_ARG_RECLAIMRESOURCES *) * pfnReclaimResources;
HRESULT()(DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *) * pfnGetMultiplaneOverlayCaps;
HRESULT()(void *) * pfnGetMultiplaneOverlayFilterRange;
HRESULT()(DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT *) * pfnCheckMultiplaneOverlaySupport;
HRESULT()(DXGI_DDI_ARG_PRESENTMULTIPLANEOVERLAY *) * pfnPresentMultiplaneOverlay;
} DXGI1_2_DDI_BASE_FUNCTIONS;
成員
pfnPresent
驅動程式 PresentDXGI 函式的指標。
pfnGetGammaCaps
驅動程式 GetGammaCapsDXGI 函式的指標。
pfnSetDisplayMode
驅動程式 SetDisplayModeDXGI 函式的指標。
pfnSetResourcePriority
驅動程式 SetResourcePriorityDXGI 函式的指標。
pfnQueryResourceResidency
驅動程式 QueryResourceResidencyDXGI 函式的指標。
pfnRotateResourceIdentities
驅動程式 RotateResourceIdentitiesDXGI 函式的指標。
pfnBlt
驅動程式 BltDXGI 函式的指標。
Direct3D 運行時間可能會設定 旗標DXGI_DDI_ARG_BLT 結構的成員,pBltData 參數指向的方式,以要求 Blt1DXGI 函式執行 位區塊傳輸 (bitblt) 作業,以解析多重取樣資源, 執行色彩格式轉換,並一次執行延展或壓縮。 不過,Direct3D 執行時間永遠不會將 Flags 成員 DXGI_DDI_ARG_BLT1 設定為零(也就是未設定旗標),以及 Rotate 成員中設定的 DXGI_DDI_MODE_ROTATION_IDENTITY 值,DXGI_DDI_ARG_BLT1 成員(也就是表示沒有旋轉),以執行直接記憶體複製作業。 相反地,除非這兩個資源都是多重取樣,否則 Direct3D 運行時間會呼叫驅動程式的 ResourceCopy 或 ResourceCopyRegion(D3D11_1) 函式來執行直接記憶體複製作業。
使用者模式顯示驅動程式所執行的延展或壓縮質量必須和雙線性篩選執行的延展或壓縮一樣好。
Direct3D 執行時間會不常呼叫驅動程式的 Blt1DXGI 函式。 也就是說,運行時間應該為每個畫面呼叫 Blt1DXGI 不超過一次或兩次,因為運行時間主要使用 Blt1DXGI 來支援簡報。
當運行時間呼叫簡報 Blt1DXGI 時,運行時間會在 FlagsDXGI_DDI_ARG_BLT1成員中設定 Present 位字段旗標。 運行時間會設定 Present 位字段旗標,以通知驅動程式 bitblt 有額外的需求,而且可能需要額外的同步處理(例如,運行時間可能需要在包含兩個圖形適配卡的計算機設定中執行額外的同步處理,每個圖形適配卡都會處理顯示器的不同部分)。 設定 Present 位欄位旗標時,驅動程式應該執行從應用程式的後台緩衝區複製到 DWM 共用介面的複製作業。 由於這種複製作業的同步處理並不嚴重,因此撕裂成品應該是用戶體驗最差的成品類型。 針對這種類型的複製作業,驅動程式不應該先解析至目的地介面,然後以色彩轉換結果就地,因為可能的成品會更糟。
如果驅動程式支援在建立主要介面期間傳回 DXGI_DDI_ERR_UNSUPPORTED ,也就是從呼叫其 CreateResource(D3D10)D3D10_DDI_BIND_PRESENT 函式傳 DXGI_DDI_ERR_UNSUPPORTED 回 DXGI_DDI_ERR_UNSUPPORTED,且 BindFlagsD3D10DDIARG_CREATERESOURCE 成員以及 D3D10DDIARG_CREATERESOURCE set pPrimaryDesc 成員若為非 NULL,驅動程式也必須在複製作業期間支援輪替。 如果驅動程式永遠不會從呼叫其 CreateResource(D3D10) 或 CreateResource(D3D11) 函式傳回 DXGI_DDI_ERR_UNSUPPORTED,運行時間永遠不會將 DXGI_DDI_MODE_ROTATION_ROTATE90、DXGI_DDI_MODE_ROTATION_ROTATE180或 DXGI_DDI_MODE_ROTATION_ROTATE270 值傳遞至 DXGI_DDI_ARG_BLT1Rotate 成員。 因此,在此情況下,驅動程式的 Blt1DXGI 函式不需要支援旋轉。
運行時間會在 Rotate 成員 DXGI_DDI_ARG_BLT1 中設定值,以指出在驅動程式將內容複製到目的地之前,要逆時針旋轉來源內容的度數。 旋轉是以90度增量指定。
注意
當驅動程式的 Blt1DXGI 函式將 sRGB 格式的內容從來源介面複製到非 sRGB 目的地介面時,驅動程式應該將 sRGB 內容複製不變(也就是說,驅動程式不應該執行 sRGB 到線性轉換)。
來源限制
Blt1DXGI 函式一律會使用整個來源子資源(與某些子矩形區域)來執行 bitblt 作業。 此外,來源是 D3D10DDIRESOURCE_TEXTURE2D 表示法(在 ResourceDimension 成員 D3D10DDIARG_CREATERESOURCE 或 D3D11DDIARG_CREATERESOURCE 在呼叫使用者模式顯示驅動程式的 CreateResource(D3D10) 或 CreateResource(D3D11) 函式時, 分別。 當運行時間在 Flags 成員 DXGI_DDI_ARG_BLT1中設定 Resolve 位字段時,來源為多重取樣資源。 來源資源僅限於在 BindFlags 中設定 D3D10_DDI_BIND_PRESENT 旗標的資源,D3D10DDIARG_CREATERESOURCE 或 D3D11DDIARG_CREATERESOURCE的成員。 來源的格式(以 Format 成員 D3D10DDIARG_CREATERESOURCE 或 D3D11DDIARG_CREATERESOURCE指定)的格式限制為顯示模式格式,由下列值從 DXGI_FORMAT 列舉指定:
- DXGI_FORMAT_B5G6R5_UNORM
- DXGI_FORMAT_B5G5R5A1_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM (請參閱下面的附註。
- DXGI_FORMAT_B8G8R8X8_UNORM
- DXGI_FORMAT_R16G16B16A16_FLOAT
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
注意
如果驅動程式支援來源格式 DXGI_FORMAT_B8G8R8A8_UNORM,則適用下列限制:
- 當驅動程式從浮點格式到整數格式執行 bitblt 運算時,例如BGRA8888,它必須隱含地將 gamma 編碼成結果。
- 相反地,當驅動程式從整數格式執行 bitblt 運算到浮點格式時,它必須隱含地從結果中移除 gamma 編碼。
目的地限制
目的地也是 D3D10DDIRESOURCE_TEXTURE2D 表示法。 目的地的格式也限制為顯示模式格式。 目的地資源受限於系結為轉譯目標的資源(D3D10_DDI_BIND_RENDER_TARGET 在 bindFlags D3D10DDIARG_CREATERESOURCE 或 D3D11DDIARG_CREATERESOURCE成員 中設定)。
建立立體聲後台緩衝區
從 Windows 8 開始,如果驅動程式必須建立立體後台緩衝區,則應該分別設定 D3D10DDIARG_CREATERESOURCE 或 D3D11DDIARG_CREATERESOURCE 結構的成員,pCreateResource 參數所指向 CreateResource(D3D10) 或 CreateResource(D3D11) 函式, 如下:
- 將 ArraySize 成員設定為 2 的值。
- 在 bindFlags 成員 中設定 D3D10_DDI_BIND_PRESENT 旗標值。
此外,為了支援立體呈現,BltDXGI 函式必須允許 DstSubresource 的任何值,以及 SrcSubresource 位於來源和目的地資源範圍內的 DXGI_DDI_ARG_BLT 結構成員。
pfnResolveSharedResource
驅動程式 ResolveSharedResourceDXGI 函式的指標。
pfnBlt1
驅動程式 Blt1DXGI 函式的指標。
pfnOfferResources
驅動程式 pfnOfferResources 函式的指標。
pfnReclaimResources
由 DXGI 執行時間呼叫,以回收使用者模式顯示驅動程式先前提供以供重複使用的視訊記憶體資源。 由WDDM 1.2和更新版本的使用者模式顯示驅動程序實作。
pfnGetMultiplaneOverlayCaps
Microsoft DirectX Graphics Infrastructure (DXGI) 運行時間呼叫,要求使用者模式顯示驅動程式取得基本重疊平面功能。 選擇性地由 Windows 顯示驅動程式模型 (WDDM) 1.3 和更新版本的使用者模式顯示驅動程式實作。 pfnGetMultiplaneOverlayCaps 的語法 如下:
pfnGetMultiPlaneOverlayCaps GetMultiPlaneOverlayCaps;
HRESULT __stdcall* GetMultiPlaneOverlayCaps(
DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *pCaps
)
{ ... }
pCaps 參數是指定重疊平面功能的 DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS 結構的指標。
pfnGetMultiplaneOverlayCaps 會傳回下列其中一個值:
- S_OK:驅動程式已成功提供重疊平面功能。
- D3DDDIERR_DEVICEREMOVED:驅動程式偵測到顯示適配卡已移除,因此驅動程式未完成作業。 如果驅動程式不知道配接器移除,則驅動程式不需要傳回此錯誤碼。
pfnGetMultiplaneOverlayFilterRange
這個成員是保留的,而且應該設定為零。 從 Windows 8.1 開始支援。
pfnCheckMultiplaneOverlaySupport
Microsoft DirectX Graphics Infrastructure (DXGI) 運行時間呼叫,以檢查多平面重疊的硬體支持詳細數據。 pfnCheckMultiplaneOverlaySupport 語法為:
PFND3DDDI_CHECKMULTIPLANEOVERLAYSUPPORT pfnCheckMultiplaneOverlaySupport;
HRESULT __stdcall* pfnCheckMultiplaneOverlaySupport(
D3DDDIARG_CHECKMULTIPLANEOVERLAYSUPPORT *pSupport
)
{ ... }
pSupport 參數是描述如何顯示至目的地介面之 DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT 結構的指標。
如果 pfnCheckMultiplaneOverlaySupport 成功,則會傳回S_OK。 否則,它會傳回 HRESULT 錯誤碼。
pfnPresentMultiplaneOverlay
驅動程式 pfnPresentMultiplaneOverlay (DXGI) 函式的指標。 從 Windows 8.1 開始支援。
pSupport
DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT 結構的指標,描述如何顯示至目的地介面。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 8、WDDM 1.2 |
支援的最低伺服器 | Windows Server 2012 |
標頭 | dxgiddi.h (include D3d10umddi.h) |