다음을 통해 공유


DXGI1_2_DDI_BASE_FUNCTIONS 구조체(dxgiddi.h)

WDDM(Windows Display Driver Model) 1.2 이상 사용자 모드 디스플레이 드라이버가 출력에 렌더링된 프레임을 표시하고, 감마를 제어하고, 공유 및 Windows GDI(Graphics Device Interface) 상호 운용 가능한 표면에 대한 알림을 받고, 전체 화면 전환을 관리하는 등의 하위 수준 작업을 수행하기 위해 구현할 수 있는 함수에 대한 포인터를 포함합니다.

구문

typedef struct DXGI1_2_DDI_BASE_FUNCTIONS {
  HRESULT()(DXGI_DDI_ARG_PRESENT *) * pfnPresent;
  HRESULT()(DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS *) * pfnGetGammaCaps;
  HRESULT()(DXGI_DDI_ARG_SETDISPLAYMODE *) * pfnSetDisplayMode;
  HRESULT()(DXGI_DDI_ARG_SETRESOURCEPRIORITY *) * pfnSetResourcePriority;
  HRESULT()(DXGI_DDI_ARG_QUERYRESOURCERESIDENCY *) * pfnQueryResourceResidency;
  HRESULT()(DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES *) * pfnRotateResourceIdentities;
  HRESULT()(DXGI_DDI_ARG_BLT *) * pfnBlt;
  HRESULT()(DXGI_DDI_ARG_RESOLVESHAREDRESOURCE *) * pfnResolveSharedResource;
  HRESULT()(DXGI_DDI_ARG_BLT1 *) * pfnBlt1;
  HRESULT()(DXGI_DDI_ARG_OFFERRESOURCES *) * pfnOfferResources;
  HRESULT()(DXGI_DDI_ARG_RECLAIMRESOURCES *) * pfnReclaimResources;
  HRESULT()(DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *) * pfnGetMultiplaneOverlayCaps;
  HRESULT()(void *) * pfnGetMultiplaneOverlayFilterRange;
  HRESULT()(DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT *) * pfnCheckMultiplaneOverlaySupport;
  HRESULT()(DXGI_DDI_ARG_PRESENTMULTIPLANEOVERLAY *) * pfnPresentMultiplaneOverlay;
} DXGI1_2_DDI_BASE_FUNCTIONS;

멤버

pfnPresent

드라이버의 PresentDXGI 함수에 대한 포인터입니다.

pfnGetGammaCaps

드라이버의 GetGammaCapsDXGI 함수에 대한 포인터입니다.

pfnSetDisplayMode

드라이버의 SetDisplayModeDXGI 함수에 대한 포인터입니다.

pfnSetResourcePriority

드라이버의 SetResourcePriorityDXGI 함수에 대한 포인터입니다.

pfnQueryResourceResidency

드라이버의 QueryResourceResidencyDXGI 함수에 대한 포인터입니다.

pfnRotateResourceIdentities

드라이버의 RotateResourceIdentitiesDXGI 함수에 대한 포인터입니다.

pfnBlt

드라이버의 BltDXGI 함수에 대한 포인터입니다.

Direct3D 런타임은 다중 샘플링된 리소스를 확인하고, 색 형식 변환을 수행하고, 한 번에 늘이거나 축소하는 비트 블록 전송(비트블렛) 작업을 수행하기 위해 Blt1DXGI 함수를 요구하는 방식으로 pBltData 매개 변수가 가리키는 DXGI_DDI_ARG_BLT 구조의Flags 멤버를 설정할 수 있습니다. 그러나 Direct3D 런타임은 직선 메모리 복사 작업을 수행하기 위해 DXGI_DDI_ARG_BLT1회전 멤버(즉, 회전 없음)에 설정된 DXGI_DDI_MODE_ROTATION_IDENTITY 값과 함께 DXGI_DDI_ARG_BLT1Flags 멤버를 0(즉, 플래그가 설정되지 않음)으로 설정하지 않습니다. 대신 두 리소스가 모두 다중 샘플링되지 않는 한 Direct3D 런타임은 드라이버의 ResourceCopy 또는 ResourceCopyRegion(D3D11_1) 함수를 호출하여 직선 메모리 복사 작업을 수행합니다.

사용자 모드 디스플레이 드라이버가 수행하는 스트레치 또는 축소의 품질은 쌍선형 필터가 수행하는 스트레치 또는 축소만큼 양수여야 합니다.

Direct3D 런타임은 드라이버의 Blt1DXGI 함수를 자주 호출합니다. 즉, 런타임은 주로 Blt1DXGI 를 사용하여 프레젠테이션을 지원하므로 런타임은 프레임당 두 번 이상 Blt1DXGI 를 호출해야 합니다.

