estrutura DXGK_SEGMENTDESCRIPTOR3 (d3dkmddi.h)
A estrutura DXGK_SEGMENTDESCRIPTOR3 contém informações sobre um segmento com suporte para driver composto por memória reservada do BIOS (que é limpa durante uma transição para um estado de baixa potência) e memória reservada para driver.
Sintaxe
typedef struct _DXGK_SEGMENTDESCRIPTOR3 {
[out] DXGK_SEGMENTFLAGS Flags;
[out] PHYSICAL_ADDRESS BaseAddress;
[out] PHYSICAL_ADDRESS CpuTranslatedAddress;
[out] SIZE_T Size;
[out] UINT NbOfBanks;
[out] SIZE_T *pBankRangeTable;
[out] SIZE_T CommitLimit;
SIZE_T SystemMemoryEndAddress;
SIZE_T Reserved;
} DXGK_SEGMENTDESCRIPTOR3;
Membros
[out] Flags
Uma estrutura DXGK_SEGMENTFLAGS que identifica propriedades, em sinalizadores de campo de bit, para o segmento.
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 esteja acessível à CPU, se outros membros forem definidos, o adaptador não será inicializado.
[out] BaseAddress
O endereço base do segmento, conforme determinado pela GPU (unidade de processamento gráfico). O endereço físico de uma alocação que o gerenciador de memória de vídeo paginou no segmento recebe um endereço GPU que é deslocado do endereço base especificado por BaseAddress .
O gerenciador de memória de vídeo ignora o endereço base dos segmentos de abertura do tipo AGP (em que o sinalizador de campo de bits Agp é especificado no membro Flags ) e, em vez disso, usa o endereço físico real do segmento dentro da abertura do AGP, conforme determinado no barramento em que a GPU está localizada. Nessa situação, o driver pode usar endereços que o gerenciador de memória de vídeo gerou para alocação diretamente sem a necessidade de tradução.
[out] CpuTranslatedAddress
O endereço base do segmento, em relação ao barramento no qual a GPU está conectada. Por exemplo, quando a GPU está conectada no barramento PCI, CpuTranslatedAddress é o endereço base do intervalo utilizável especificado por um BAR (registro de endereço base) PCI. O driver especifica esse endereço somente se especificar um segmento acessível pela CPU definindo o sinalizador de campo de bit cpuVisible no membro Flags .
Esse membro é ignorado para segmentos 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 ).
Antes que o gerenciador de memória de vídeo mapeie um endereço virtual para o intervalo físico, o gerenciador de memória de vídeo converte esse endereço físico com base na exibição da CPU do barramento e informa o driver sobre a operação para que o driver possa configurar uma abertura para acessar o conteúdo do segmento no local especificado.
[out] Size
O tamanho, em bytes, do segmento. Esse tamanho deve ser um múltiplo do tamanho da página do host nativo (por exemplo, 4 KB na arquitetura x86).
Para segmentos de abertura do tipo AGP (em que o sinalizador de campo de bits Agp é especificado no membro Flags ), o gerenciador de memória de vídeo aloca o máximo de espaço possível, para que esse membro seja ignorado.
[out] NbOfBanks
O número de bancos no segmento, se o banco for usado (ou seja, se o sinalizador de campo de bits UseBanking estiver definido no membro Flags ).
[out] pBankRangeTable
Uma matriz de valores que indica os intervalos que delimitam cada banco no segmento. O driver especificará essa matriz somente se também definir o sinalizador de campo de bits UseBanking no membro Flags .
A matriz especifica os endereços finais do primeiro banco por meio do banco NbOfBanks(ou seja, os deslocamentos finais para o segmento para cada banco). Observe o seguinte:
Os bancos são contíguos.
O primeiro banco começa no deslocamento zero do segmento.
O último banco termina no final do segmento, portanto, o driver não é necessário para especificar o endereço final do último banco.
[out] CommitLimit
O número máximo de bytes que podem ser confirmados no segmento. Para um segmento de memória, o limite de confirmação é sempre o mesmo que o tamanho do segmento, que é especificado no membro Size . Para um segmento de abertura, o driver pode limitar a quantidade de memória que pode ser confirmada para o segmento em sistemas com pequenas quantidades de memória física.
SystemMemoryEndAddress
Para segmentos parcialmente compostos pela memória do sistema, todas as alocações que começam após esse endereço são limpas em uma transição para um estado de hibernação. As alocações que existem inteiramente na memória do sistema, em que o endereço do segmento é menor ou igual a SystemMemoryEndAddress, não são removidas nesta transição.
O driver de miniporta de exibição deve definir esse membro como um valor não NULL se o segmento for parcialmente preservado em uma transição para um estado de hibernação, caso em que o membro PartiallyPreservedDuringHibernate na estrutura DXGK_SEGMENTFLAGS deve ser definido.
A memória reservada ao driver é executada do endereço do segmento 0 até SystemMemoryEndAddress, inclusive. A memória reservada do BIOS é executada de (SystemMemoryEndAddress+1) até o final do segmento.
Reserved
Esse membro é reservado e deve ser definido como zero.
Comentários
Essa estrutura é usada por um driver de miniporto de exibição do modo kernel WDDM 1.2 ou posterior para retornar informações sobre segmentos de memória em resposta a uma chamada de função DxgkDdiQueryAdapterInfo na qual o subsistema gráfico especifica o valor DXGKQAITYPE_QUERYSEGMENT3 no membro Type da estrutura DXGKARG_QUERYADAPTERINFO .
Essa estrutura é apontada pelo membro pSegmentDescriptor da estrutura DXGK_QUERYSEGMENTOUT3 .
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8 |
Servidor mínimo com suporte | Windows Server 2012 |
Cabeçalho | d3dkmddi.h |