Freigeben über


DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 Struktur (d3dkmddi.h)

Die DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 Struktur identifiziert Eigenschaften für eine Zuordnung.

Syntax

typedef struct _DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 {
  union {
    struct {
      UINT CpuVisible : 1;
      UINT PermanentSysMem : 1;
      UINT Cached : 1;
      UINT Protected : 1;
      UINT ExistingSysMem : 1;
      UINT ExistingKernelSysMem : 1;
      UINT FromEndOfSegment : 1;
      UINT DisableLargePageMapping : 1;
      UINT Overlay : 1;
      UINT Capture : 1;
      UINT CreateInVpr : 1;
      UINT Reserved00 : 1;
      UINT DXGK_ALLOC_RESERVED17 : 1;
      UINT Reserved02 : 1;
      UINT MapApertureCpuVisible : 1;
      UINT Reserved03 : 1;
      UINT HistoryBuffer : 1;
      UINT AccessedPhysically : 1;
      UINT ExplicitResidencyNotification : 1;
      UINT HardwareProtected : 1;
      UINT CpuVisibleOnDemand : 1;
      UINT DXGK_ALLOC_RESERVED16 : 1;
      UINT DXGK_ALLOC_RESERVED15 : 1;
      UINT DXGK_ALLOC_RESERVED14 : 1;
      UINT DXGK_ALLOC_RESERVED13 : 1;
      UINT DXGK_ALLOC_RESERVED12 : 1;
      UINT DXGK_ALLOC_RESERVED11 : 1;
      UINT DXGK_ALLOC_RESERVED10 : 1;
      UINT DXGK_ALLOC_RESERVED9 : 1;
      UINT DXGK_ALLOC_RESERVED4 : 1;
      UINT DXGK_ALLOC_RESERVED3 : 1;
      UINT DXGK_ALLOC_RESERVED2 : 1;
      UINT DXGK_ALLOC_RESERVED1 : 1;
      UINT DXGK_ALLOC_RESERVED0 : 1;
    };
    UINT Value;
  };
} DXGK_ALLOCATIONINFOFLAGS_WDDM2_0;

Angehörige

CpuVisible

[out] Ein UINT-Wert, der angibt, ob die Zuordnung direkt über die CPU zugänglich ist. Der Anzeigeminiporttreiber muss dieses Kennzeichen für den Benutzermodusanzeigetreiber festlegen, um die pfnLockCb Funktion für die Zuordnung erfolgreich aufzurufen. Wenn dieses Flag nicht für die Zuordnung festgelegt ist, gibt pfnLockCb einen Fehler zurück.

Beachten Sie, dass nur der Prozess, der eine freigegebene Zuordnung erstellt hat, diese Zuordnung sperren kann.

Das Festlegen dieses Elements entspricht dem Festlegen des ersten Bits des 32-Bit-Value Members (0x00000001).

PermanentSysMem

[out] Ein UINT-Wert, der angibt, ob eine Kopie der Zuordnung im Systemspeicher gespeichert werden soll, auch wenn sich der Inhalt in einem Speichersegment befindet. Standardmäßig geht beim Übertragen einer Zuordnung zu einem Speichersegment eine Speichersicherung des Surface-Systems verloren. Wenn das PermanentSysMem- Flag angegeben wird und die Zuordnung aus einem Speichersegment entfernt wird, wird der Inhalt der Zuordnung verworfen und nicht ausgelagert, wenn die Zuordnung nicht schmutzig ist (d. h. die Zuordnung war nicht das Ziel eines Schreibvorgangs, da sie ausgelagert wurde).

Ein Aufruf von pfnLockCb für die Zuordnung gibt immer den Systemspeicher für die Zuordnung zurück. Wenn sich die Zuordnung in einem Speichersegment befindet, wenn der Benutzermodustreiber pfnUnlockCbaufruft, wird die Speichersegmentressource für die Zuordnung mit dem neuen Inhalt aktualisiert. Dieses Update erscheint für den Anzeigeminiporttreiber als regulärer Auslagerungsvorgang durch die DxgkDdiBuildPagingBuffer--Funktion. Beachten Sie, dass diese Anforderung in der gesperrten Region widergespiegelt werden sollte, wenn der Miniporttreiber eine minimale Bereichsgröße oder Ausrichtung für einen Paging-Vorgang erfordert. Wenn der Treiber PermanentSysMemfestlegt, muss der Treiber auch den CpuVisible Member festlegen. Der Treiber darf nicht PermanentSysMem auf der Primäroberfläche festlegen.