런타임이 프레젠테이션에 대해 Blt1DXGI를 호출하면 런타임은 DXGI_DDI_ARG_BLT1Flags 멤버에 Present 비트 필드 플래그를 설정합니다. 런타임은 Bitblt 에 대한 추가 요구 사항이 있고 추가 동기화가 필요할 수 있음을 드라이버에 알리기 위해 Present 비트 필드 플래그를 설정합니다(예: 런타임은 각각 디스플레이의 개별 부분을 처리하는 두 개의 그래픽 어댑터가 포함된 컴퓨터 구성에서 추가 동기화를 수행해야 할 수 있음). Present 비트 필드 플래그가 설정되면 드라이버는 애플리케이션의 백 버퍼에서 DWM의 공유 화면으로 복사 작업을 수행해야 합니다. 이러한 유형의 복사 작업에 대한 동기화가 만료되지 않으므로 아티팩트 분리는 사용자가 경험하는 최악의 아티팩트 유형이어야 합니다. 이 유형의 복사 작업의 경우 가능한 아티팩트가 훨씬 더 나빠질 수 있으므로 먼저 대상 표면으로 확인한 다음 결과를 색으로 변환하여 다중 패스 접근 방식을 사용하면 안 됩니다.

드라이버가 기본 표면을 만드는 동안 DXGI_DDI_ERR_UNSUPPORTED 반환을 지원하는 경우(즉, D3D10DDIARG_CREATERESOURCEBindFlags 멤버에 설정된 D3D10_DDI_BIND_PRESENT 플래그를 사용하여 CreateResource(D3D10) 함수에 대한 호출에서 DXGI_DDI_ERR_UNSUPPORTED 반환하고 pPrimaryDesc 멤버와 함께 D3D10DDIARG_CREATERESOURCE NULL이 아닌 값으로 설정됨) 드라이버는 복사 작업 중에도 회전을 지원해야 합니다. 드라이버가 CreateResource(D3D10) 또는 CreateResource(D3D11) 함수 호출에서 DXGI_DDI_ERR_UNSUPPORTED 반환하지 않는 경우 런타임은 DXGI_DDI_MODE_ROTATION_ROTATE90, DXGI_DDI_MODE_ROTATION_ROTATE180 또는 DXGI_DDI_MODE_ROTATION_ROTATE270 값을 DXGI_DDI_ARG_BLT1Rotate 멤버에 전달하지 않습니다. 따라서 이 상황에서는 회전을 지원하기 위해 드라이버의 Blt1DXGI 함수가 필요하지 않습니다.

런타임은 드라이버가 대상에 콘텐츠를 복사하기 전에 원본의 콘텐츠를 시계 반대 방향으로 회전할 각도 수를 나타내도록 DXGI_DDI_ARG_BLT1Rotate 멤버의 값을 설정합니다. 회전은 90도 단위로 지정됩니다.

참고

드라이버의 Blt1DXGI 함수가 sRGB 형식의 콘텐츠를 원본 표면에서 비 sRGB 대상 표면으로 복사하는 경우 드라이버는 sRGB 콘텐츠를 변경하지 않고 복사해야 합니다(즉, 드라이버가 sRGB를 선형 변환으로 수행해서는 안 됨).

원본 제한 사항

Blt1DXGI 함수는 항상 전체 원본 하위 리소스(일부 하위 사각형 영역과 비교)를 사용하여 비트blt 작업을 수행합니다. 또한 원본은 사용자 모드 표시 드라이버의CreateResource(D3D10) 또는 CreateResource(D3D11) 함수를 호출하여 원본을 만들 때 D3D10DDIARG_CREATERESOURCE 또는 D3D11DDIARG_CREATERESOURCEResourceDimension 멤버에 지정된 D3D10DDIRESOURCE_TEXTURE2D 표현입니다. 런타임이 DXGI_DDI_ARG_BLT1Flags 멤버에서 Resolve 비트필드를 설정하는 경우 원본은 다중 샘플링된 리소스입니다. 원본 리소스는 D3D10DDIARG_CREATERESOURCE 또는D3D11DDIARG_CREATERESOURCEBindFlags 멤버에서 D3D10_DDI_BIND_PRESENT 플래그가 설정된 리소스로 제한됩니다. 원본의 형식(D3D10DDIARG_CREATERESOURCE 또는 D3D11DDIARG_CREATERESOURCEFormat 멤버에 지정됨)은 DXGI_FORMAT 열거형의 다음 값으로 지정된 표시 모드 형식으로 제한됩니다.

  • DXGI_FORMAT_B5G6R5_UNORM
  • DXGI_FORMAT_B5G5R5A1_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM (아래 참고 참조)
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB

참고

드라이버가 소스 형식 DXGI_FORMAT_B8G8R8A8_UNORM 지원하는 경우 다음 제한이 적용됩니다.

  • 드라이버가 부동 소수점 형식에서 정수 형식(예: BGRA8888)으로 비트블렛 작업을 수행하는 경우 감마를 결과에 암시적으로 인코딩해야 합니다.
  • 반대로 드라이버가 정수 형식에서 부동 소수점 형식으로 비트blt 작업을 수행하는 경우 결과에서 감마 인코딩을 암시적으로 제거해야 합니다.

대상 제한 사항

