Compartir a través de


Inicialización del uso de segmentos de memoria

Los segmentos de memoria, en el contexto del modelo de controlador de pantalla para Windows Vista y versiones posteriores (WDDM), describen el espacio de direcciones de la unidad de procesamiento gráfico (GPU) en el administrador de memoria de vídeo. Los segmentos de memoria generalizan y virtualizan los recursos de memoria de vídeo. Los segmentos de memoria se configuran según los tipos de memoria que admite el hardware (por ejemplo, memoria del búfer de fotogramas o apertura de memoria del sistema).

Para inicializar cómo usa segmentos de memoria, el subsistema del kernel de gráficos de Microsoft DirectX (Dxgkrnl.sys) llama a la función DxgkDdiQueryAdapterInfo del controlador de miniporte de pantalla. Para dirigir el controlador de miniporte de pantalla para devolver información sobre los segmentos de memoria desde la llamada DxgkDdiQueryAdapterInfo , el subsistema de gráficos especifica el DXGKQAITYPE_QUERYSEGMENT o el valor de DXGKQAITYPE_QUERYSEGMENT3 en el miembro Type de la estructura DXGKARG_QUERYADAPTERINFO .

El subsistema de gráficos llama a la función DxgkDdiQueryAdapterInfo del controlador de miniporte de pantalla dos veces para obtener información de segmento. La primera llamada a DxgkDdiQueryAdapterInfo recupera el número de segmentos admitidos por el controlador y la segunda llamada recupera información detallada sobre cada segmento. En las llamadas a DxgkDdiQueryAdapterInfo, el controlador apunta al miembro pOutputData de DXGKARG_QUERYADAPTERINFO a estructuras de DXGK_QUERYSEGMENTOUT rellenadas (para una versión de controlador anterior al modelo de controlador de pantalla de Windows (WDDM) 1.2) o a estructuras de DXGK_QUERYSEGMENTOUT3 rellenadas (para un controlador WDDM 1.2 y versiones posteriores).

En la primera llamada, el miembro pSegmentDescriptor de DXGK_QUERYSEGMENTOUT (para una versión del controlador anterior a WDDM 1.2) o DXGK_QUERYSEGMENTOUT3 (para un controlador WDDM 1.2 y versiones posteriores) se establece en NULL. El controlador debe rellenar solo el miembro NbSegment de DXGK_QUERYSEGMENTOUT o DXGK_QUERYSEGMENTOUT3 con el número de tipos de segmento que admite. Este número también indica el número de estructuras de DXGK_SEGMENTDESCRIPTOR no rellenadas (para una versión del controlador anterior a WDDM 1.2) o DXGK_SEGMENTDESCRIPTOR3 (para un controlador WDDM 1.2 y versiones posteriores) que el controlador requiere desde la segunda llamada a DxgkDdiQueryAdapterInfo.

En la segunda llamada, el controlador debe rellenar todos los miembros de DXGK_QUERYSEGMENTOUT o DXGK_QUERYSEGMENTOUT3. En la segunda llamada, el controlador debe rellenar una matriz del tamaño de NbSegment de DXGK_SEGMENTDESCRIPTOR o estructuras de DXGK_SEGMENTDESCRIPTOR3 en el miembro pSegmentDescriptor de DXGK_QUERYSEGMENTOUT o DXGK_QUERYSEGMENTOUT3 con información sobre los segmentos que admite el controlador.

En ambas llamadas a DxgkDdiQueryAdapterInfo, el miembro pInputData de DXGKARG_QUERYADAPTERINFO apunta a una estructura DXGK_QUERYSEGMENTIN que contiene información sobre la ubicación y las propiedades de la apertura de AGP. Si no hay ninguna apertura AGP disponible, o si hay una presente, pero no se instala ningún controlador GART adecuado, la información sobre la apertura de AGP se establece en cero. Si no hay ninguna apertura AGP, el controlador de minipuerto de pantalla no debe indicar, en la matriz pSegmentDescriptor de DXGK_QUERYSEGMENTOUT o DXGK_QUERYSEGMENTOUT3, que admite un segmento de apertura de tipo AGP. Si se indica un segmento de apertura de tipo AGP en tales circunstancias, el adaptador no se inicializa.

Durante la inicialización, dado que la memoria es abundante, la memoria del búfer de paginación se puede asignar desde un segmento específico. El administrador de memoria de vídeo asigna memoria para el búfer de paginación del segmento especificado en el miembro PagingBufferSegmentId de DXGK_QUERYSEGMENTOUT o DXGK_QUERYSEGMENTOUT3. El controlador indica el identificador del segmento paging-buffer en la segunda llamada a DxgkDdiQueryAdapterInfo. El controlador también debe especificar el tamaño en bytes que se debe asignar para el búfer de paginación en el miembro PagingBufferSize de DXGK_QUERYSEGMENTOUT o DXGK_QUERYSEGMENTOUT3.

Para obtener más información sobre los segmentos de memoria y trabajar con búferes de paginación, vea Controlar segmentos de memoria y recursos de memoria de vídeo de paginación.