鎖定雜亂配置
視訊記憶體管理員提供直接 CPU 存取撥動配置 (的特殊支援,也就是說,顯示迷你埠驅動程式的 DxgkDdiCreateAllocation函式會在DXGK_ALLOCATIONINFO結構的Flags成員中設定Swizzled旗標) 。
當視訊記憶體管理員收回未由驅動程式標示為從記憶體區段撥動的 CPU 可存取配置時,顯示迷你埠驅動程式必須一律以線性格式儲存它們。 因此,這類配置在光圈區段時無法撥動,而且必須一律由驅動程式的 DxgkDdiBuildPagingBuffer 函 式撥動或取消撥動。
另一方面,從記憶體區段收回時,不一定要以線性格式儲存標示為雜亂的配置。 針對這類配置,視訊記憶體管理員會追蹤這些配置的撥動狀態,而且只需要驅動程式的 DxgkDdiBuildPagingBuffer 函 式,才能在特定傳輸作業期間取消撥動配置。
在使用者模式顯示驅動程式呼叫 Microsoft Direct3D 執行時間的 pfnLockCb 函式之後,視訊記憶體管理員和顯示器迷你埠驅動程式會根據配置的狀態,以下列方式運作:
位於記憶體區段中的配置
視訊記憶體管理員會嘗試取得 CPU 光圈,以提供配置線性存取權。 如果視訊記憶體管理員無法取得光圈,除非驅動程式設定D3DDDICB_LOCKFLAGS) 結構的DonotEvict成員,否則視訊記憶體管理員會將配置收回回系統記憶體 (。 當視訊記憶體管理員呼叫顯示器迷你埠驅動程式的 DxgkDdiBuildPagingBuffer 函 式來傳輸配置時,顯示迷你埠驅動程式應該會取消撥動配置。
配置收回 () 或位於光圈區段
配置必須先取消撥動,CPU 才能存取它。 因此,視訊記憶體管理員會先嘗試分頁到記憶體區段中。 配置位於記憶體區段之後,視訊記憶體管理員和顯示迷你埠驅動程式的行為如同數位 1。
配置收回 (未)
如果配置已經無法撥動至系統記憶體,則視訊記憶體管理員會傳回現有的配置指標,而不需進一步處理。
為了讓 GPU 使用先前未撥動的配置,必須在 GPU 使用它之前重新撥動配置。 因此,在表面錯誤上,視訊記憶體管理員和顯示器迷你埠驅動程式的行為如下:
記憶體區段中的配置 (CPU 光圈) 即時未撥動
配置已經是 GPU 可以處理的撥動格式。 因此,視訊記憶體管理員不需要進一步處理。
將配置收回至系統記憶體 (未)
配置的頁面包含未繪製的資料,而且無法對應到光圈區段。 因此,配置必須在記憶體區段中分頁。 當視訊記憶體管理員呼叫 display miniport 驅動程式的 DxgkDdiBuildPagingBuffer 函式來分頁配置時,視訊記憶體管理員會要求顯示迷你埠驅動程式將配置撥動。
注意 在透過 CPU 光圈進行 CPU 存取之後,仍可在使用者模式顯示驅動程式終止 CPU 存取之前收回。 此案例的處理方式為數字 2。 收回會以應用程式與使用者模式顯示驅動程式看不見的方式執行。 此外,不覆寫鎖定 (亦即,不允許在撥動配置上設定D3DDDICB_LOCKFLAGS) IgnoreSync成員取得的鎖定。 只有 CPU 或 GPU 可以在任何指定時間存取這類配置。