대상은 D3D10DDIRESOURCE_TEXTURE2D 표현이기도 합니다. 대상의 형식도 표시 모드 형식으로 제한됩니다. 대상 리소스는 렌더링 대상으로 바인딩된 리소스로 제한됩니다(D3D10DDIARG_CREATERESOURCE 또는 D3D11DDIARG_CREATERESOURCEBindFlags 멤버에 설정된 D3D10_DDI_BIND_RENDER_TARGET).

스테레오 백 버퍼 만들기

Windows 8 시작해서 드라이버가 스테레오 백 버퍼를 만들어야 하는 경우 다음과 같이 CreateResource(D3D10) 또는 CreateResource(D3D11) 함수의 pCreateResource 매개 변수가 가리키는 D3D10DDIARG_CREATERESOURCE 또는D3D11DDIARG_CREATERESOURCE 구조체의 멤버를 각각 설정해야 합니다.

  1. ArraySize 멤버를 2 값으로 설정합니다.
  2. BindFlags 멤버에서 D3D10_DDI_BIND_PRESENT 플래그 값을 설정합니다.

또한 스테레오 프레젠테이션을 지원하려면 BltDXGI 함수는 원본 및 대상 리소스 범위 내에 있는 DXGI_DDI_ARG_BLT 구조체의 DstSubresourceSrcSubresource 멤버에 대한 모든 값을 허용해야 합니다.

pfnResolveSharedResource

드라이버의 ResolveSharedResourceDXGI 함수에 대한 포인터입니다.

pfnBlt1

드라이버의 Blt1DXGI 함수에 대한 포인터입니다.

pfnOfferResources

드라이버의 pfnOfferResources 함수에 대한 포인터입니다 .

pfnReclaimResources

DXGI 런타임에서 사용자 모드 디스플레이 드라이버가 이전에 재사용을 위해 제공한 비디오 메모리 리소스를 회수하기 위해 호출되었습니다. WDDM 1.2 이상 사용자 모드 디스플레이 드라이버에 의해 구현됩니다.

pfnGetMultiplaneOverlayCaps

Microsoft DXGI(DirectX Graphics Infrastructure) 런타임에서 사용자 모드 디스플레이 드라이버에 기본 오버레이 평면 기능을 사용하도록 요청합니다. 필요에 따라 WDDM(Windows Display Driver Model) 1.3 이상 사용자 모드 디스플레이 드라이버에 의해 구현됩니다. pfnGetMultiplaneOverlayCaps 구문은 다음과 같습니다.

pfnGetMultiPlaneOverlayCaps GetMultiPlaneOverlayCaps;

HRESULT __stdcall* GetMultiPlaneOverlayCaps(
    DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *pCaps
)
{ ... }

pCaps 매개 변수는 오버레이 평면 기능을 지정하는 DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS 구조체에 대한 포인터입니다.

pfnGetMultiplaneOverlayCaps는 다음 값 중 하나를 반환합니다.

  • S_OK: 드라이버가 오버레이 평면 기능을 성공적으로 제공했습니다.
  • D3DDDIERR_DEVICEREMOVED: 드라이버가 디스플레이 어댑터가 제거되었음을 감지하여 드라이버가 작업을 완료하지 못했습니다. 드라이버가 어댑터 제거를 인식하지 못하는 경우 드라이버가 이 오류 코드를 반환할 필요가 없습니다.

pfnGetMultiplaneOverlayFilterRange

이 멤버는 예약되어 있으며 0으로 설정해야 합니다. Windows 8.1 부터 지원합니다.

pfnCheckMultiplaneOverlaySupport

다중 평면 오버레이에 대한 하드웨어 지원에 대한 세부 정보를 검사 위해 Microsoft DXGI(DirectX Graphics Infrastructure) 런타임에서 호출됩니다. pfnCheckMultiplaneOverlaySupport의 구문은 다음과 같습니다.

PFND3DDDI_CHECKMULTIPLANEOVERLAYSUPPORT pfnCheckMultiplaneOverlaySupport;

HRESULT __stdcall* pfnCheckMultiplaneOverlaySupport(
   D3DDDIARG_CHECKMULTIPLANEOVERLAYSUPPORT *pSupport
)
{ ... }

pSupport 매개 변수는 대상 화면에 표시하는 방법을 설명하는 DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT 구조체에 대한 포인터입니다.

pfnCheckMultiplaneOverlaySupport가 성공하면 S_OK 반환합니다. 그러지 않으면 HRESULT 오류 코드를 반환합니다.

pfnPresentMultiplaneOverlay

드라이버의 pfnPresentMultiplaneOverlay(DXGI) 함수에 대한 포인터입니다. Windows 8.1 부터 지원합니다.

pSupport

대상 화면에 표시하는 방법을 설명하는 DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT 구조체에 대한 포인터입니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8, WDDM 1.2
지원되는 최소 서버 Windows Server 2012
머리글 dxgiddi.h(D3d10umddi.h 포함)

추가 정보

CreateDevice(D3D10)

D3D10DDIARG_CREATEDEVICE

DXGI1_3_DDI_BASE_FUNCTIONS

DXGI_DDI_BASE_ARGS

DXGI_DDI_BASE_FUNCTIONS