鎖定雜亂配置

視訊記憶體管理員提供直接 CPU 存取撥動配置 (的特殊支援,也就是說,顯示迷你埠驅動程式的 DxgkDdiCreateAllocation函式會在DXGK_ALLOCATIONINFO結構的Flags成員中設定Swizzled旗標) 。

當視訊記憶體管理員收回未由驅動程式標示為從記憶體區段撥動的 CPU 可存取配置時,顯示迷你埠驅動程式必須一律以線性格式儲存它們。 因此,這類配置在光圈區段時無法撥動,而且必須一律由驅動程式的 DxgkDdiBuildPagingBuffer 函 式撥動或取消撥動。

另一方面,從記憶體區段收回時,不一定要以線性格式儲存標示為雜亂的配置。 針對這類配置,視訊記憶體管理員會追蹤這些配置的撥動狀態,而且只需要驅動程式的 DxgkDdiBuildPagingBuffer 函 式,才能在特定傳輸作業期間取消撥動配置。

在使用者模式顯示驅動程式呼叫 Microsoft Direct3D 執行時間的 pfnLockCb 函式之後,視訊記憶體管理員和顯示器迷你埠驅動程式會根據配置的狀態,以下列方式運作:

  1. 位於記憶體區段中的配置

    視訊記憶體管理員會嘗試取得 CPU 光圈,以提供配置線性存取權。 如果視訊記憶體管理員無法取得光圈,除非驅動程式設定D3DDDICB_LOCKFLAGS) 結構的DonotEvict成員,否則視訊記憶體管理員會將配置收回回系統記憶體 (。 當視訊記憶體管理員呼叫顯示器迷你埠驅動程式的 DxgkDdiBuildPagingBuffer 函 式來傳輸配置時,顯示迷你埠驅動程式應該會取消撥動配置。

  2. 配置收回 () 或位於光圈區段

    配置必須先取消撥動,CPU 才能存取它。 因此,視訊記憶體管理員會先嘗試分頁到記憶體區段中。 配置位於記憶體區段之後,視訊記憶體管理員和顯示迷你埠驅動程式的行為如同數位 1。

  3. 配置收回 (未)

    如果配置已經無法撥動至系統記憶體,則視訊記憶體管理員會傳回現有的配置指標,而不需進一步處理。

    為了讓 GPU 使用先前未撥動的配置,必須在 GPU 使用它之前重新撥動配置。 因此,在表面錯誤上,視訊記憶體管理員和顯示器迷你埠驅動程式的行為如下:

    • 記憶體區段中的配置 (CPU 光圈) 即時未撥動

      配置已經是 GPU 可以處理的撥動格式。 因此,視訊記憶體管理員不需要進一步處理。

    • 將配置收回至系統記憶體 (未)

      配置的頁面包含未繪製的資料,而且無法對應到光圈區段。 因此,配置必須在記憶體區段中分頁。 當視訊記憶體管理員呼叫 display miniport 驅動程式的 DxgkDdiBuildPagingBuffer 函式來分頁配置時,視訊記憶體管理員會要求顯示迷你埠驅動程式將配置撥動。

注意 在透過 CPU 光圈進行 CPU 存取之後,仍可在使用者模式顯示驅動程式終止 CPU 存取之前收回。 此案例的處理方式為數字 2。 收回會以應用程式與使用者模式顯示驅動程式看不見的方式執行。 此外,不覆寫鎖定 (亦即,不允許在撥動配置上設定D3DDDICB_LOCKFLAGS) IgnoreSync成員取得的鎖定。 只有 CPU 或 GPU 可以在任何指定時間存取這類配置。