estrutura DXGK_SEGMENTFLAGS (d3dkmddi.h)
A estrutura DXGK_SEGMENTFLAGS identifica propriedades para um segmento que o driver fornece por meio de uma chamada para sua função DxgkDdiQueryAdapterInfo .
Sintaxe
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;
Membros
Aperture
[out] Um valor UINT que especifica se o segmento é um segmento de abertura em vez de um segmento de memória. Um segmento de abertura não tem páginas físicas que podem conter conteúdo para uma alocação. Quando o gerenciador de memória de vídeo coloca uma alocação em um segmento de memória, o gerenciador de memória transfere o conteúdo da alocação do repositório de backup de memória do sistema para o local do segmento. Quando o gerenciador de memória de vídeo coloca uma alocação em um segmento de abertura, o gerenciador de memória mapeia as páginas físicas do repositório de backup de alocação para o segmento.
Se o driver especificar esse membro, ele também deverá implementar os tipos de operação map-aperture-segment e unmap-aperture-segment para sua função DxgkDdiBuildPagingBuffer .
Definir esse membro é equivalente a definir o primeiro bit do membro Value de 32 bits (0x00000001).
Agp
[out] Um valor UINT que especifica se o segmento é um segmento de abertura do tipo AGP**, que usa uma parte da abertura do AGP exposta pelo chipset. O gerenciador de memória de vídeo aloca a página para a abertura subjacente e se comunica com o driver GART (tabela de remapeamento de endereço gráfico) para mapear e desmapear a memória para a abertura. Como apenas um segmento AGP pode existir, o driver não deve especificar o sinalizador de campo de bits Agp com qualquer outro DXGK_SEGMENTFLAGS sinalizadores de campo de bits.
Definir esse membro é equivalente a definir o segundo bit do membro Value de 32 bits (0x00000002).
CpuVisible
[out] Um valor UINT que especifica se o segmento de memória está acessível à CPU no endereço especificado pelo membro CpuTranslatedAddress da estrutura DXGK_SEGMENTDESCRIPTOR que descreve o segmento de memória.
Esse membro não tem significado para um segmento de abertura, incluindo o segmento de abertura do tipo AGP. A única exceção ocorre quando o driver de exibição do modo de usuário não tiver configurado um endereço virtual alternativo para uma alocação primária (ou seja, quando o driver não tiver definido UseAlternateVA no membro Flags da estrutura D3DDDICB_LOCKFLAGS durante uma chamada para a função pfnLockCb ).
Consulte Comentários para obter mais informações.
Definir esse membro é equivalente a definir o terceiro bit do membro Value de 32 bits (0x00000004).
UseBanking
[out] Um valor UINT que especifica se o segmento é dividido em bancos que o driver usa para fornecer dicas ao gerenciador de memória de vídeo sobre o posicionamento de alocações dentro do segmento. O driver também deve especificar informações bancárias válidas nos membros NbOfBanks e pBankRangeTable da estrutura DXGK_SEGMENTDESCRIPTOR que descreve o segmento.
Definir esse membro é equivalente a definir o quarto bit do membro Value de 32 bits (0x00000008).
CacheCoherent
[out] Um valor UINT que especifica se o segmento de abertura pode manter a coerência de cache com páginas armazenáveis em cache mapeadas para a abertura. Esse membro só pode ser definido com a configuração do membro Aperture (ou seja, CacheCoherent não tem significado para um segmento de memória).
Definir esse membro é equivalente a definir o quinto bit do membro Value de 32 bits (0x00000010).
PitchAlignment
[out] Um valor UINT que especifica se uma alocação mapeada para o segmento deve ser alinhada à inclinação. Para esse tipo de segmento, o gerenciador de memória de vídeo usa o membro Size da estrutura DXGK_ALLOCATIONINFO para a alocação alocar um repositório de backup para a alocação. No entanto, o gerenciador de memória de vídeo usa o membro PitchAlignedSize do DXGK_ALLOCATIONINFO para alocar recursos para o segmento. Uma alocação direcionada para esse tipo de segmento normalmente tem um tamanho diferente para o repositório de backup e para o segmento. Quando o tamanho do repositório de backup não corresponde ao tamanho do segmento, o driver deve determinar como mover corretamente os dados na alocação. Esse tipo de segmento não pode ser usado para remoção.
Definir esse membro é equivalente a definir o sexto bit do membro Value de 32 bits (0x00000020).
PopulatedFromSystemMemory
[out] Um valor UINT que especifica se o segmento de memória é realmente preenchido da memória do sistema que o driver alocou durante a inicialização. Se o segmento de memória for preenchido da memória do sistema reservada pelo BIOS e não estiver acessível ao sistema operacional (ou seja, o sistema operacional não contará essa memória do sistema quando o sistema operacional relatar a quantidade total de memória do sistema), o driver não deverá definir esse sinalizador. Esse sinalizador é inválido e ignorado em segmentos de abertura.
Definir esse membro é equivalente a definir o sétimo bit do membro Value de 32 bits (0x00000040).
PreservedDuringStandby
[out] Um valor UINT que especifica se o segmento é preservado em uma transição para um estado de energia do sistema em espera.
Para obter mais informações sobre opções de transição de energia, consulte Comentários.
Definir esse membro é equivalente a definir o oitavo bit do membro Value de 32 bits (0x00000080).
Com suporte a partir do Windows 8.
PreservedDuringHibernate
[out] Um valor UINT que especifica se o segmento é preservado em uma transição para um estado de energia do sistema de hibernação. Não defina esse sinalizador, a menos que o membro PreservedDuringStandby também esteja definido. Para obter mais informações sobre opções de transição de energia, consulte Comentários.
Definir esse membro é equivalente a definir o nono bit do membro Value de 32 bits (0x00000100).
Com suporte a partir do Windows 8.
PartiallyPreservedDuringHibernate
[out] Um valor UINT que especifica se o segmento é parcialmente preservado em uma transição para um estado de energia do sistema de hibernação. Não defina esse sinalizador, a menos que o membro PreservedDuringStandby também esteja definido. Para obter mais informações sobre opções de transição de energia, consulte Comentários.
Definir esse membro é equivalente a definir o décimo bit do membro Value de 32 bits (0x00000200).
Com suporte a partir do Windows 8.
DirectFlip
[out] Um valor UINT que especifica se um segmento dá suporte a alocações de Inversão Direta. Nesse caso, o driver deve garantir que as alocações do Direct Flip possam ser fixadas e verificadas desse segmento.
Definir esse membro é equivalente a definir o décimo primeiro bit do membro Value de 32 bits (0x00000400).
Com suporte a partir do Windows 8.
Use64KBPages
[out] Quando definido, o segmento de memória de GPU dá suporte a 64 páginas KB. Caso contrário, há suporte para páginas de 4 KB. Quando o driver define o limite e uma alocação pode ser paginada para o segmento, o alinhamento de alocação, retornado pelo driver de modo kernel de DXGK_ALLOCATIONINFO, deve ser múltiplo de um de 64 KB.
Com suporte a partir do Windows 10.
ReservedSysMem
[out] Reservado para uso do sistema e não deve ser definido pelo driver do modo kernel.
Com suporte a partir do Windows 10.
SupportsCpuHostAperture
[out] Quando definido, o segmento pode ser mapeado por meio da abertura do host da CPU. Esse sinalizador não pode ser usado em combinação com o sinalizador CpuVisible .
Com suporte a partir do Windows 10.
SupportsCachedCpuHostAperture
[out] Quando definido, isso indica que o hardware dá suporte à abertura coerente de host de CPU do cache de CPU. Além disso, o sinalizador SupportsCpuHostAperture deve ser definido. O sinalizador normalmente é definido pelos drivers de emulação de GPU de software.
Com suporte a partir do Windows 10.
ApplicationTarget
[out] Quando definido, ele indica que esse segmento deve ser direcionado pelos orçamentos do aplicativo.
Com suporte a partir do Windows 10.
VprSupported
[out] Quando definido, indica que a VPR (Região Protegida por Vídeo) tem suporte.
VprPreservedDuringStandby
[out] Quando definido, indica que o conteúdo das VPRs é preservado durante o modo de espera.
EncryptedPagingSupported
[out] Quando definido, indica que as alocações protegidas por hardware são criptografadas durante a paginação.
LocalBudgetGroup
[out] Quando definido, indica que esse segmento conta com relação ao grupo de orçamento do segmento de memória local.
NonLocalBudgetGroup
[out] Quando definido, indica que esse segmento conta com relação ao grupo de orçamento do segmento de memória não local.
PopulatedByReservedDDRByFirmware
[out] Quando definido, indica que esse segmento é preenchido da memória DDR reservada do sistema por firmware. Disponível a partir do Windows Server 2022 (WDDM 2.9).
Reserved
[out] Esse membro é reservado e deve ser definido como zero.
Value
[out] Um membro na união que DXGK_SEGMENTFLAGS contém que pode conter um valor de 32 bits que identifica as propriedades do segmento.
Comentários
O driver pode especificar propriedades do segmento definindo bits no membro Value de 32 bits ou definindo membros individuais da estrutura na união que DXGK_SEGMENTFLAGS contém.
Observe que, para um segmento de abertura do tipo AGP, o driver deve definir exclusivamente o membro Agp da estrutura na união que DXGK_SEGMENTFLAGS contém. Embora o segmento de abertura do tipo AGP seja uma abertura e visível para a CPU, se outros membros forem definidos, o adaptador não será inicializado.
No caso especial em que a alocação usa um segmento de abertura em uma alocação primária compartilhada (DXGKARG_GETSTANDARDALLOCATIONDRIVERDATA.StandardAllocationType é D3DKMDT_STANDARDALLOCATION_SHAREDPRIMARYSURFACE) e DXGK_ALLOCATIONINFOFLAGS. UseAlternateVA não está definido, o driver deve usar uma alocação primária com suporte de seção (DXGK_VIDMMCAPS.SectionBackedPrimary é definido) quando a função DxgkDdiQueryAdapterInfo do driver é chamada. Usando um primário com suporte de seção, você pode evitar as limitações do CpuVisible para o segmento de abertura.
Você pode evitar as limitações do CpuVisible para um segmento de abertura usando uma alocação primária compartilhada com suporte de seção. Nesse caso, use um segmento de abertura em uma alocação primária compartilhada (DXGKARG_GETSTANDARDALLOCATIONDRIVERDATA.StandardAllocationType é D3DKMDT_STANDARDALLOCATION_SHAREDPRIMARYSURFACE), não defina DXGK_ALLOCATIONINFOFLAGS. UseAlternateVA e use uma alocação primária com backup de seção (definir DXGK_VIDMMCAPS.SectionBackedPrimary) quando a função DxgkDdiQueryAdapterInfo do driver é chamada.
Configurações de espera otimizadas
A combinação de valores para os membros PreservedDuringStandby, PreservedDuringHibernate e PartiallyPreservedDuringHibernate determina se um segmento é limpo de seu conteúdo quando o sistema entra em um estado de sistema de baixa potência (em espera), da seguinte maneira.
Preservado durante o modo de espera | Preservado durante a hibernação | Parcialmente preservado durante a hibernação | Estado de espera | Estado de hibernação |
---|---|---|---|---|
1 | 1 | 1 | inválido | inválido |
1 | 1 | 0 | não limpo | não limpo |
1 | 0 | 1 | não limpo | parcialmente limpo |
1 | 0 | 0 | não limpo | Purgado |
0 | 1 | 1 | inválido | inválido |
0 | 1 | 0 | inválido | inválido |
0 | 0 | 1 | inválido | inválido |
0 | 0 | 0 | Purgado | Purgado |
O sistema operacional não reconhece combinações nesta tabela marcadas como "inválidas".
Se o modo de suspensão híbrida estiver habilitado, o sistema atuará como se estivesse hibernando: ele limpará segmentos que não são preservados durante a hibernação, mesmo que ele esteja entrando em um estado de baixa potência.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows Vista. |
Cabeçalho | d3dkmddi.h (inclua D3dkmddi.h) |