DXGKDDI_ACQUIRESWIZZLINGRANGE回呼函式 (d3dkmddi.h)

DxgkDdiAcquireSwizzlingRange 函式可透過指定區段的中央處理單位 (CPU) 光圈來存取配置。

語法

DXGKDDI_ACQUIRESWIZZLINGRANGE DxgkddiAcquireswizzlingrange;

NTSTATUS DxgkddiAcquireswizzlingrange(
  [in]     IN_CONST_HANDLE hAdapter,
  [in/out] INOUT_PDXGKARG_ACQUIRESWIZZLINGRANGE pAcquireSwizzlingRange
)
{...}

參數

[in] hAdapter

與顯示配接器相關聯的內容區塊句柄。 顯示迷你埠驅動程式先前已將此句柄提供給 DxgkDdiAddDevice 函式之 MiniportDeviceContext 輸出參數中的 Microsoft DirectX 圖形核心子系統。

[in/out] pAcquireSwizzlingRange

DXGKARG_ACQUIRESWIZZLINGRANGE 結構的指標,其中包含可透過 CPU 光圈存取配置的資訊。

傳回值

DxgkDdiAcquireSwizzlingRange 會傳回下列其中一個值:

傳回碼 Description
STATUS_SUCCESS DxgkDdiAcquireSwizzlingRange 已成功讓配置可供存取。
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED DxgkDdiAcquireSwizzlingRange 無法針對配置來規劃撥動範圍。 視訊記憶體管理員無法取得令人困惑的範圍,而不會進行進一步的嘗試。
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE DxgkDdiAcquireSwizzlingRange 無法為配置程序設計波浪範圍,因為另一個撥動範圍目前使用圖形處理單位 (GPU) 所需的資源。 視訊記憶體管理員會嘗試釋放目前使用中的範圍,然後嘗試再次設定撥動範圍。

備註

在使用者模式顯示驅動程式要求虛擬位址時呼叫 DxgkDdiAcquireSwizzlingRange 函式,該虛擬位址會參考配置 (的位,也就是在使用者模式顯示驅動程式呼叫 pfnLockCb 函式之後,會在D3DDDICB_LOCK結構的 Flags 成員中設定 AcquireAperture 位字段旗標,而配置目前位於 CPU 可存取記憶體區段) 。 如果未在 pfnLockCb 的呼叫中設定 AcquireAperture 位字段旗標,則不會呼叫 DxgkDdiAcquireSwizzlingRange,而且配置的格式必須是使用者模式顯示驅動程式或應用程式可以處理的格式。

呼叫 DxgkDdiAcquireSwizzlingRange 時,顯示迷你埠驅動程式必須將指定的配置 (設為指定的配置,也就是 pAcquireSwizzlingRange 參數指向 pAcquireSwizzlingRange) 參數指向可透過指定區段的 CPU 光圈存取的 hAllocationDXGKARG_ACQUIRESWIZZLINGRANGE 成員 (,也就是DXGKARG_ACQUIRESWIZZLINGRANGE) 的 SegmentId 成員。 配置必須完全符合計算機記憶體在取消收回之後出現的方式。

並非所有使用者模式顯示驅動程式的要求都可存取顯示迷你埠驅動程式。 視訊記憶體管理員取得的範圍會根據與其相關聯的配置和指定的私人數據來快取。 在使用者模式顯示驅動程式存取配置的第一個要求上,會呼叫顯示迷你埠驅動程式的 DxgkDdiAcquireSwizzlingRange 函式,讓配置可供存取。 在具有相符私人數據的後續要求上,會使用先前的設定對應來存取配置。

視訊記憶體管理員會呼叫顯示迷你埠驅動程式的 DxgkDdiReleaseSwizzlingRange 函式,以在收回或終結配置時釋放撥動範圍,或當另一個配置需要光圈時。 配置可以與任意數目的撥動 (範圍相關聯,例如,每個 MIP 層級) 一個光圈。

呼叫驅動程式的 DxgkDdiQueryAdapterInfo 函式時,驅動程式會在DXGK_DRIVERCAPS 結構的 NumberOfSwizzlingRanges 成員中公開適配卡支援的範圍數目。 所有範圍都等於 (,也就是說,任何範圍都可以取消撥動或直到任何類型的波浪或磚) 為止。 視訊記憶體管理員會仲裁所有需要它們的應用程式之間可用的撥動範圍。

驅動程式必須使用記憶體對應 I/O (MMIO) 來設定撥動範圍。 這些虛線範圍存取不得干擾 GPU (的執行,也就是說,當) 呼叫 dxgkDdiAcquireSwizzlingRange 時,GPU 不得閑置。

所有對 DxgkDdiAcquireSwizzlingRange 的呼叫都會自行串行化,但不會與任何其他 DDI 函式一起串行化。

如果 GPU 支援將 CPU 存取重新導向至非 CPU 可存取記憶體區段或系統記憶體的範圍,則使用者模式顯示驅動程式可以在呼叫 pfnLockCb 函式的 FlagsD3DDDICB_LOCK 成員中,設定 AcquireApertureUseAlternateVA 位字段旗標的組合,以鎖定配置。 在此情況下,視訊記憶體管理員會呼叫顯示迷你埠驅動程式的 DxgkDdiAcquireSwizzlingRange 函式,以取得配置的撥動範圍,即使配置位於非 CPU 可存取的記憶體區段或光圈區段。 Swizzling 範圍與某些 GPU 資源相關聯 (例如,PCI 光圈範圍) 驅動程式所管理且無法存取或考慮視訊記憶體管理員。

呼叫 DxgkDdiAcquireSwizzlingRange 以取得雜亂範圍可能會失敗,因為驅動程式管理的資源用盡。雖然雜亂範圍本身是免費的,但可能因為缺少資源而無法使用。 驅動程式可以透過從 DxgkDdiAcquireSwizzlingRange 傳回STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE,表示視訊記憶體管理員無法使用波浪範圍。 視訊記憶體管理員接著會嘗試釋放目前使用中的撥動範圍,然後再次呼叫驅動程式的 DxgkDdiAcquireSwizzlingRange 函式來設定新的撥動範圍。 如果釋放所有撥動範圍,且驅動程式仍然會失敗並STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE,則視訊記憶體管理員無法取得配置的撥動範圍。

DxgkDdiAcquireSwizzlingRange 應該設為可分頁。

規格需求

需求
最低支援的用戶端 Windows Vista
目標平台 桌面
標頭 d3dkmddi.h
IRQL PASSIVE_LEVEL

另請參閱

D3DDDICB_LOCK

DXGKARG_ACQUIRESWIZZLINGRANGE

DXGK_DRIVERCAPS

DxgkDdiAddDevice

DxgkDdiCreateAllocation

DxgkDdiQueryAdapterInfo

DxgkDdiReleaseSwizzlingRange

pfnLockCb