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;

Member

CpuVisible

[out] Ein UINT-Wert, der angibt, ob die CPU auf die Zuordnung direkt zugreifen kann. Der Anzeigeminiporttreiber muss dieses Flag festlegen, damit der Benutzermodus-Anzeigetreiber erfolgreich die pfnLockCb-Funktion für die Zuordnung aufruft. Wenn dieses Flag für die Zuordnung nicht 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-Wertmembers (0x00000001).

PermanentSysMem

[out] Ein UINT-Wert, der angibt, ob eine Kopie der Zuordnung im Systemspeicher aufbewahrt werden soll, auch wenn sich der Inhalt in einem Speichersegment befindet. Standardmäßig geht ein Speicher zur Unterstützung des Surface-Systems beim Übertragen einer Zuordnung an ein Speichersegment verloren. Wenn das PermanentSysMem-Flag angegeben und die Zuordnung aus einem Speichersegment entfernt wird, wird der Inhalt der Zuordnung verworfen und nicht ausgelagert, wenn die Zuordnung nicht modifiziert 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 Speicher zur Unterstützung des Systemspeichers für die Zuordnung zurück. Wenn sich die Zuordnung in einem Speichersegment befindet, wenn der Benutzermodusanzeigetreiber pfnUnlockCb aufruft, wird die Speichersegmentressource für die Zuordnung mit dem neuen Inhalt aktualisiert. Dieses Update wird für den Anzeigeminiporttreiber als regulärer Pagingvorgang über die DxgkDdiBuildPagingBuffer-Funktion angezeigt. Beachten Sie, dass diese Anforderung in der gesperrten Region widergespiegelt werden sollte, wenn der Anzeigeminiporttreiber für einen Pagingvorgang eine minimale Regionsgröße oder Ausrichtung erfordert. Wenn der Treiber PermanentSysMem festlegt, muss der Treiber auch das CpuVisible-Element festlegen. Der Treiber darf PermanentSysMem nicht auf der primären Oberfläche festlegen.

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

Cached

[out] Ein UINT-Wert, der angibt, ob der Speicher für die Zuordnungssicherung als zwischengespeicherter Speicher zugeordnet werden soll; Standardmäßig wird der Speicher für die Zuordnungssicherung als kombinierter Schreibspeicher gespeichert. Wenn eine zwischengespeicherte Speicherzuordnung in einem Segment verwendet wird, das nicht im Cache kohärent ist (z. B. ein Speichersegment oder ein AGP-Segment), stellt der Videospeicher-Manager die Kohärenz für den Inhalt der Zuordnung sicher, indem er ihn zum geeigneten Zeitpunkt aus dem Cache des Prozessors löscht.

Wenn der Treiber Cached und auch das ExistingSysMem - oder ExistingKernelSysMem-Element festlegt, gibt der Treiber dem Videospeicher-Manager an, dass der vorhandene Speicher zwischengespeichert wurde. Wenn der vorhandene Arbeitsspeicher zwischengespeichert wurde, der Treiber jedoch nicht den zwischengespeicherten Member festlegen kann, kann der Videospeicher-Manager die Datenkohärenz nicht sicherstellen, und es tritt eine Beschädigung auf. Der Treiber sollte das zwischengespeicherte Element für eine Zuordnung festlegen, die von der Anwendung oder dem Benutzermodusanzeigetreiber gelesen werden soll. Der Treiber sollte niemals den zwischengespeicherten Member für eine schreibgeschützte Zuordnung festlegen.

Wenn der Treiber dieses Element festlegt, muss der Treiber auch das CpuVisible-Element festlegen. Der Treiber darf cached nicht auf der primären Oberfläche festlegen.

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

Protected

[out] Ein UINT-Wert, der angibt, ob der Speicher für die Zuordnungssicherung 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 diesen Member nicht in Kombination mit den Membern PermanentSysMem, ExistingSysMem oder ExistingKernelSysMem festlegen. Der Treiber darf auf der primären Oberfläche nicht geschützt festgelegt werden.