Das Festlegen dieses Elements entspricht dem Festlegen des zweiten Bits des 32-Bit-Value Members (0x00000002).

Cached

[out] Ein UINT-Wert, der angibt, ob der Zuordnungssicherungsspeicher als zwischengespeicherter Speicher zugeordnet werden soll; Standardmäßig wird der Zuordnungssicherungsspeicher als schreibgeschützter Speicher gespeichert. Wenn eine zwischengespeicherte Speicherzuweisung in einem Segment verwendet wird, das nicht zwischengespeichert ist (z. B. ein Speichersegment oder AGP-Segment), stellt der Videospeicher-Manager die Kohärenz für den Inhalt der Zuordnung sicher, indem er ihn zur entsprechenden Zeit aus dem Cache des Prozessors leeren kann.

Wenn der Treiber zwischengespeicherten festlegt und außerdem die ExistingSysMem oder ExistingKernelSysMem Member festlegt, gibt der Treiber an, dass der vorhandene Speicher zwischengespeichert werden kann. Wenn der vorhandene Speicher zwischengespeichert wurde, der Treiber jedoch den zwischengespeicherten Member nicht festlegen kann, kann der Videospeicher-Manager keine Datenkohärenz sicherstellen und Beschädigungen auftreten. Der Treiber sollte den zwischengespeicherten Member für eine Zuordnung festlegen, die von der Anwendung oder dem Anzeigetreiber für den Benutzermodus gelesen werden soll. Der Treiber sollte nie den zwischengespeicherten Member für eine schreibgeschützte Zuordnung festlegen.

Wenn der Treiber dieses Element festlegt, muss der Treiber auch den CpuVisible Member festlegen. Der Treiber darf nicht zwischengespeicherten auf der primären Oberfläche festlegen.

Das Festlegen dieses Elements entspricht dem Festlegen des dritten Bits des 32-Bit-Value Members (0x00000004).

Protected

[out] Ein UINT-Wert, der angibt, ob der Zuordnungssicherungsspeicher im Kernelspeicher anstelle des Benutzeradressraums zugewiesen werden soll, um die Zuordnung vor potenziellem direkten CPU-Zugriff durch eine Anwendung zu schützen. Der Treiber kann dieses Element nicht in Kombination mit dem PermanentSysMem, ExistingSysMemoder ExistingKernelSysMem Member festlegen. Der Treiber darf nicht Geschützte auf der primären Oberfläche festlegen.

Das Festlegen dieses Elements entspricht dem Festlegen des vierten Bits des 32-Bit-Value Members (0x00000008).

ExistingSysMem

[out] Ein UINT-Wert, der angibt, ob der Videospeicher-Manager den vorhandenen Systemspeicherbereich als Sicherungsspeicher für die Zuordnung verwenden soll. Der Systemspeicherbereich muss eine gültige Benutzermodusadresse für den aktuellen Prozess für die Größe der Zuordnung sein. Der Systemspeicherbereich muss auch seitenbündig ausgerichtet sein und muss eine Seite mit mehreren Größen sein.

Wenn der Systemspeicherbereich eine zwischenspeicherbare virtuelle Adresse ist, sollte der Treiber die zwischengespeicherten Mitglied festlegen, um den Videospeicher-Manager zu informieren, um die Cachekohärenz für die Zuordnung sicherzustellen. Wenn das zwischengespeicherten Mitglied nicht angegeben ist, bestimmt der Videospeicher-Manager, dass der Systemspeicherbereich nicht zwischengespeichert, kombiniert oder zwischengespeichert werden kann; In diesem Fall stellt der Treiber jedoch entweder die Cachekohärenz sicher oder bestimmt, dass die Cachekoherenz kein Problem für die angegebene Verwendung ist.

Beachten Sie, dass diese Art von Zuordnung implizit dieselbe Sperrsemantik wie eine Zuordnung aufweist, in der das PermanentSysMem Member festgelegt ist.

Der Treiber kann ExistingSysMem- nicht in Kombination mit dem PermanentSysMem, Protectedoder ExistingKernelSysMem Member festlegen. Der Treiber darf nicht ExistingSysMem- auf der primären Oberfläche festlegen.

Das Festlegen dieses Elements entspricht dem Festlegen des fünften Bits des 32-Bit-Value Members (0x00000010).

ExistingKernelSysMem

[out] Ein UINT-Wert, der angibt, ob der Videospeicher-Manager den vorhandenen Systemspeicherbereich als Sicherungsspeicher für die Zuordnung verwenden soll. Der Speicherbereich des Systems muss eine gültige Kernelmodusadresse sein, die auf einer Seite und einer Seite mit mehreren Größen ausgerichtet ist.

Wenn der Systemspeicherbereich eine zwischenspeicherbare virtuelle Adresse ist, sollte der Treiber die zwischengespeicherten Mitglied festlegen, um den Videospeicher-Manager zu informieren, um die Cachekohärenz für die Zuordnung sicherzustellen. Wenn das zwischengespeicherten Mitglied nicht angegeben ist, bestimmt der Videospeicher-Manager, dass der Systemspeicherbereich nicht zwischengespeichert, kombiniert oder zwischengespeichert werden kann; In diesem Fall stellt der Treiber jedoch entweder die Cachekohärenz sicher oder bestimmt, dass die Cachekoherenz kein Problem für die angegebene Verwendung ist.

Beachten Sie, dass diese Art von Zuordnung implizit dieselbe Sperrsemantik wie eine Zuordnung aufweist, in der das PermanentSysMem Member festgelegt ist.

Der Treiber kann ExistingKernelSysMem nicht in Kombination mit dem PermanentSysMem, Protectedoder ExistingSysMem Member festlegen. Der Treiber darf nicht ExistingKernelSysMem auf der primären Oberfläche festlegen.

Das Festlegen dieses Elements entspricht dem Festlegen des sechsten Bits des 32-Bit-Value Members (0x00000020).

FromEndOfSegment

[out] Ein UINT-Wert, der angibt, ob die Zuordnung vom Ende eines Segments während des Pagings zugeordnet werden soll. Der Videospeicher-Manager scannt einen Segmentadressraum und sucht nach Raum für die Zuordnung vom Ende des Abschnitts, anstatt ab dem Anfang des Segments zu scannen (was das Standardverhalten ist). Die angedeuteten und bevorzugten Segmentinformationen haben jedoch Vorrang vor dieser Kennzeichnung.

Das Festlegen dieses Elements entspricht dem Festlegen des siebten Bits des 32-Bit-Value Members (0x00000040).

DisableLargePageMapping

[out] Ein UINT-Wert, der angibt, ob die Zuordnung für große Seiten deaktiviert werden soll. Unterstützung für große Seiten für Treiber wurde ab WDDM2.1 hinzugefügt. Die großen Seiten werden beim Übersetzen virtueller Adressen verwendet, wobei die Tabelle der niedrigsten Ebene durch eine große Seite ersetzt wird, die eine gleiche Abdeckung der Seitentabelle der Ebene 0 aufweist. Dieses Kennzeichen deaktiviert dies und verwendet eine Seitentabelle für die Adressübersetzung.

Das Festlegen dieses Elements entspricht dem Festlegen des achten Bits des 32-Bit-Value Members (0x00000080).

Overlay

