Compartir a través de


estructura DXGK_ALLOCATIONINFOFLAGS (d3dkmddi.h)

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

Sintaxis

typedef struct _DXGK_ALLOCATIONINFOFLAGS {
  union {
    struct {
      UINT CpuVisible : 1;
      UINT PermanentSysMem : 1;
      UINT Cached : 1;
      UINT Protected : 1;
      UINT ExistingSysMem : 1;
      UINT ExistingKernelSysMem : 1;
      UINT FromEndOfSegment : 1;
      UINT Swizzled : 1;
      UINT Overlay : 1;
      UINT Capture : 1;
      UINT UseAlternateVA : 1;
      UINT SynchronousPaging : 1;
      UINT LinkMirrored : 1;
      UINT LinkInstanced : 1;
      UINT HistoryBuffer : 1;
      UINT AccessedPhysically : 1;
      UINT ExplicitResidencyNotification : 1;
      UINT HardwareProtected : 1;
      UINT CpuVisibleOnDemand : 1;
      UINT Reserved : 4;
      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;

Miembros

CpuVisible

[out] Valor UINT que especifica si la CPU puede acceder directamente a la asignación. 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á sucia (es decir, la asignación no era el destino de una operación de escritura desde que se paginaba 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 de la asignación se actualiza con el nuevo contenido. Esta actualización aparece, en el controlador de minipuerto de pantalla, 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 con la memoria caché (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 la memoria existente se asignó en caché. 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 producen daños. El controlador debe establecer el miembro almacenado en caché para una asignación que la aplicación o el controlador de pantalla en modo de usuario van a leer. 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 frente al 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 tener un tamaño múltiple de página.

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 sugerencia y preferida toma precedentes sobre esta marca.

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

Swizzled

[out] Valor UINT que especifica si la asignación está desenredada y requiere compatibilidad especial por parte del administrador de memoria de vídeo para bloquear la asignación. Para obtener más información sobre las asignaciones desenredadas, consulte Bloqueo de asignaciones desenredadas.

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 produzca una 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 % 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 % 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 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 normalmente se detienen.

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

UseAlternateVA

[out] Valor UINT que especifica si se puede bloquear la asignación principal. UseAlternateVA solo es válido para la asignación principal. Si se especifica UseAlternateVA para cualquier otra asignación, no se crea la asignación. Cuando se crea una asignación principal mediante UseAlternateVA, se configura un intervalo de giro para la asignación principal cuando se crea la asignación.

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

SynchronousPaging

[out] Valor UINT que especifica si la asignación se debe paginar de forma sincrónica. Si el controlador de minipuerto de pantalla establece este bit para una asignación, el administrador de memoria de vídeo esperará hasta que la asignación ya no esté ocupada (es decir, el administrador de memoria de vídeo esperará hasta que la unidad de procesamiento de gráficos (GPU) notifique todas las barreras que hacen referencia a la asignación) antes de que el administrador de memoria de vídeo envíe un búfer de paginación que haga referencia a la asignación.

Del mismo modo, el administrador de memoria de vídeo esperará a que se complete una operación de paginación en una asignación sincrónica antes de que el administrador de memoria de vídeo permita al controlador enviar un búfer de acceso directo a memoria (DMA) que no sea de paginación.

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

LinkMirrored

[out] Valor UINT que especifica si se debe replicar una sola instancia de una asignación en todos los adaptadores físicos de un adaptador lógico (es decir, un vínculo). El administrador de memoria de vídeo llama al controlador a la página en y expulsa la asignación en todos los adaptadores físicos con un único almacén de respaldo compartido en la memoria del sistema.

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

LinkInstanced

[out] Valor UINT que especifica si se paginarán instancias diferentes de una asignación y se expulsarán de todos los adaptadores físicos de un adaptador lógico (es decir, un vínculo). Existe un almacén de respaldo de memoria del sistema por adaptador físico en un adaptador lógico.

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

HistoryBuffer

[out] Valor UINT que especifica si el controlador de visualización 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 los búferes del historial.

Cuando el controlador de minipuerto 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).

Se admite a partir de Windows 8.1.

AccessedPhysically

El controlador de modo kernel establece la marca en las asignaciones a las que tiene acceso su dirección física. Dicha asignación se asignará de forma contigua a partir de segmentos de memoria de GPU. Las asignaciones no serán contiguas cuando se asignen desde la memoria del sistema.

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

Se admite a partir de Windows 10.

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).

Se admite a partir de Windows 10.

HardwareProtected

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

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.

Reserved

Reservado para uso del sistema. Disponible a partir de Windows 10.

DXGK_ALLOC_RESERVED16

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED15

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED14

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED13

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED12

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED11

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED10

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED9

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED4

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED3

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED2

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED1

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

DXGK_ALLOC_RESERVED0

[in] Este miembro está reservado y debe establecerse en cero. Se admite a partir de Windows 8.

Value

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

Comentarios

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

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 Vista
Encabezado d3dkmddi.h (incluya D3dkmddi.h)

Consulte también

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS_WDDM2_0

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb