리소스 생성 시 DXGI 정보 전달
Direct3D 버전 10 런타임은 사용자 모드 디스플레이 드라이버의 CreateResource(D3D10) 함수를 호출하여 리소스를 만들 때 DXGI 관련 정보를 전달할 수 있습니다. 런타임은 D3D10DDIARG_CREATERESOURCE 구조체의 pPrimaryDesc 멤버에 있는 DXGI_DDI_PRIMARY_DESC 구조체에 대한 포인터를 전달하여 리소스를 기본으로 사용할 수 있도록 지정할 수 있습니다(즉, 리소스를 디스플레이로 검사할 수 있습니다). 런타임은 런타임이 D3D10DDIARG_CREATERESOURCE BindFlags 멤버의 D3D10_DDI_BIND_PRESENT 비트도 설정하는 경우에만 pPrimaryDesc를 NULL이 아닌 값으로 설정합니다.
런타임은 DXGI_DDI_PRIMARY_DESC Flags 멤버에서 DXGI_DDI_PRIMARY_OPTIONAL 플래그를 지정하여 드라이버가 플립 스타일 프레젠테이션에서 리소스 사용을 옵트아웃할 수 있음을 사용자 모드 디스플레이 드라이버에 알릴 수 있습니다. 런타임에 리소스를 대칭 이동 스타일 프레젠테이션에 사용하면 안 됨을 알리기 위해 드라이버는 DXGI_DDI_PRIMARY_DESC DriverFlags 멤버에서 DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT 플래그를 설정합니다.
드라이버가 리소스를 만들기 위한 CreateResource(D3D10) 호출에서 DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT 반환하는 경우 런타임은 리소스가 프레젠테이션의 원본일 때 항상 비트 블록 전송(비트블렛)스타일 프레젠테이션(대칭 이동 스타일 프레젠테이션 대신)을 수행합니다. 이 기능은 그래픽 하드웨어가 지정된 리소스 유형의 특정 하위 집합을 검색할 수 없는 경우에 유용합니다. 예를 들어 그래픽 하드웨어는 다중 샘플링된 백 버퍼 유형의 리소스를 검색하거나 검사하지 못할 수 있습니다. 또한 다중 샘플링된 백 버퍼를 스캔하는 기능은 표면의 형식에 따라 더 달라질 수 있습니다. 그래픽 하드웨어가 특정 다중 샘플링 형식을 검색할 수 없는 경우 사용자 모드 표시 드라이버는 이 형식으로 리소스에 대한 DXGI_DDI_PRIMARY_DESC DriverFlags 멤버에서 DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT 플래그를 설정합니다.
런타임이 대칭 이동 스타일 프레젠테이션에서 리소스 사용을 옵트아웃할 가능성에 대해 드라이버에 알리기 위해 DXGI_DDI_PRIMARY_DESC Flags 멤버의 DXGI_DDI_PRIMARY_OPTIONAL 플래그를 설정하지 않으면 드라이버는 CreateResource(D3D10) 호출에서 DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT 플래그와 함께 DXGI_DDI_ERR_UNSUPPORTED 오류 코드를 반환할 수 있습니다. 드라이버의 CreateResource(D3D10) 는 드라이버가 이러한 주 복제본을 검색할 수 없는 경우 pfnSetErrorCb 함수에 대한 호출에서 DXGI_DDI_ERR_UNSUPPORTED 전달합니다. DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT 함께 DXGI_DDI_ERR_UNSUPPORTED 반환하면 DXGI가 프레젠테이션 경로의 프록시 표면을 백 버퍼와 기본 표면 사이에 삽입합니다. 프록시 표면은 항상 크기, 다중 샘플 및 회전 측면에서 기본(스캔 아웃) 표면과 일치합니다. 이 프로세스의 첫 번째 단계는 DXGI가 드라이버가 해당 설정으로 표면 스캔을 거부하는 다중 샘플 또는 회전 설정 중 어느 것을 결정하는 것입니다. DXGI는 다시 크기를 조정하고 회전 없이, 다중 샘플링 없이 또는 둘 다 없이 주 데이터베이스를 만들려고 시도하여 이 결정을 내립니다. DXGI가 스캔 아웃 기능에 대한 드라이버 지원을 결정한 후 DXGI는 기본 및 프록시 표면을 만들고 드라이버는 이러한 두 표면 간에 대칭 이동할 수 있어야 합니다. 이후에도 DXGI는 드라이버의 BltDXGI 함수를 호출하여 백 버퍼에서 프록시 표면으로 비트블렛을 수행하여 자동 회전 또는 다중 샘플링된 백 버퍼에 대한 애플리케이션의 요청을 충족합니다. 이러한 비트블렛은 드라이버에 다중 샘플 확인 또는 회전을 수행하도록 요청합니다. BltDXGI에 대한 자세한 내용은 BltDXGI 참조 페이지를 참조하세요.