Inicializando o uso de segmentos de memória

Segmentos de memória, no contexto do modelo de driver de exibição para Windows Vista e posterior (WDDM), descrevem o espaço de endereço da GPU (unidade de processamento gráfico) para o gerenciador de memória de vídeo. Os segmentos de memória generalizam e virtualizam recursos de memória de vídeo. Os segmentos de memória são configurados de acordo com os tipos de memória compatíveis com o hardware (por exemplo, memória de buffer de quadro ou abertura de memória do sistema).

Para inicializar como ele usa segmentos de memória, o subsistema de kernel de elementos gráficos do Microsoft DirectX (Dxgkrnl.sys) chama a função DxgkDdiQueryAdapterInfo do driver de miniport. Para direcionar o driver de miniporto de exibição para retornar informações sobre segmentos de memória da chamada DxgkDdiQueryAdapterInfo , o subsistema gráfico especifica o DXGKQAITYPE_QUERYSEGMENT ou o valor DXGKQAITYPE_QUERYSEGMENT3 no membro Type da estrutura DXGKARG_QUERYADAPTERINFO .

O subsistema gráfico chama a função DxgkDdiQueryAdapterInfo do driver de miniporta de exibição duas vezes para obter informações sobre o segmento. A primeira chamada para DxgkDdiQueryAdapterInfo recupera o número de segmentos compatíveis com o driver e a segunda chamada recupera informações detalhadas sobre cada segmento. Nas chamadas para DxgkDdiQueryAdapterInfo, o driver aponta o membro pOutputData do DXGKARG_QUERYADAPTERINFO para estruturas de DXGK_QUERYSEGMENTOUT populadas (para uma versão do driver antes do WDDM (Modelo de Driver de Exibição do Windows) 1.2) ou para estruturas de DXGK_QUERYSEGMENTOUT3 populadas (para um driver WDDM 1.2 e posterior).

Na primeira chamada, o membro pSegmentDescriptor de DXGK_QUERYSEGMENTOUT (para uma versão de driver anterior ao WDDM 1.2) ou DXGK_QUERYSEGMENTOUT3 (para um driver WDDM 1.2 e posterior) está definido como NULL. O driver deve preencher apenas o membro NbSegment de DXGK_QUERYSEGMENTOUT ou DXGK_QUERYSEGMENTOUT3 com o número de tipos de segmento compatíveis. Esse número também indica o número de DXGK_SEGMENTDESCRIPTOR não preenchidos (para uma versão do driver antes do WDDM 1.2) ou DXGK_SEGMENTDESCRIPTOR3 (para um driver WDDM 1.2 e posterior) que o driver requer da segunda chamada para DxgkDdiQueryAdapterInfo.

Na segunda chamada, o driver deve preencher todos os membros de DXGK_QUERYSEGMENTOUT ou DXGK_QUERYSEGMENTOUT3. Na segunda chamada, o driver deve preencher uma matriz do tamanho de NbSegment de estruturas de DXGK_SEGMENTDESCRIPTOR ou DXGK_SEGMENTDESCRIPTOR3 no membro pSegmentDescriptor de DXGK_QUERYSEGMENTOUT ou DXGK_QUERYSEGMENTOUT3 com informações sobre os segmentos compatíveis com o driver.

Em ambas as chamadas para DxgkDdiQueryAdapterInfo, o membro pInputData do DXGKARG_QUERYADAPTERINFO aponta para uma estrutura DXGK_QUERYSEGMENTIN que contém informações sobre o local e as propriedades da abertura do AGP. Se nenhuma abertura de AGP estiver disponível ou se houver um, mas nenhum driver GART apropriado estiver instalado, as informações sobre a abertura do AGP serão definidas como zero. Se nenhuma abertura de AGP estiver presente, o driver de miniporto de exibição não deverá indicar, na matriz pSegmentDescriptor de DXGK_QUERYSEGMENTOUT ou DXGK_QUERYSEGMENTOUT3, que ele dá suporte a um segmento de abertura do tipo AGP. Se um segmento de abertura do tipo AGP for indicado nessas circunstâncias, o adaptador não será inicializado.

Durante a inicialização, como a memória é abundante, a memória do buffer de paginação pode ser alocada de um segmento específico. O gerenciador de memória de vídeo aloca memória para o buffer de paginação do segmento especificado no membro PagingBufferSegmentId de DXGK_QUERYSEGMENTOUT ou DXGK_QUERYSEGMENTOUT3. O driver indica o identificador do segmento de buffer de paginação na segunda chamada para DxgkDdiQueryAdapterInfo. O driver também deve especificar o tamanho em bytes que devem ser alocados para o buffer de paginação no membro PagingBufferSize de DXGK_QUERYSEGMENTOUT ou DXGK_QUERYSEGMENTOUT3.

Para obter mais informações sobre segmentos de memória e como trabalhar com buffers de paginação, consulte Manipulando segmentos de memória e paginando recursos de memória de vídeo.