메모리 세그먼트 사용 초기화

메모리 세그먼트는 WDDM(Windows Vista 이상) 디스플레이 드라이버 모델의 컨텍스트에서 비디오 메모리 관리자에 대한 GPU(그래픽 처리 장치) 주소 공간을 설명합니다. 메모리 세그먼트는 비디오 메모리 리소스를 일반화하고 가상화합니다. 메모리 세그먼트는 하드웨어에서 지원하는 메모리 유형(예: 프레임 버퍼 메모리 또는 시스템 메모리 조리개)에 따라 구성됩니다.

메모리 세그먼트를 사용하는 방법을 초기화하기 위해 Microsoft DirectX 그래픽 커널 하위 시스템(Dxgkrnl.sys)은 디스플레이 미니포트 드라이버의 DxgkDdiQueryAdapterInfo 함수를 호출합니다. 디스플레이 미니포트 드라이버가 DxgkDdiQueryAdapterInfo 호출에서 메모리 세그먼트에 대한 정보를 반환하도록 지시하기 위해 그래픽 하위 시스템은 DXGKARG_QUERYADAPTERINFO 구조체의 Type 멤버에서 DXGKQAITYPE_QUERYSEGMENT 또는 DXGKQAITYPE_QUERYSEGMENT3 값을 지정합니다.

그래픽 하위 시스템은 세그먼트 정보에 대해 디스플레이 미니포트 드라이버의 DxgkDdiQueryAdapterInfo 함수를 두 번 호출합니다. DxgkDdiQueryAdapterInfo에 대한 첫 번째 호출은 드라이버에서 지원하는 세그먼트 수를 검색하고 두 번째 호출은 각 세그먼트에 대한 자세한 정보를 검색합니다. DxgkDdiQueryAdapterInfo 호출에서 드라이버는 DXGKARG_QUERYADAPTERINFOpOutputData 멤버를 채워진 DXGK_QUERYSEGMENTOUT 구조체(WDDM(Windows Display Driver Model) 1.2 이전 드라이버 버전) 또는 채워진 DXGK_QUERYSEGMENTOUT3 구조체(WDDM 1.2 이상 드라이버의 경우)로 가리킵니다.

첫 번째 호출에서 DXGK_QUERYSEGMENTOUTpSegmentDescriptor 멤버(WDDM 1.2 이전의 드라이버 버전) 또는 DXGK_QUERYSEGMENTOUT3(WDDM 1.2 이상 드라이버의 경우)가 NULL로 설정됩니다. 드라이버는 DXGK_QUERYSEGMENTOUTNbSegment 멤버만 채우거나 DXGK_QUERYSEGMENTOUT3 지원하는 세그먼트 형식의 수로 채워야 합니다. 이 숫자는 또한 드라이버가 DxgkDdiQueryAdapterInfo에 대한 두 번째 호출에서 요구하는 채워지지 않은 DXGK_SEGMENTDESCRIPTOR(WDDM 1.2 이전의 드라이버 버전) 또는 DXGK_SEGMENTDESCRIPTOR3(WDDM 1.2 이상 드라이버의 경우) 구조체의 수를 나타냅니다.

두 번째 호출에서 드라이버는 DXGK_QUERYSEGMENTOUT 또는DXGK_QUERYSEGMENTOUT3 모든 멤버를 채워야 합니다. 두 번째 호출에서 드라이버는 DXGK_QUERYSEGMENTOUT 또는 DXGK_QUERYSEGMENTOUT3 pSegmentDescriptor 멤버에 있는 DXGK_SEGMENTDESCRIPTOR 또는 DXGK_SEGMENTDESCRIPTOR3구조체의NbSegment 크기 배열을 드라이버가 지원하는 세그먼트에 대한 정보로 채워야 합니다.

DxgkDdiQueryAdapterInfo에 대한 두 호출에서 DXGKARG_QUERYADAPTERINFOpInputData 멤버는 AGP 조리개 위치 및 속성에 대한 정보를 포함하는 DXGK_QUERYSEGMENTIN 구조를 가리킵니다. AGP 조리개를 사용할 수 없거나 가 있지만 적절한 GART 드라이버가 설치되지 않은 경우 AGP 조리개에 대한 정보가 0으로 설정됩니다. AGP 조리개 없는 경우 표시 미니포트 드라이버는 AGP 형식 조리개 세그먼트를 지원한다는 것을 pSegmentDescriptor 배열의 DXGK_QUERYSEGMENTOUT 또는 DXGK_QUERYSEGMENTOUT3 표시해서는 안 됩니다. 이러한 상황에서 AGP 형식 조리개 세그먼트가 표시되면 어댑터가 초기화되지 않습니다.

초기화 중에 메모리가 풍부하기 때문에 페이징 버퍼에 대한 메모리를 특정 세그먼트에서 할당할 수 있습니다. 비디오 메모리 관리자는 DXGK_QUERYSEGMENTOUT 또는 DXGK_QUERYSEGMENTOUT3PagingBufferSegmentId 멤버에 지정된 세그먼트의 페이징 버퍼에 대한 메모리 할당합니다. 드라이버는 DxgkDdiQueryAdapterInfo에 대한 두 번째 호출에서 페이징 버퍼 세그먼트의 식별자를 나타냅니다. 또한 드라이버는 DXGK_QUERYSEGMENTOUT 또는DXGK_QUERYSEGMENTOUT3PagingBufferSize 멤버에서 페이징 버퍼에 할당해야 하는 크기(바이트)를 지정해야 합니다.

메모리 세그먼트 및 페이징 버퍼 작업에 대한 자세한 내용은 메모리 세그먼트 처리비디오 메모리 리소스 페이징을 참조하세요.