共用方式為


使用記憶體區段描述 GPU 位址空間

視訊記憶體管理員 (VidMm) 負責管理 GPU 的地址空間。 在可以這麼做之前,內核模式顯示迷你埠驅動程式 (KMD) 必須使用記憶體區段來描述 GPU 的位址空間 至 VidMm

KMD 會建立記憶體區段,以一般化和虛擬化視訊記憶體資源。 它可以根據硬體支援的記憶體類型來設定記憶體區段(例如框架緩衝區內存或系統記憶體孔徑)。

在驅動程式初始化期間,KMD 必須傳回區段類型清單,以描述 VidMm 如何管理記憶體資源。 KMD 會藉由回應其 DxgkDdiQueryAdapterInfo 函式的呼叫,指定其支援的區段類型數目,並描述每個區段類型。 驅動程式會使用 DXGK_SEGMENTDESCRIPTOR 結構來描述每個區段。 如需詳細資訊,請參閱 初始化記憶體區段的使用。

之後,區段的數目和類型會保持不變。 VidMm

  • 確保每個進程都會收到任何特定區段中資源的公平份額,

  • 獨立管理所有區段。

區段不會重疊。 因此,無論應用程式從另一個區段持有的資源數量為何, VidMm 都可以從某個區段配置相當數量的視訊記憶體資源。

KMD 會將區段標識碼指派給其每個記憶體區段。 稍後,當 VidMm 要求為視訊資源建立配置並轉譯這些資源時,KMD:

  • 識別支援要求的區段。

  • 依序指定驅動程式偏好 使用 VidMm 的區段。

如需詳細資訊,請參閱 指定建立配置時的區段。

KMD 不需要指定其記憶體區段中 GPU 可用的所有視訊記憶體資源。 不過,KMD 必須指定 VidMm 在系統上執行的所有進程之間管理的所有記憶體資源。 例如:

  • 實作固定函式管線的頂點著色器微碼可以位於 GPU 位址空間中,但在 VidMm 所管理的記憶體之外(也就是,不是區段的一部分)。 此設定是可能的,因為微碼一律可供所有進程使用,而且絕不是進程之間的爭用來源。

  • 對於頂點緩衝區、紋理、轉譯目標和應用程式特定著色器程式代碼等資源, VidMm 必須從驅動程式的其中一個記憶體區段配置視訊記憶體資源。 此需求是因為資源類型必須可供所有進程使用。

下圖顯示 KMD 如何從 GPU 位址空間設定記憶體區段的範例。

說明 GPU 位址空間分割成記憶體區段的圖表。

此圖中的數字會對應至下列記憶體區段:

  1. CPU 可存取的線性區段:此區段可由CPU存取,並組織成線性地址空間。

  2. 不可 CPU 可存取的線性區段:此區段會組織為線性地址空間,但 CPU 無法存取。 它用於不需要 CPU 存取的資源。

  3. 唯讀 AGP 光圈區段:此區段用於 AGP (加速圖形埠) 記憶體的唯讀存取。

  4. 光圈區段:此區段用於透過 AGP 光圈存取的資源。

[隱藏] 方塊代表 KMD 不會公開給 VidMm 的記憶體區段。 從 VidMm 隱藏的視訊記憶體無法對應到用戶空間,或專門提供給任何特定進程使用。 這樣做會中斷虛擬記憶體的基本規則,這些規則需要系統上執行的所有進程都能夠存取所有記憶體。