estructura de DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 (d3dkmddi.h)

La estructura DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 identifica las propiedades de una asignación.

Sintaxis

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;

Miembros

CpuVisible

[out] Valor UINT que especifica si la asignación es accesible directamente por la CPU. El controlador de minipuerto de pantalla debe establecer esta marca para que el controlador de pantalla en modo de usuario llame correctamente a la función pfnLockCb en la asignación. Si esta marca no está establecida en la asignación, pfnLockCb devuelve un error.

Tenga en cuenta que solo el proceso que creó una asignación compartida puede bloquear esa asignación.

Establecer este miembro equivale a establecer el primer bit del miembro Value de 32 bits (0x00000001).

PermanentSysMem

[out] Valor UINT que especifica si una copia de la asignación debe mantenerse en la memoria del sistema incluso cuando el contenido se encuentra en un segmento de memoria. De forma predeterminada, se pierde un almacén de respaldo de memoria del sistema de superficie al transferir una asignación a un segmento de memoria. Cuando se especifica la marca PermanentSysMem y la asignación se expulsa de un segmento de memoria, el contenido de la asignación se descarta y no se pagina si la asignación no está desfasada (es decir, la asignación no era el destino de una operación de escritura, ya que estaba paginada en).

Una llamada a pfnLockCb en la asignación siempre devuelve el almacén de respaldo de memoria del sistema para la asignación. Si la asignación se encuentra en un segmento de memoria cuando el controlador de pantalla en modo de usuario llama a pfnUnlockCb, el recurso de segmento de memoria para la asignación se actualiza con el nuevo contenido. Esta actualización aparece, en el controlador de minipuerto para mostrar, como una operación de paginación normal a través de la función DxgkDdiBuildPagingBuffer . Tenga en cuenta que si el controlador de minipuerto de pantalla requiere un tamaño de región o una alineación mínimos para una operación de paginación, este requisito debe reflejarse en la región que se está bloqueando. Cuando el controlador establece PermanentSysMem, el controlador también debe establecer el miembro CpuVisible . El controlador no debe establecer PermanentSysMem en la superficie principal.

Establecer este miembro equivale a establecer el segundo bit del miembro Value de 32 bits (0x00000002).

Cached

[out] Valor UINT que especifica si el almacén de respaldo de asignación debe asignarse como memoria almacenada en caché; De forma predeterminada, el almacén de respaldo de asignación se almacena como memoria combinada de escritura. Cuando se usa una asignación de memoria almacenada en caché en un segmento que no es coherente (por ejemplo, un segmento de memoria o un segmento AGP), el administrador de memoria de vídeo garantiza la coherencia para el contenido de la asignación al vaciarlo de la memoria caché del procesador en el momento adecuado.

Cuando el controlador establece Cached y también establece el miembro ExistingSysMem o ExistingKernelSysMem , el controlador indica al administrador de memoria de vídeo que se asignó a la memoria caché existente. Si la memoria existente se asignó en caché, pero el controlador no puede establecer el miembro almacenado en caché , el administrador de memoria de vídeo no puede garantizar la coherencia de los datos y se produce daños. El controlador debe establecer el miembro almacenado en caché para una asignación que va a leer la aplicación o el controlador de pantalla en modo de usuario. El controlador nunca debe establecer el miembro almacenado en caché para una asignación de solo escritura.

Cuando el controlador establece este miembro, el controlador también debe establecer el miembro CpuVisible . El controlador no debe establecer Cached en la superficie principal.

Establecer este miembro equivale a establecer el tercer bit del miembro Value de 32 bits (0x00000004).

Protected

[out] Valor UINT que especifica si el almacén de respaldo de asignación debe asignarse en la memoria del kernel en lugar del espacio de direcciones del usuario para proteger la asignación del posible acceso directo a la CPU por parte de una aplicación. El controlador no puede establecer este miembro en combinación con el miembro PermanentSysMem, ExistingSysMem o ExistingKernelSysMem . El controlador no debe establecer Protegido en la superficie principal.

Establecer este miembro equivale a establecer el cuarto bit del miembro Value de 32 bits (0x00000008).

ExistingSysMem

[out] Valor UINT que especifica si el administrador de memoria de vídeo debe usar el intervalo de memoria del sistema existente como almacén de respaldo para la asignación. El intervalo de memoria del sistema debe ser una dirección válida en modo de usuario para el proceso actual para el tamaño de la asignación. El intervalo de memoria del sistema también debe estar alineado con páginas y debe ser una página de varios tamaños.

Si el intervalo de memoria del sistema es una dirección virtual que se puede almacenar en caché, el controlador debe establecer el miembro Almacenado en caché para informar al administrador de memoria de vídeo para garantizar la coherencia de caché en la asignación. Si no se especifica el miembro almacenado en caché, el administrador de memoria de vídeo determina que el intervalo de memoria del sistema no se puede almacenar en caché, escribir combinado o almacenar en caché; sin embargo, en esta situación, el controlador garantiza la coherencia de caché o determina que la coherencia de caché no es un problema para el uso especificado.