[out] Ein UINT-Wert, der angibt, ob die Zuordnung für einen Überlagerungsvorgang gilt. Überlagerungszuweisungen werden im Arbeitsspeicher angeheftet, und der Videospeicher-Manager kann sie nicht entfernen, es sei denn, der Timeout-Erkennungs- und Wiederherstellungsprozess (TDR), Plug and Play (PnP)-Stopp oder Ebene 3 Synchronisierung. Beachten Sie, dass Vor der dreistufigen Synchronisierung Überlagerungen in der Regel zerstört werden. Überlagerungszuordnungen sind standardmäßig begrenzt und dürfen nicht mehr als die letzten 20 Prozent eines Segments belegen. Wenn eine Überlagerungszuordnung in einem Blendensegment zugewiesen wird, sollte der Display-Miniporttreiber die Größe aller anderen Zuordnungen beschränken, die dieses Blendensegment als Ausweisungssegment auf 80 Prozent der Segmentgröße verwenden. Der Miniporttreiber für die Anzeige gibt an, dass eine Zuordnung ein Segment für die Entfernung verwenden kann, indem das entsprechende Bit für das Segment im EvictionSegmentSet Element der DXGK_ALLOCATIONINFO-Struktur für die Zuordnung angegeben wird. Wenn der Anzeige-Miniporttreiber die Größe einer anderen Zuordnung nicht begrenzt, kann der Videospeicher-Manager diese Zuordnung nicht über das Segment ausweiten, da die angeheftete Zuordnung (d. h. die Überlagerungszuordnung) den Bereich belegt, der für die Entfernung erforderlich ist. In diesem Fall geht der Inhalt der anderen Zuweisung, die entfernt wird, verloren, und die Anwendung, die die verlorene Zuordnung besitzt, kann nicht mehr mit dieser Zuordnung gerendert werden.

Das Festlegen dieses Elements entspricht dem Festlegen des neunten Bits des 32-Bit-Value Members (0x00000100).

Capture

[out] Ein UINT-Wert, der angibt, ob die Zuordnung für einen Erfassungsvorgang verwendet wird. Erfassungszuordnungen werden im Arbeitsspeicher ähnlich wie Überlagerungszuordnungen angeheftet. Daher gelten auch die Probleme, die für Überlagerungszuweisungen gelten, für die Erfassung von Zuordnungen. Weitere Informationen zu diesen Problemen finden Sie in der Beschreibung des flags Overlay. Beachten Sie, dass aufzeichnungen normalerweise beendet werden, bevor Ebene 3 Synchronisierung erfolgt.

Das Festlegen dieses Elements entspricht dem Festlegen des zehnten Bits des 32-Bit-Value Members (0x00000200).

CreateInVpr

[out] Ein UINT-Wert, der angibt, ob die Zuordnung im videogeschützten Bereich erstellt werden soll. Dieses Mitglied wird für die Hardware digital Rights Management (DRM) in WDDM-Versionen >= WDDM 2.1 verwendet.

Das Festlegen dieses Elements entspricht dem Festlegen des elften Bits des 32-Bit-Value Members (0x00000400).

Reserved00

[in] Für WDDM-Versionen vor WDDM 2.1 ist dieses Element reserviert und sollte auf Null festgelegt werden.

Das Festlegen dieses Elements entspricht dem Festlegen des elften Bits des 32-Bit-Value Members (0x00000400).

DXGK_ALLOC_RESERVED17

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

Das Festlegen dieses Elements entspricht dem Festlegen des zwölften Bits des 32-Bit-Value Members (0x00000800).

Reserved02

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

Das Festlegen dieses Elements entspricht dem Festlegen des dreizehnten Bits des 32-Bit-Value Members (0x00001000).

MapApertureCpuVisible

[in] Wenn festgelegt, gibt an, dass der Treiber während eines DxgkDdiBuildPagingBuffer- aufrufs für einen DXGK_OPERATION_MAP_APERTURE_SEGMENT2 Vorgang CPU-Zugriff auf den Arbeitsspeicher benötigt. MapApertureCpuVisible ist Teil DxgkDdiBuildPagingBufferMapAperatureSegment2 Funktionalität, sodass der Treiber DXGK_VIDMMCAPS MapAperature2Supported- festlegen muss, um dieses Feld zu verwenden. Wenn MapAperature2Supported nicht festgelegt ist, aber der Treiber MapApertureCpuVisibleangibt, schlägt der Aufruf von DxgkDdiCreateAllocation fehl. Weitere Informationen finden Sie unter IOMMU DMA-Neumapping. Wird ab Windows Server 2022 unterstützt.