Das Festlegen dieses Elements entspricht dem Festlegen des vierten Bits des 32-Bit-Wertmembers (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 ein Mehrfachblatt sein.

Wenn der Systemspeicherbereich eine zwischenspeicherbare virtuelle Adresse ist, sollte der Treiber das zwischengespeicherte Element festlegen, um den Videospeicher-Manager zu informieren, um die Cachekohärenz für die Zuordnung sicherzustellen. Wenn der Zwischengespeicherte Member nicht angegeben ist, stellt der Videospeicher-Manager fest, dass der Systemspeicherbereich nicht zwischengespeichert, zusammen geschrieben oder zwischengespeichert werden kann. In dieser Situation stellt der Treiber jedoch entweder die Cachekohärenz sicher oder bestimmt, dass die Cachekohärenz für die angegebene Verwendung kein Problem darstellt.

Beachten Sie, dass diese Art der Zuordnung implizit die gleiche Sperrsemantik aufweist wie eine Zuordnung, in der das PermanentSysMem-Element festgelegt ist.

Der Treiber kann ExistingSysMem nicht in Kombination mit den Membern PermanentSysMem, Protected oder ExistingKernelSysMem festlegen. Der Treiber darf ExistingSysMem nicht auf der primären Oberfläche festlegen.

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

ExistingKernelSysMem

[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 Kernelmodusadresse sein, die auf einer Seite ausgerichtet ist, und ein Seitenformat mit mehrfacher Größe.

Wenn der Systemspeicherbereich eine zwischenspeicherbare virtuelle Adresse ist, sollte der Treiber das zwischengespeicherte Element festlegen, um den Videospeicher-Manager zu informieren, um die Cachekohärenz für die Zuordnung sicherzustellen. Wenn der Zwischengespeicherte Member nicht angegeben ist, stellt der Videospeicher-Manager fest, dass der Systemspeicherbereich nicht zwischengespeichert, zusammen geschrieben oder zwischengespeichert werden kann. In dieser Situation stellt der Treiber jedoch entweder die Cachekohärenz sicher oder bestimmt, dass die Cachekohärenz für die angegebene Verwendung kein Problem darstellt.

Beachten Sie, dass diese Art der Zuordnung implizit die gleiche Sperrsemantik aufweist wie eine Zuordnung, in der das PermanentSysMem-Element festgelegt ist.

Der Treiber kann ExistingKernelSysMem nicht in Kombination mit den Membern PermanentSysMem, Protected oder ExistingSysMem festlegen. Der Treiber darf ExistingKernelSysMem nicht auf der primären Oberfläche festlegen.

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

FromEndOfSegment

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

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

DisableLargePageMapping

[out] Ein UINT-Wert, der angibt, ob die Zuordnung großer Seiten für die Zuordnung 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 Seitentabelle der niedrigsten Ebene durch eine große Seite ersetzt wird, die die gleiche Abdeckung der Seitentabelle der Ebene 0 aufweist. Dieses Flag deaktiviert dies und verwendet eine Seitentabelle für die Adressübersetzung.

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

Overlay

[out] Ein UINT-Wert, der angibt, ob die Zuordnung für einen Überlagerungsvorgang verwendet wird. Overlayzuordnungen werden im Arbeitsspeicher angeheftet, und der Videospeicher-Manager kann sie nicht entfernen, es sei denn, der TDR-Prozess (Timeout Detection and Recovery), Plug & Play (PnP) wird beendet oder die Synchronisierung der Ebene 3 erfolgt. Beachten Sie, dass Überlagerungen vor der Synchronisierung der 3. Stufe normalerweise zerstört werden. Standardmäßig sind Overlayzuordnungen begrenzt und dürfen nicht mehr als die letzten 20 Prozent eines Segments belegen. Wenn eine Überlagerungszuordnung in einem Blendensegment zugeordnet ist, sollte der Anzeigeminiporttreiber die Größe jeder anderen Zuordnung, die dieses Blendensegment als Entfernungssegment verwendet, auf 80 Prozent der Segmentgröße beschränken. Der Anzeigeminiporttreiber gibt an, dass eine Zuordnung ein Segment für die Entfernung verwenden kann, indem das entsprechende Bit für das Segment im EvictionSegmentSet-Member der DXGK_ALLOCATIONINFO-Struktur für die Zuordnung angegeben wird. Wenn der Anzeigeminiporttreiber die Größe einer anderen Zuordnung nicht einschränkt, kann der Videospeicher-Manager diese Zuordnung nicht über das Segment entfernen, 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 Zuordnung, 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-Wertmembers (0x00000100).

Capture

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

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

CreateInVpr

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

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

Reserved00

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

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

DXGK_ALLOC_RESERVED17

[in] Dieser Member ist reserviert und sollte auf null festgelegt werden.

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

Reserved02

[in] Dieser Member ist reserviert und sollte auf null festgelegt werden.

Das Festlegen dieses Elements entspricht dem Festlegen des dreizehnten Bits des 32-Bit-Wertelements (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 erfordert. MapApertureCpuVisible ist Teil der MapAperatureSegment2-Funktionalität von DxgkDdiBuildPagingBuffer. Daher muss der Treiber DXGK_VIDMMCAPS MapAperature2Supported festlegen, um dieses Feld zu verwenden. Wenn MapAperature2Supported nicht festgelegt ist, aber der Treiber MapApertureCpuVisible angibt, schlägt der Aufruf von DxgkDdiCreateAllocation fehl. Weitere Informationen finden Sie unter IOMMU DMA Remapping . Wird ab Windows Server 2022 unterstützt.

Reserved03

[in] Dieser Member ist reserviert und sollte auf null festgelegt werden.

HistoryBuffer

[out] Ein UINT-Wert, der angibt, ob der Benutzermodusanzeigetreiber einen Verlaufspuffer zuordnet. Der Anzeigeminiporttreiber muss dieses Flag festlegen, um anzugeben, dass der Benutzermodustreiber die Erstellung und Zerstörung von Verlaufspuffern verwalten kann.

Wenn der Display-Miniporttreiber HistoryBuffer festlegt, muss er auch das CpuVisible-Flag festlegen. Wenn der Treiber cachekonshärente Blendensegmente unterstützt, muss er auch Cached festlegen, und alle anderen Member müssen auf 0 festgelegt werden.

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

AccessedPhysically

Der Kernelmodustreiber legt das Flag für Zuordnungen fest, auf die von ihrer physischen Adresse zugegriffen wird. Diese Zuordnung wird zusammenhängend aus GPU-Speichersegmenten zugeordnet. Die Zuordnungen sind nicht zusammenhängend, wenn sie aus dem Systemspeicher zugeordnet werden.

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

ExplicitResidencyNotification

Wenn diese Flags angegeben sind, erhält der Treiber einen NotifyResidency-Pagingpuffervorgang, wenn die Zuordnungsresidenz geändert wird (entfernt, committet). Das Flag kann nur festgelegt werden, wenn das Flag "AccessedPhysically " festgelegt ist.

Das Festlegen dieses Elements entspricht dem Festlegen des siebzehnten Bits des 32-Bit-Elements Wert (0x00010000).

HardwareProtected

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

CpuVisibleOnDemand

Wenn dieses Element festgelegt ist, versucht der Videospeicher-Manager, die virtuelle Adresse für die Zuordnung zuzuordnen, wenn sie zugeordnet/gesperrt ist. Dies führt dazu, dass die Zuordnung nicht über eine permanente virtuelle Adresse verfügt, wodurch der verwendete virtuelle Adressraum reduziert wird. Es verhält sich ähnlich wie das CpuVisible-Flag , da es sich um eine Zuordnung handelt, auf die die CPU direkt zugreifen kann, aber es ruft nur die virtuelle Adresse "bei Bedarf" ab, anstatt dauerhaft zugewiesen zu werden.

DXGK_ALLOC_RESERVED16

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED15

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED14

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED13

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED12

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED11

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED10

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED9

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED4

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED3

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED2

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED1

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

DXGK_ALLOC_RESERVED0

[in] Dieser Member ist reserviert und sollte auf 0 (null) festgelegt werden.

Value

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

Hinweise

Ein Anzeige-Miniporttreiber, der auf eine beliebige WDDM-Version >= WDDM 2.0 abzielt, verwendet diese Struktur, um diese Flags für den Videospeicher-Manager anzugeben. Treiber, die auf WDDM-Versionen vor WDDM 2.0 abzielen, sollten DXGK_ALLOCATIONINFOFLAGS verwenden.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10
Kopfzeile d3dkmddi.h (einschließlich D3dkmddi.h)

Weitere Informationen

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb