DXGKDDI_RENDERKM 콜백 함수(d3dkmddi.h)
GDI 하드웨어 가속을 지원하는 디스플레이 어댑터의 경우 DxgkDdiRenderKm 함수는 커널 모드 CDD(정식 표시 드라이버)가 전달한 명령 버퍼에서 DMA(직접 메모리 액세스) 버퍼를 생성합니다.
구문
DXGKDDI_RENDERKM DxgkddiRenderkm;
NTSTATUS DxgkddiRenderkm(
[in] IN_CONST_HANDLE hContext,
[in/out] INOUT_PDXGKARG_RENDER pRenderKmArgs
)
{...}
매개 변수
[in] hContext
DMA 및 명령 버퍼에 대한 디바이스 컨텍스트에 대한 핸들입니다. 디스플레이 미니포트 드라이버의 DxgkDdiCreateContext 함수는 이전에 DxgkDdiCreateContext의 pCreateContext 매개 변수가 가리키는 DXGKARG_CREATECONTEXT 구조체의 hContext 멤버에서 이 핸들을 반환했습니다.
드라이버가 컨텍스트 생성을 지원하지 않는 경우 Microsoft DirectX 그래픽 커널 하위 시스템은 컨텍스트에 대한 핸들을 디바이스에 대한 핸들로 바꿉니다. 디스플레이 미니포트 드라이버의 DxgkDdiCreateDevice 함수는 이전에 DxgkDdiCreateDevice의 pCreateDevice 매개 변수가 가리키는 DXGKARG_CREATEDEVICE 구조체의 hDevice 멤버에서 디바이스 핸들을 반환했습니다.
[in/out] pRenderKmArgs
DMA 버퍼 및 형식이 지정된 명령 버퍼에 대한 정보를 포함하는 DXGKARG_RENDER 구조체에 대한 포인터입니다.
디스플레이 미니포트 드라이버가 GDI 하드웨어 가속을 지원하는 경우 pRenderKmArgspCommand->는 DXGK_RENDERKM_COMMAND 명령 버퍼를 가리킵니다.
드라이버는 입력 명령 버퍼를 DMA 버퍼 명령으로 변환하고 패치 위치 목록을 빌드해야 합니다.
반환 값
DxgkDdiRenderKm 은 다음 값 중 하나를 반환합니다.
| 반환 코드 | 설명 |
|---|---|
| STATUS_SUCCESS | 전체 명령 버퍼가 변환되었습니다. |
| STATUS_NO_MEMORY | DxgkDdiRenderKm 에서 완료하는 데 필요한 메모리를 할당할 수 없습니다. |
| STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER | 현재 DMA 버퍼가 고갈되었습니다. |
| STATUS_INVALID_PARAMETER | DxgkDdiRenderKm 은 그래픽 하드웨어에서 지원할 수 없는 명령 매개 변수를 감지했습니다. 그러나 그래픽 하드웨어는 명령 자체를 지원할 수 있습니다. 드라이버가 이 오류 코드를 반환할 필요가 없습니다. 대신 지원되지 않는 명령 매개 변수를 검색할 때 STATUS_ILLEGAL_INSTRUCTION 반환할 수 있습니다. |
| STATUS_INVALID_USER_BUFFER | DxgkDdiRenderKm 에서 데이터 또는 명령이 실행되거나 오버런되는 것을 감지했습니다. 즉, 드라이버가 예상보다 적은 또는 더 많은 명령 또는 데이터를 수신했습니다. 드라이버가 이 오류 코드를 반환할 필요가 없습니다. 대신 데이터 또는 명령이 오버런되거나 오버런되면 STATUS_ILLEGAL_INSTRUCTION 반환할 수 있습니다. |
| STATUS_INVALID_HANDLE | DxgkDdiRenderKm 이 명령 버퍼에서 잘못된 핸들을 감지했습니다. |
| STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE | 디스플레이 미니포트 드라이버가 DMA 스트림에서 오류를 감지했습니다. 드라이버가 이 오류 코드를 반환하면 그래픽 컨텍스트 디바이스가 손실된 상태로 배치됩니다. |
설명
DirectX 그래픽 커널 하위 시스템은 디스플레이 미니포트 드라이버의 DxgkDdiRenderKm 함수를 호출하여 운영 체제에서 제공하는 커널 모드 CDD(정식 디스플레이 드라이버)에 의해 전달되는 명령 버퍼에서 DMA 버퍼를 생성합니다. 출력 DMA 버퍼 외에도 디스플레이 미니포트 드라이버는 출력 패치 위치 목록을 생성해야 합니다. 비디오 메모리 관리자는 이 목록을 사용하여 DMA 버퍼를 적절하게 분할하고 패치합니다.
try/except 보호가 필요하지 않습니다. 장치별 핸들 외에도 DirectX 그래픽 커널 하위 시스템은 각 할당에 대해 마지막으로 알려진 GPU 세그먼트 주소를 가진 디스플레이 미니포트 드라이버를 제공합니다. 할당 인덱스 N이 현재 페이징된 경우 DirectX 그래픽 커널 하위 시스템은 DXGKARG_RENDER pAllocationList 멤버의 Nth 요소에 대한 SegmentId 멤버를 0으로 설정합니다. 할당 목록의 Nth 요소의 SegmentId 멤버가 0으로 설정되지 않은 경우 DirectX 그래픽 커널 하위 시스템이 DxgkDdiPatch 함수를 호출하여 DMA 버퍼를 다시 일치하기 전에 디스플레이 미니포트 드라이버가 제공된 세그먼트 주소 정보를 사용하여 생성된 DMA 버퍼를 패치해야 합니다. DirectX 그래픽 커널 하위 시스템이 드라이버가 제대로 패치되어야 하는 DMA 버퍼에서 DxgkDdiPatch 함수를 호출하지 않을 수 있으므로 드라이버가 요청될 때 이 초기 패치를 수행해야 합니다.
보장된 계약 DMA 모드에서 디스플레이 미니포트 드라이버가 명령 버퍼를 DMA 버퍼로 변환하는 경우 CDD는 번역 명령에 충분한 리소스를 보장해야 합니다. 번역에 충분한 리소스가 없는 경우 디스플레이 미니포트 드라이버는 DMA 버퍼를 거부해야 합니다. 자세한 내용은 보증 계약 DMA 버퍼 모델 사용을 참조하세요.
DxgkDdiRenderKm 을 페이징할 수 있어야 합니다.
요구 사항
| 지원되는 최소 클라이언트 | Windows 운영 체제의 Windows 7 이상 버전에서 사용할 수 있습니다. |
| 대상 플랫폼 | 데스크톱 |
| 헤더 | d3dkmddi.h |
| IRQL | PASSIVE_LEVEL |
참고 항목
피드백
다음에 대한 사용자 의견 제출 및 보기