Reserved03

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

HistoryBuffer

[out] Ein UINT-Wert, der angibt, ob der Anzeigetreiber für den Benutzermodus einen Verlaufspuffer zuweist. Der Miniporttreiber für die Anzeige muss dieses Kennzeichen festlegen, um anzugeben, dass der Benutzermodustreiber die Erstellung und Zerstörung von Verlaufspuffern verwalten kann.

Wenn der Miniport-Anzeigetreiber HistoryBuffer-festlegt, muss er auch das CpuVisible Flag festlegen. Wenn der Treiber Cache-kohärente Blendensegmente unterstützt, muss er auch zwischengespeichertenfestlegen, und alle anderen Member müssen auf Null festgelegt werden.

Das Festlegen dieses Elements entspricht dem Festlegen des fünfzehnten Bits des 32-Bit-Value Members (0x00004000).

AccessedPhysically

Der Kernelmodustreiber legt die Kennzeichnung für Zuordnungen fest, auf die über ihre physische Adresse zugegriffen wird. Diese Zuordnung wird zusammenhängend aus GPU-Speichersegmenten zugewiesen. Die Zuordnungen sind nicht zusammenhängend, wenn sie aus dem Systemspeicher zugewiesen werden.

Das Festlegen dieses Elements entspricht dem Festlegen des sechzehnten Bits des 32-Bit-Value Members (0x00008000).

ExplicitResidencyNotification

Wenn diese Kennzeichnungen angegeben werden, empfängt der Treiber einen NotifyResidency- Pagingpuffervorgang, wenn die Zuordnungsaufbewahrung geändert wird (zugewiesen, zugesichert). Das Flag kann nur festgelegt werden, wenn das flag AccessedPhysically festgelegt ist.

Das Festlegen dieses Elements entspricht dem Festlegen des 17. Bits des 32-Bit-Value Members (0x00010000).

HardwareProtected

Wenn dieses Mitglied festgelegt ist, enthält die Zuordnung Inhalte, die für hardwarebasiertes DRM verwendet werden.

CpuVisibleOnDemand

Wenn dieses Mitglied festgelegt ist, versucht der Videospeicher-Manager, die virtuelle Adresse für die Zuordnung zuzuweisen, wenn es zugeordnet/gesperrt ist. Dies führt dazu, dass die Zuordnung keine permanente virtuelle Adresse aufweist, wodurch die Menge des verwendeten virtuellen Adressraums reduziert wird. Es verhält sich ähnlich wie die CpuVisible Flag darin, dass es sich um eine Zuordnung handelt, auf die direkt von der CPU zugegriffen werden kann, sondern nur die virtuelle Adresse für sie "bei Bedarf" erhält, anstatt dauerhaft zugewiesen zu werden.

DXGK_ALLOC_RESERVED16

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED15

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED14

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED13

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED12

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED11

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED10

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED9

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED4

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED3

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED2

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED1

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

DXGK_ALLOC_RESERVED0

[in] Dieses Element ist reserviert und sollte auf Null festgelegt werden.

Value

[out] Ein Mitglied in der Union, das DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 enthält, das einen 32-Bit-Wert enthalten kann, der Die Eigenschaften der Zuordnung identifiziert.

Bemerkungen

Ein Anzeigeminiporttreiber, der auf eine WDDM-Version >= WDDM 2.0 abzielt, verwendet diese Struktur, um diese Flags für den Videospeicher-Manager anzugeben. Treiber für WDDM-Versionen vor WDDM 2.0 sollten DXGK_ALLOCATIONINFOFLAGSverwenden.

Sie können Eigenschaften einer Zuordnung angeben, indem Sie Bits in der 32-Bit-Value Member festlegen oder einzelne Member der Struktur in der Union festlegen, die die DXGK_ALLOCATIONINFOFLAGS Struktur enthält.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 10
Header- d3dkmddi.h (einschließlich D3dkmddi.h)

Siehe auch

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiBuildPagingBuffer-

pfnLockCb

pfnUnlockCb