D3DDDICB_LOCKFLAGS 結構 (d3dukmdt.h)

D3DDDICB_LOCKFLAGS 結構會識別如何鎖定配置。

語法

typedef struct _D3DDDICB_LOCKFLAGS {
  union {
    struct {
      UINT ReadOnly : 1;
      UINT WriteOnly : 1;
      UINT DonotWait : 1;
      UINT IgnoreSync : 1;
      UINT LockEntire : 1;
      UINT DonotEvict : 1;
      UINT AcquireAperture : 1;
      UINT Discard : 1;
      UINT NoExistingReference : 1;
      UINT UseAlternateVA : 1;
      UINT IgnoreReadSync : 1;
      UINT Reserved : 21;
    };
    UINT Value;
  };
} D3DDDICB_LOCKFLAGS;

成員

ReadOnly

UINT 值,指定鎖定的配置是否只能讀取。 設定此成員相當於 (0x00000001) 設定 32 位 Value 成員的第一個位。

WriteOnly

UINT 值,指定鎖定的配置是否只能寫入。 設定此成員相當於 (0x00000002) 設定 32 位 Value 成員的第二個位。

DonotWait

UINT 值,指定視訊記憶體管理員是否應該等候鎖定配置。 如果設定此成員,如果圖形硬體正在使用配置,記憶體管理員會失敗呼叫 pfnLockCb 並D3DERR_WASSTILLDRAWING。

設定此成員相當於 (0x00000004) 設定 32 位 Value 成員的第三個位。

IgnoreSync

UINT 值,指定視訊記憶體管理員是否應該檢查圖形硬體是否使用配置。 如果設定此成員,記憶體管理員不應該檢查。

IgnoreSync 只能設定為可在光圈區段中放置的配置。 當圖形配接器不支援快取共置時,無法設定為雜亂配置,或快取配置。

設定此成員相當於 (0x00000008) 設定 32 位 Value 成員的第四個位。

LockEntire

UINT 值,指定整個配置區域是否已鎖定,而不只是一個子系。

設定此成員相當於設定 32 位 Value 成員的第五位 (0x00000010) 。

DonotEvict

UINT 值,指定視訊記憶體管理員是否應該收回配置,讓鎖定可以成功。 如果已設定此成員,記憶體管理員就不應該收回配置。 如果必須收回配置才能處理鎖定要求,記憶體管理員會因為D3DERR_NOTAVAILABLE而無法呼叫 pfnLockCb 。 當所有取消擷取的光圈都耗盡時,可能需要收回。

設定此成員相當於 (0x00000020) 設定 32 位 Value 成員的第六個位。

AcquireAperture

UINT 值,指定視訊記憶體管理員是否應該呼叫顯示迷你埠驅動程式的 DxgkDdiAcquireSwizzlingRange 函式,以設定配置不模糊的光圈。

在未設定 AcquireAperture 的情況下鎖定的配置無法使用 AcquireAperture 設定再次鎖定。

如果配置只能位於光圈區段,則無法設定 AcquireAperture

設定此成員相當於設定 32 位 Value 成員的第七個位 (0x00000040) 。

Discard

UINT 值,指定視訊記憶體管理員是否可以重新命名或多重緩衝配置。 如需重新命名配置的詳細資訊,請參閱 要求重新命名配置

已釘選、主要或共用配置會忽略棄。

設定此成員相當於設定 32 位 Value 成員的第八位 (0x00000080) 。

NoExistingReference

UINT 值,指定使用者模式顯示驅動程式目前在其命令緩衝區中是否未排入佇列,而參考任何鎖定的配置實例。 在視訊記憶體管理員只使用 Discard 旗標,以及驅動程式將目前命令緩衝區排清至核心之後,驅動程式應該使用 NoExistingReference 成員來失敗鎖定要求。 驅動程序應該搭配 Discard 使用 NoExistingReference

設定此成員相當於設定 32 位 Value 成員 (0x00000100) 的第九個位。

UseAlternateVA

UINT 值,指定顯示迷你埠驅動程式是否可以鎖定配置,其實體位址與配置目前的區段位置不同,或記憶體使用量與先前配置的記憶體使用量不同。 指定此旗標時,顯示迷你埠驅動程式可以在呼叫 DxgkDdiAcquireSwizzlingRange 函式) 中更新 DXGKARG_ACQUIRESWIZZLINGRANGE 結構的 RangeSizeCPUTranslatedAddress 成員,以更新配置可透過 ( 存取的實體地址範圍基地址和大小。 指定此旗標時,視訊記憶體管理員會嘗試配置新的虛擬位址來處理鎖定要求,而不是使用配置支援存放區虛擬位址。 不過,如果視訊記憶體管理員無法配置新的虛擬位址,鎖定要求就會失敗。

此旗標也可用來鎖定目前位於非 AGP 光圈區段的雜亂或磚配置。 在這種類型的鎖定中,視訊記憶體管理員會將替代虛擬位址對應至實體位址範圍,這些位址範圍可以不撥動或直到即時中斷,然後將記憶體存取重新導向至系統記憶體頁面。

當配置第一次使用 UseAlternateVA 鎖定時,視訊記憶體管理員會建立替代虛擬位址,並在下列其中一個案例中釋放虛擬位址:

  • CPU 無法存取配置,而且會釋放撥動範圍以供另一個配置重複使用。
  • CPU 無法存取配置,而且正在收回。
  • 正在終結配置。
  • 配置在鎖定期間被收回之後,正在分頁。
請注意,如果主要配置是藉由在呼叫 display miniport 驅動程式的 DxgkDdiCreateAllocation 函式的 FlagsDXGK_ALLOCATIONINFO 成員中指定 UseAlternateVA 位字段旗標,才能在主要配置上使用 UseAlternateVA。 以這種方式建立的主要配置只能使用 UseAlternateVA 旗標鎖定。

UseAlternateVA 無法在共用配置上使用。

使用 UseAlternateVA 集合鎖定的配置無法再次鎖定。

注意如果使用者模式顯示驅動程式已在呼叫 pfnLockCb 函式期間,在 D3DDDICB_LOCKFLAGS 結構的 Flags 成員中設定 UseAlternateVA,則 display miniport 驅動程式不應該呼叫 DxgkCbExcludeAdapterAccess 函式。
 
設定此成員相當於 (0x00000200) 設定 32 位 Value 成員的第十位。

IgnoreReadSync

UINT 值,指定視訊記憶體管理員是否應該只等候擱置的圖形處理單位 (GPU) 寫入作業以完成配置。 如果已設定此成員,記憶體管理員就不需要等候 GPU 讀取作業完成。 也就是說,一旦最後一個 GPU 寫入作業完成,即使 GPU 仍可從配置讀取,鎖定仍可傳回。

IgnoreReadSync 只能設定為可以放在光圈區段的配置。 當圖形配接器不支援快取共置時,無法設定為雜亂配置,或快取配置。

設定此成員相當於 (0x00000400) 設定 32 位 Value 成員的第十一位。

Reserved

這個成員是保留的,而且應該設定為零。 將此成員設定為零相當於將 32 位 Value 成員的其餘 21 位設定為零 (0xFFFFF800) 。

Value

包含在D3DDDICB_LOCKFLAGS中,可保存一個32位值的成員,可識別如何鎖定配置。

備註

當您使用D3DDDICB_LOCKFLAGS結構來指定如何鎖定設定時,您必須遵守下列規則:

  • 同時指定 ReadOnlyWriteOnly 成員無效。
  • 如果已使用 Discard 成員指定,IgnoreSync 成員就不會有任何作用。
  • 如果已使用 Discard 成員指定,DonotWait 成員就不會有任何作用。
  • 同時指定 IgnoreSyncAcquireAperture 成員無效。
  • 由於指定 UseAlternateVA 成員表示已取得光圈,因此也必須設定 AcquireAperture 成員。
  • 無法鎖定已淘汰或提供的配置。 另請參閱 要求重新命名配置
  • 只有在配置是在 DXGK_ALLOCATIONINFOFLAGS 結構中使用 CpuVisible 成員集建立時,才能鎖定配置。
  • 除非是 GDI 非受控主要配置,否則只有共用配置) 擁有者 (建立者才能鎖定它。
  • 使用撥動範圍鎖定的配置必須先解除鎖定,才能再次鎖定。

規格需求

需求
最低支援的用戶端 可在 Windows Vista 和更新版本的 Windows 作業系統中使用。
標頭 d3dukmdt.h (包含 D3dukmdt.h)

另請參閱

D3DDDICB_LOCK

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiAcquireSwizzlingRange

pfnLockCb