estructura DXGK_SEGMENTFLAGS (d3dkmddi.h)
La estructura DXGK_SEGMENTFLAGS identifica las propiedades de un segmento que el controlador proporciona a través de una llamada a su función DxgkDdiQueryAdapterInfo .
Sintaxis
typedef struct _DXGK_SEGMENTFLAGS {
union {
struct {
UINT Aperture : 1;
UINT Agp : 1;
UINT CpuVisible : 1;
UINT UseBanking : 1;
UINT CacheCoherent : 1;
UINT PitchAlignment : 1;
UINT PopulatedFromSystemMemory : 1;
UINT PreservedDuringStandby : 1;
UINT PreservedDuringHibernate : 1;
UINT PartiallyPreservedDuringHibernate : 1;
UINT DirectFlip : 1;
UINT Use64KBPages : 1;
UINT ReservedSysMem : 1;
UINT SupportsCpuHostAperture : 1;
UINT SupportsCachedCpuHostAperture : 1;
UINT ApplicationTarget : 1;
UINT VprSupported : 1;
UINT VprPreservedDuringStandby : 1;
UINT EncryptedPagingSupported : 1;
UINT LocalBudgetGroup : 1;
UINT NonLocalBudgetGroup : 1;
UINT PopulatedByReservedDDRByFirmware : 1;
#if ...
UINT Reserved : 10;
#elif
UINT Reserved : 11;
#elif
UINT Reserved : 21;
#else
UINT Reserved : 22;
#endif
};
UINT Value;
};
} DXGK_SEGMENTFLAGS;
Miembros
Aperture
[out] Valor UINT que especifica si el segmento es un segmento de apertura en lugar de un segmento de memoria. Un segmento de apertura no tiene páginas físicas que pueden contener contenido para una asignación. Cuando el administrador de memoria de vídeo pagina una asignación en un segmento de memoria, el administrador de memoria transfiere el contenido de la asignación desde el almacén de respaldo de memoria del sistema a la ubicación del segmento. Cuando el administrador de memoria de vídeo pagina una asignación en un segmento de apertura, el administrador de memoria asigna las páginas físicas del almacén de respaldo de asignación al segmento.
Si el controlador especifica este miembro, también debe implementar los tipos de operación map-aperture-segment y unmap-aperture-segment para su función DxgkDdiBuildPagingBuffer .
Establecer este miembro equivale a establecer el primer bit del miembro Value de 32 bits (0x00000001).
Agp
[out] Valor UINT que especifica si el segmento es un segmento de apertura de tipo AGP**, que usa una parte de la apertura AGP que expone el conjunto de chips. El administrador de memoria de vídeo asigna la página para la apertura subyacente y se comunica con el controlador de tabla de reasignación de direcciones gráficas (GART) para asignar y desasignar memoria para la apertura. Dado que solo puede existir un segmento AGP, el controlador no debe especificar la marca de campo de bits de Agp con ninguna otra marca de campo de bits de DXGK_SEGMENTFLAGS.
Establecer este miembro equivale a establecer el segundo bit del miembro Value de 32 bits (0x00000002).
CpuVisible
[out] Valor UINT que especifica si el segmento de memoria es accesible para la CPU en la dirección especificada por el miembro CpuTranslatedAddress de la estructura DXGK_SEGMENTDESCRIPTOR que describe el segmento de memoria.
Este miembro no tiene ningún significado para un segmento de apertura, incluido el segmento de apertura de tipo AGP. La única excepción se produce cuando el controlador de pantalla en modo de usuario no ha configurado una dirección virtual alternativa para una asignación principal (es decir, cuando el controlador no ha establecido UseAlternateVA en el miembro Flags de la estructura D3DDDICB_LOCKFLAGS durante una llamada a la función pfnLockCb ).
Consulta Comentarios para obtener más información.
Establecer este miembro equivale a establecer el tercer bit del miembro Value de 32 bits (0x00000004).
UseBanking
[out] Valor UINT que especifica si el segmento se divide en bancos que el controlador usa para proporcionar sugerencias al administrador de memoria de vídeo sobre la colocación de asignaciones dentro del segmento. El controlador también debe especificar información bancaria válida en los miembros NbOfBanks y pBankRangeTable de la estructura DXGK_SEGMENTDESCRIPTOR que describe el segmento.
Establecer este miembro equivale a establecer el cuarto bit del miembro Value de 32 bits (0x00000008).
CacheCoherent
[out] Valor UINT que especifica si el segmento de apertura puede mantener la coherencia de caché con páginas almacenables en caché asignadas a la apertura. Este miembro solo se puede establecer con el valor del miembro Aperture (es decir, CacheCoherent no tiene ningún significado para un segmento de memoria).
Establecer este miembro equivale a establecer el quinto bit del miembro Value de 32 bits (0x00000010).
PitchAlignment
[out] Valor UINT que especifica si una asignación asignada al segmento debe estar alineada con el tono. Para este tipo de segmento, el administrador de memoria de vídeo usa el miembro Size de la estructura de DXGK_ALLOCATIONINFO para la asignación para asignar un almacén de respaldo para la asignación. Sin embargo, el administrador de memoria de vídeo usa el miembro PitchAlignedSize de DXGK_ALLOCATIONINFO para asignar recursos para el segmento. Una asignación destinada a este tipo de segmento normalmente tiene un tamaño diferente para el almacén de respaldo y para el segmento. Cuando el tamaño de la memoria auxiliar no coincide con el tamaño del segmento, el controlador debe determinar cómo mover correctamente los datos de la asignación. Este tipo de segmento no se puede usar para la expulsión.
Establecer este miembro equivale a establecer el sexto bit del miembro Value de 32 bits (0x00000020).
PopulatedFromSystemMemory
[out] Valor UINT que especifica si el segmento de memoria se rellena realmente a partir de la memoria del sistema que el controlador asignó durante la inicialización. Si el segmento de memoria se rellena desde la memoria del sistema que el BIOS reservado y no es accesible para el sistema operativo (es decir, el sistema operativo no cuenta esta memoria del sistema cuando el sistema operativo notifica la cantidad total de memoria del sistema), el controlador no debe establecer esta marca. Esta marca no es válida y se omite en segmentos de apertura.
Establecer este miembro equivale a establecer el séptimo bit del miembro Value de 32 bits (0x00000040).
PreservedDuringStandby
[out] Valor UINT que especifica si el segmento se conserva en una transición a un estado de alimentación del sistema en espera.
Para obtener más información sobre las opciones de transición de energía, vea Comentarios.
Establecer este miembro equivale a establecer el octavo bit del miembro Value de 32 bits (0x00000080).
Se admite a partir de Windows 8.
PreservedDuringHibernate
[out] Valor UINT que especifica si el segmento se conserva en una transición a un estado de alimentación del sistema hibernado. No establezca esta marca a menos que también se establezca el miembro PreservedDuringStandby . Para obtener más información sobre las opciones de transición de energía, vea Comentarios.
Establecer este miembro equivale a establecer el noveno bit del miembro Value de 32 bits (0x00000100).
Se admite a partir de Windows 8.
PartiallyPreservedDuringHibernate
[out] Valor UINT que especifica si el segmento se conserva parcialmente en una transición a un estado de alimentación del sistema hibernado. No establezca esta marca a menos que también se establezca el miembro PreservedDuringStandby . Para obtener más información sobre las opciones de transición de energía, vea Comentarios.
Establecer este miembro equivale a establecer el décimo bit del miembro Value de 32 bits (0x00000200).
Se admite a partir de Windows 8.
DirectFlip
[out] Valor UINT que especifica si un segmento admite asignaciones de Volteo directo. En este caso, el controlador debe asegurarse de que las asignaciones de Direct Flip se pueden anclar y examinar desde este segmento.
Establecer este miembro equivale a establecer el undécimo bit del miembro Value de 32 bits (0x00000400).
Se admite a partir de Windows 8.
Use64KBPages
[out] Cuando se establece, el segmento de memoria de GPU admite páginas de 64 KB. De lo contrario, se admiten páginas de 4 KB. Cuando el controlador establece el límite y una asignación se puede paginar en el segmento, la alineación de asignación, devuelta por el controlador de modo kernel de DXGK_ALLOCATIONINFO, debe ser múltiplo de 64 KB.
Se admite a partir de Windows 10.
ReservedSysMem
[out] Reservado para uso del sistema y no debe establecerse mediante el controlador de modo kernel.
Se admite a partir de Windows 10.
SupportsCpuHostAperture
[out] Cuando se establece, el segmento se puede asignar a través de la apertura del host de CPU. Esta marca no se puede usar en combinación con la marca CpuVisible .
Se admite a partir de Windows 10.
SupportsCachedCpuHostAperture
[out] Cuando se establece, esto indica que el hardware admite la apertura coherente del host de CPU de la caché de CPU. Además, se debe establecer la marca SupportsCpuHostAperture . Normalmente, la marca se establece mediante los controladores de emulación de GPU de software.
Se admite a partir de Windows 10.
ApplicationTarget
[out] Cuando se establece, indica que este segmento debe tener como destino los presupuestos de la aplicación.
Se admite a partir de Windows 10.
VprSupported
[out] Cuando se establece, indica que se admite la región protegida por vídeo (VPR).
VprPreservedDuringStandby
[out] Cuando se establece, indica que el contenido de las VPR se conserva durante el modo de espera.
EncryptedPagingSupported
[out] Cuando se establece, indica que las asignaciones protegidas por hardware se cifran durante la paginación.
LocalBudgetGroup
[out] Cuando se establece, indica que este segmento cuenta con el grupo de presupuestos del segmento de memoria local.
NonLocalBudgetGroup
[out] Cuando se establece, indica que este segmento cuenta con el grupo de presupuestos de segmentos de memoria no local.
PopulatedByReservedDDRByFirmware
[out] Cuando se establece, indica que este segmento se rellena a partir de la memoria DDR del sistema reservada por firmware. Disponible a partir de Windows Server 2022 (WDDM 2.9).
Reserved
[out] Este miembro está reservado y debe establecerse en cero.
Value
[out] Miembro de la unión que DXGK_SEGMENTFLAGS contiene que puede contener un valor de 32 bits que identifica las propiedades del segmento.
Comentarios
El controlador puede especificar propiedades del segmento estableciendo bits en el miembro Value de 32 bits o estableciendo miembros individuales de la estructura en la unión que DXGK_SEGMENTFLAGS contiene.
Tenga en cuenta que para un segmento de apertura de tipo AGP, el controlador debe establecer exclusivamente el miembro Agp de la estructura en la unión que DXGK_SEGMENTFLAGS contiene. Aunque el segmento de apertura de tipo AGP es una apertura y visible para la CPU, si se establecen otros miembros, el adaptador no se inicializa.
En el caso especial en el que la asignación usa un segmento de apertura en una asignación principal compartida (DXGKARG_GETSTANDARDALLOCATIONDRIVERDATA.StandardAllocationType es D3DKMDT_STANDARDALLOCATION_SHAREDPRIMARYSURFACE) y DXGK_ALLOCATIONINFOFLAGS. UseAlternateVA no está establecido, el controlador debe usar una asignación principal respaldada por secciones (DXGK_VIDMMCAPS.SectionBackedPrimary se establece) cuando se llama a la función DxgkDdiQueryAdapterInfo del controlador. Mediante el uso de un principal con respaldo de sección, puede evitar las limitaciones de CpuVisible para el segmento de apertura.
Puede evitar las limitaciones de CpuVisible para un segmento de apertura mediante una asignación principal compartida respaldada por secciones. En este caso, use un segmento de apertura en una asignación principal compartida (DXGKARG_GETSTANDARDALLOCATIONDRIVERDATA.StandardAllocationType es D3DKMDT_STANDARDALLOCATION_SHAREDPRIMARYSURFACE), no establezca DXGK_ALLOCATIONINFOFLAGS. UseAlternateVA y use una asignación principal respaldada por secciones (establezca DXGK_VIDMMCAPS.SectionBackedPrimary) cuando se llama a la función DxgkDdiQueryAdapterInfo del controlador.
Configuración de espera optimizada
La combinación de valores para los miembros PreservedDuringStandby, PreservedDuringHibernate y ParcialmentePreservedDuringHibernate determina si un segmento se purga de su contenido cuando el sistema entra en un estado del sistema de baja potencia (en espera), como se indica a continuación.
Conservado durante el modo de espera | Conservado durante la hibernación | Parcialmente conservado durante la hibernación | Estado en espera | Estado de hibernación |
---|---|---|---|---|
1 | 1 | 1 | no válido | no válido |
1 | 1 | 0 | no purgado | no purgado |
1 | 0 | 1 | no purgado | purgado parcialmente |
1 | 0 | 0 | no purgado | Purgado |
0 | 1 | 1 | no válido | no válido |
0 | 1 | 0 | no válido | no válido |
0 | 0 | 1 | no válido | no válido |
0 | 0 | 0 | Purgado | Purgado |
El sistema operativo no reconoce combinaciones en esta tabla marcadas como "no válidas".
Si el modo de suspensión híbrida está habilitado, el sistema actúa como si estuviera hibernando: purga los segmentos que no se conservan durante la hibernación, incluso si entra en un estado de bajo consumo.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible a partir de Windows Vista. |
Encabezado | d3dkmddi.h (incluya D3dkmddi.h) |