Tenga en cuenta que este tipo de asignación tiene implícitamente la misma semántica de bloqueo que una asignación en la que se establece el miembro PermanentSysMem .

El controlador no puede establecer ExistingSysMem en combinación con el miembro PermanentSysMem, Protected o ExistingKernelSysMem . El controlador no debe establecer ExistingSysMem en la superficie principal.

Establecer este miembro equivale a establecer el quinto bit del miembro Value de 32 bits (0x00000010).

ExistingKernelSysMem

[out] Valor UINT que especifica si el administrador de memoria de vídeo debe usar el intervalo de memoria del sistema existente como almacén de respaldo para la asignación. El intervalo de memoria del sistema debe ser una dirección válida en modo kernel alineada en una página y una página de varios tamaños.

Si el intervalo de memoria del sistema es una dirección virtual que se puede almacenar en caché, el controlador debe establecer el miembro Almacenado en caché para informar al administrador de memoria de vídeo para garantizar la coherencia de caché en la asignación. Si no se especifica el miembro almacenado en caché, el administrador de memoria de vídeo determina que el intervalo de memoria del sistema no se puede almacenar en caché, escribir combinado o almacenar en caché; sin embargo, en esta situación, el controlador garantiza la coherencia de caché o determina que la coherencia de caché no es un problema para el uso especificado.

Tenga en cuenta que este tipo de asignación tiene implícitamente la misma semántica de bloqueo que una asignación en la que se establece el miembro PermanentSysMem .

El controlador no puede establecer ExistingKernelSysMem en combinación con el miembro PermanentSysMem, Protected o ExistingSysMem . El controlador no debe establecer ExistingKernelSysMem en la superficie principal.

Establecer este miembro equivale a establecer el sexto bit del miembro Value de 32 bits (0x00000020).

FromEndOfSegment

[out] Valor UINT que especifica si la asignación se debe asignar desde el final de un segmento durante la paginación. El administrador de memoria de vídeo examina un espacio de direcciones de segmento y busca espacio para la asignación desde el final del segmento en lugar de examinar desde el principio del segmento (que es el comportamiento predeterminado). Sin embargo, la información de segmentos sugerido y preferido toma precedentes sobre esta marca.

Establecer este miembro equivale a establecer el séptimo bit del miembro Value de 32 bits (0x00000040).

DisableLargePageMapping

[out] Valor UINT que especifica si se debe deshabilitar la asignación de páginas grandes para la asignación. Se agregó compatibilidad con páginas grandes para controladores a partir de WDDM2.1. Las páginas grandes se usan al traducir direcciones virtuales, donde la tabla de páginas de nivel más bajo se reemplaza por una página grande que tiene la misma cobertura de la tabla de páginas de nivel 0. Esta marca deshabilita y usa una tabla de páginas para la traducción de direcciones.

Establecer este miembro equivale a establecer el octavo bit del miembro Value de 32 bits (0x00000080).

Overlay

[out] Valor UINT que especifica si la asignación es para una operación de superposición. Las asignaciones de superposición se anclan en memoria y el administrador de memoria de vídeo no puede expulsarlas a menos que se produzca el proceso de detección y recuperación de tiempo de espera (TDR), Plug and Play (PnP) o se produce la sincronización de nivel tres. Tenga en cuenta que antes de que se produzca la sincronización de nivel tres, las superposiciones normalmente se destruyen. De forma predeterminada, las asignaciones de superposición son limitadas y no pueden ocupar más del último 20 por ciento de un segmento. Si se asigna una asignación de superposición en un segmento de apertura, el controlador de minipuerto de pantalla debe limitar el tamaño de cualquier otra asignación que use ese segmento de apertura como segmento de expulsión al 80 por ciento del tamaño del segmento. El controlador de minipuerto de pantalla indica que una asignación puede usar un segmento para la expulsión especificando el bit adecuado para el segmento en el miembro EvictionSegmentSet de la estructura de DXGK_ALLOCATIONINFO para la asignación. Si el controlador de minipuerto de pantalla no limita el tamaño de otra asignación, el administrador de memoria de vídeo no puede expulsar esa asignación a través del segmento porque la asignación anclada (es decir, la asignación de superposición) ocupa el área necesaria para la expulsión. En este caso, el contenido de la otra asignación que se está expulsando se pierde y la aplicación propietaria de la asignación perdida ya no se puede representar con esa asignación.

Establecer este miembro equivale a establecer el noveno bit del miembro Value de 32 bits (0x00000100).

Capture

[out] Valor UINT que especifica si la asignación se usa para una operación de captura. Las asignaciones de captura se anclan en memoria de forma similar a las asignaciones de superposición. Por lo tanto, los problemas que se aplican a las asignaciones de superposición también se aplican a las asignaciones de captura. Para obtener más información sobre estos problemas, vea la descripción de la marca Superposición . Tenga en cuenta que antes de que se produzca la sincronización de nivel tres , las capturas se detienen normalmente.

Establecer este miembro equivale a establecer el décimo bit del miembro Value de 32 bits (0x00000200).

CreateInVpr

[out] Valor UINT que especifica si la asignación se debe crear en el intervalo protegido por vídeo. Este miembro se usa para la administración de derechos digitales de hardware (DRM) en versiones >de WDDM = WDDM 2.1.

Establecer este miembro equivale a establecer el undécimo bit del miembro Value de 32 bits (0x00000400).

Reserved00

[in] Para las versiones de WDDM anteriores a WDDM 2.1, este miembro está reservado y debe establecerse en cero.

Establecer este miembro equivale a establecer el undécimo bit del miembro Value de 32 bits (0x00000400).

DXGK_ALLOC_RESERVED17

[in] Este miembro está reservado y debe establecerse en cero.

Establecer este miembro equivale a establecer el duodécimo bit del miembro Value de 32 bits (0x00000800).

Reserved02

[in] Este miembro está reservado y debe establecerse en cero.

Establecer este miembro equivale a establecer el decimotercer bit del miembro Value de 32 bits (0x00001000).

MapApertureCpuVisible

[in] Cuando se establece, indica que el controlador requiere acceso de CPU a la memoria durante una llamada dxgkDdiBuildPagingBuffer para una operación de DXGK_OPERATION_MAP_APERTURE_SEGMENT2 . MapApertureCpuVisible forma parte de la funcionalidad MapAperatureSegment2 de DxgkDdiBuildPagingBuffer, por lo que el controlador debe establecer DXGK_VIDMMCAPS MapAperature2Supported para usar este campo. Si MapAperature2Supported no se establece, pero el controlador especifica MapApertureCpuVisible, se producirá un error en la llamada a DxgkDdiCreateAllocation . Consulte la reasignación de DMA de IOMMU para obtener más información. Se admite a partir de Windows Server 2022.

Reserved03

[in] Este miembro está reservado y debe establecerse en cero.

HistoryBuffer

[out] Valor UINT que especifica si el controlador de pantalla en modo de usuario asigna un búfer de historial. El controlador de minipuerto de pantalla debe establecer esta marca para indicar que el controlador en modo de usuario puede administrar la creación y destrucción de búferes de historial.

Cuando el controlador de miniporte de pantalla establece HistoryBuffer, también debe establecer la marca CpuVisible . Si el controlador admite segmentos de apertura coherentes con caché, también debe establecer Cached y todos los demás miembros deben establecerse en cero.

Establecer este miembro equivale a establecer el decimoquinto bit del miembro Value de 32 bits (0x00004000).

AccessedPhysically

El controlador de modo kernel establece la marca en las asignaciones, a las que accede su dirección física. Dicha asignación se asignará contiguamente desde segmentos de memoria de GPU. Las asignaciones no serán contiguas cuando se asignan desde la memoria del sistema.

Establecer este miembro equivale a establecer el decimosexto bit del miembro Valor de 32 bits (0x00008000).

ExplicitResidencyNotification

Cuando se especifican estas marcas, el controlador recibe una operación de búfer de paginación NotifyResidency cuando se cambia la residencia de asignación (expulsada, confirmada). La marca solo se puede establecer cuando se establece la marca AccessedPhysically .

Establecer este miembro equivale a establecer el diecisiete bit del miembro Value de 32 bits (0x00010000).

HardwareProtected

Cuando se establece este miembro, la asignación contendrá el contenido usado para DRM de hardware.

CpuVisibleOnDemand

Cuando se establece este miembro, el administrador de memoria de vídeo intentará asignar la dirección virtual para la asignación cuando se asigne o bloquee. Esto provocará que la asignación no tenga una dirección virtual permanente, lo que reduce la cantidad de espacio de direcciones virtuales utilizado. Se comporta de forma similar a la marca CpuVisible en que es una asignación accesible directamente por la CPU, pero solo obtiene la dirección virtual para ella "a petición" en lugar de asignarse permanentemente.

DXGK_ALLOC_RESERVED16

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED15

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED14

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED13

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED12

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED11

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED10

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED9

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED4

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED3

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED2

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED1

[in] Este miembro está reservado y debe establecerse en cero.

DXGK_ALLOC_RESERVED0

[in] Este miembro está reservado y debe establecerse en cero.

Value

[out] Miembro de la unión que DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 contiene que puede contener un valor de 32 bits que identifica las propiedades de la asignación.

Comentarios

Un controlador de minipuerto de pantalla que tiene como destino cualquier versión >de WDDM = WDDM 2.0 usa esta estructura para especificar estas marcas para el administrador de memoria de vídeo. Los controladores que se dirigen a las versiones de WDDM anteriores a WDDM 2.0 deben usar DXGK_ALLOCATIONINFOFLAGS.

Puede especificar las propiedades de una asignación estableciendo bits en el miembro Value de 32 bits o estableciendo miembros individuales de la estructura en la unión que contiene la estructura DXGK_ALLOCATIONINFOFLAGS .

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10
Encabezado d3dkmddi.h (incluye D3dkmddi.h)

Consulte también

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb