共用方式為


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

連續虛擬位址範圍被映射到連續實體位址範圍的記憶體區段。 它們是在 Windows Vista 中引進的。

視訊記憶體管理員 (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 隱藏的視訊記憶體無法對應到使用者空間,也無法專門提供給任何特定程序使用。 這樣做會中斷虛擬記憶體的基本規則,這些規則需要系統上執行的所有進程都能夠存取所有記憶體。