Direct3D 11.1 기능

다음 기능이 Direct3D 11.1에 추가되었으며 Windows 8, Windows RT 및 Windows Server 2012 포함되어 있습니다. Direct3D 11.1에 대한 부분 지원은 Windows 7용 플랫폼 업데이트를 통해 제공되는 Windows 7용 플랫폼 업데이트를 통해 Windows 7 및 Windows Server 2008 R2에서 사용할 수 있습니다.

셰이더 추적 및 컴파일러 개선 사항

Direct3D 11.1을 사용하면 셰이더 추적을 사용하여 코드가 의도한 대로 수행되고 있지 않은 경우 문제를 검색하고 해결할 수 있습니다. Windows 8용 Windows SDK(소프트웨어 개발 키트)에는 HLSL 컴파일러 개선 사항이 포함되어 있습니다. 셰이더 추적 및 HLSL 컴파일러는 D3dcompiler_nn.dll 구현됩니다.

셰이더 추적 API 및 HLSL 컴파일러의 향상된 기능은 다음 메서드와 함수로 구성됩니다.

D3dcompiler.lib 라이브러리에는 D3dcompiler_nn.dll 필요합니다. 이 DLL은 Windows 8 일부가 아닙니다. HLSL 컴파일러의 Fxc.exe 명령줄 버전과 함께 Windows 8 Windows SDK의 \bin 폴더에 있습니다.

참고

이 라이브러리와 DLL 조합을 개발에 사용할 수 있지만 이 조합을 사용하는 Windows 스토어 앱을 배포할 수는 없습니다. 따라서 Windows 스토어 앱을 배송하기 전에 대신 HLSL 셰이더를 컴파일해야 합니다. 디스크에 HLSL 컴파일 이진 파일을 작성하거나 컴파일러가 셰이더 Blob 데이터를 포함하는 정적 바이트 배열을 사용하여 헤더를 생성할 수 있습니다. ID3DBlob 인터페이스를 사용하여 Blob 데이터에 액세스합니다. Windows 스토어 앱을 개발하려면 D3DCompile2 또는 D3DCompileFromFile 을 호출하여 원시 HLSL 원본을 컴파일한 다음 결과 Blob 데이터를 Direct3D에 공급합니다.

 

Direct3D 디바이스 공유

Direct3D 11.1을 사용하면 Direct3D 10 API 및 Direct3D 11 API가 하나의 기본 렌더링 디바이스를 사용할 수 있습니다.

이 Direct3D 11.1 기능은 다음 메서드 및 인터페이스로 구성됩니다.

새 Direct3D 11.1 기능 및 형식 지원 확인

Direct3D 11.1을 사용하면 그래픽 드라이버가 지원할 수 있는 새로운 기능과 디바이스에서 형식이 지원되는 새로운 방법을 검사 수 있습니다. Microsoft DXGI(DirectX Graphics Infrastructure) 1.2는 새 DXGI_FORMAT 값도 지정합니다.

이 Direct3D 11.1 기능은 다음 API로 구성됩니다.

HLSL 최소 정밀도 사용

Windows 8부터 그래픽 드라이버는 지정된 비트 정밀도보다 크거나 같은 정밀도를 사용하여 최소 정밀도 HLSL 스칼라 데이터 형식을 구현할 수 있습니다. HLSL 최소 정밀도 셰이더 코드가 HLSL 최소 정밀도를 구현하는 하드웨어에서 사용되는 경우 메모리 대역폭을 적게 사용하므로 시스템 전력도 적게 사용합니다.

D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT 값과 함께 ID3D11Device::CheckFeatureSupport를 호출하여 그래픽 드라이버가 제공하는 최소 정밀도 지원을 쿼리할 수 있습니다. 이 ID3D11Device::CheckFeatureSupport 호출에서 ID3D11Device::CheckFeatureSupport가 드라이버가 픽셀 셰이더 단계 및 다른 셰이더 단계에서 지원하는 최소 정밀도 수준으로 채우는 D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT 구조체에 대한 포인터를 전달합니다. 반환된 정보는 그래픽 하드웨어가 표준 32비트 부동 소수점 정밀도보다 낮은 정밀도로 HLSL 작업을 수행할 수 있음을 나타내지만 그래픽 하드웨어가 실제로 더 낮은 정밀도로 실행되도록 보장하지는 않습니다.

최소 정밀도를 사용하거나 사용하지 않는 여러 셰이더를 작성할 필요가 없습니다. 대신 최소 정밀도로 셰이더를 만들고 최소 정밀도 변수는 그래픽 드라이버가 최소 정밀도를 지원하지 않는다고 보고하는 경우 완전한 32비트 정밀도로 작동합니다. HLSL 최소 정밀도에 대한 자세한 내용은 HLSL 최소 정밀도 사용을 참조하세요.

HLSL 최소 정밀도 셰이더는 Windows 8 이전 운영 체제에서 작동하지 않습니다.

기능 수준 9 이상에서 HLSL에서 사용자 클립 평면 지정

Windows 8 시작하여 SV_ClipDistance 아닌 HLSL 함수 선언에서 클립플레인 함수 특성을 사용하여 기능 수준 9_x기능 수준 10 이상에서 셰이더가 작동하도록 할 수 있습니다. 자세한 내용은 기능 수준 9 하드웨어의 사용자 클립 평면을 참조하세요.

셰이더가 액세스할 수 있는 것보다 더 큰 상수 버퍼 만들기

Direct3D 11.1을 사용하면 셰이더가 액세스할 수 있는 최대 상수 버퍼 크기보다 큰 상수 버퍼를 만들 수 있습니다(4096 32비트*4개 구성 요소 상수 – 64KB). 나중에 PSSetConstantBuffers 또는 PSSetConstantBuffers1을 통해 파이프라인에 버퍼를 바인딩하는 경우 셰이더가 4096 제한에 맞는 액세스 가능한 버퍼 범위를 지정할 수 있습니다.

Direct3D 11.1은 이 기능에 대한 ID3D11Device::CreateBuffer 메서드를 업데이트합니다.

렌더링 대상에서 논리 작업 사용

Direct3D 11.1을 사용하면 렌더링 대상에서 혼합하는 대신 논리 작업을 사용할 수 있습니다. 그러나 논리 작업을 여러 렌더링 대상에 혼합하여 혼합할 수는 없습니다.

이 Direct3D 11.1 기능은 다음 API로 구성됩니다.

래스터라이저 상태를 만들도록 샘플 개수 강제 적용

Direct3D 11.1을 사용하면 래스터라이저 상태를 만들 때 힘 샘플 수를 지정할 수 있습니다.

이 Direct3D 11.1 기능은 다음 API로 구성됩니다.

참고

샘플 수를 1 이상으로 강제하여 렌더링하려면 다음 지침을 따라야 합니다.

  • 깊이 스텐실 뷰를 바인딩하지 마세요.
  • 깊이 테스트를 사용하지 않도록 설정합니다.
  • 셰이더가 깊이를 출력하지 않는지 확인합니다.
  • 렌더링 대상 뷰가 바인딩된 경우(D3D11_BIND_RENDER_TARGET) 샘플 수를 1 이상으로 강제 적용한 경우 모든 렌더링 대상에 단일 샘플만 있는지 확인합니다.
  • 샘플 빈도로 셰이더를 작동하지 마세요. 따라서 ID3D11ShaderReflection::IsSampleFrequencyShader는FALSE를 반환합니다.

그렇지 않으면 렌더링 동작이 정의되지 않습니다. 깊이 스텐실을 구성하는 방법에 대한 자세한 내용은 Depth-Stencil 기능 구성을 참조하세요.

 

셰이더를 사용하여 비디오 리소스 처리

Direct3D 11.1을 사용하면 Direct3D 셰이더가 해당 비디오 리소스를 처리할 수 있도록 비디오 리소스에 대한 보기(SRV/RTV/UAV)를 만들 수 있습니다. 기본 비디오 리소스의 형식은 보기에서 사용할 수 있는 형식을 제한합니다. DXGI_FORMAT 열거형에는 새 비디오 리소스 형식 값이 포함됩니다. 이러한 DXGI_FORMAT 값은 만들 수 있는 유효한 보기 형식과 Direct3D 11.1 런타임이 보기를 매핑하는 방법을 지정합니다. 동일한 표면의 여러 부분에 대한 여러 보기를 만들 수 있으며 형식에 따라 보기의 크기가 서로 다를 수 있습니다.

Direct3D 11.1은 이 기능에 대해 다음 메서드를 업데이트합니다.

공유 Texture2D 리소스에 대한 추가 지원

Direct3D 11.1은 특정 리소스 종류 및 형식으로 만든 Texture2D 리소스를 공유할 수 있도록 보장합니다. Texture2D 리소스를 공유하려면 해당 리소스를 만들 때 D3D11_RESOURCE_MISC_SHARED, D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX 또는 D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEXD3D11_RESOURCE_MISC_SHARED_NTHANDLE(Windows 8 새로운 기능) 플래그의 조합을 사용합니다.

Direct3D 11.1은 다음과 같은 DXGI_FORMAT 값으로 만든 Texture2D 리소스를 공유할 수 있도록 보장합니다.

  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT

또한 Direct3D 11.1은 mipmap 수준 1, 배열 크기 1, D3D11_BIND_SHADER_RESOURCE 바인딩 플래그 및 결합D3D11_BIND_RENDER_TARGET, 사용 기본값(D3D11_USAGE_DEFAULT) 및 이러한 D3D11_RESOURCE_MISC_FLAG 값만 사용하여 만든 Texture2D 리소스를 공유할 수 있도록 보장합니다.

Direct3D 11.1을 사용하면 다양한 Texture2D 리소스 유형 및 형식을 공유할 수 있습니다. 그래픽 드라이버와 하드웨어가 D3D11_FEATURE_D3D11_OPTIONS 값으로 ID3D11Device::CheckFeatureSupport를 호출하여 확장된 Texture2D 리소스 공유를 지원하는지 여부를 쿼리할 수 있습니다. 이 ID3D11Device::CheckFeatureSupport 호출에서 D3D11_FEATURE_DATA_D3D11_OPTIONS 구조체에 대한 포인터를 전달합니다. 하드웨어 및 드라이버가 확장 Texture2D 리소스 공유를 지원하는 경우 ID3D11Device::CheckFeatureSupportD3D11_FEATURE_DATA_D3D11_OPTIONSExtendedResourceSharing 멤버를 TRUE로 설정합니다.

ID3D11Device::CheckFeatureSupportExtendedResourceSharing에서 TRUE를 반환하는 경우 이러한 DXGI_FORMAT 값으로 만든 리소스를 공유할 수 있습니다.

  • DXGI_FORMAT_R32G32B32A32_TYPELESS
  • DXGI_FORMAT_R32G32B32A32_FLOAT
  • DXGI_FORMAT_R32G32B32A32_UINT
  • DXGI_FORMAT_R32G32B32A32_SINT
  • DXGI_FORMAT_R16G16B16A16_TYPELESS
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R16G16B16A16_UNORM
  • DXGI_FORMAT_R16G16B16A16_UINT
  • DXGI_FORMAT_R16G16B16A16_SNORM
  • DXGI_FORMAT_R16G16B16A16_SINT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R10G10B10A2_UINT
  • DXGI_FORMAT_R8G8B8A8_TYPELESS
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_R8G8B8A8_UINT
  • DXGI_FORMAT_R8G8B8A8_SNORM
  • DXGI_FORMAT_R8G8B8A8_SINT
  • DXGI_FORMAT_B8G8R8A8_TYPELESS
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_TYPELESS
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R32_TYPELESS
  • DXGI_FORMAT_R32_FLOAT
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R32_SINT
  • DXGI_FORMAT_R16_TYPELESS
  • DXGI_FORMAT_R16_FLOAT
  • DXGI_FORMAT_R16_UNORM
  • DXGI_FORMAT_R16_UINT
  • DXGI_FORMAT_R16_SNORM
  • DXGI_FORMAT_R16_SINT
  • DXGI_FORMAT_R8_TYPELESS
  • DXGI_FORMAT_R8_UNORM
  • DXGI_FORMAT_R8_UINT
  • DXGI_FORMAT_R8_SNORM
  • DXGI_FORMAT_R8_SINT
  • DXGI_FORMAT_A8_UNORM
  • DXGI_FORMAT_AYUV
  • DXGI_FORMAT_YUY2
  • DXGI_FORMAT_NV12
  • DXGI_FORMAT_NV11
  • DXGI_FORMAT_P016
  • DXGI_FORMAT_P010
  • DXGI_FORMAT_Y216
  • DXGI_FORMAT_Y210
  • DXGI_FORMAT_Y416
  • DXGI_FORMAT_Y410

ID3D11Device::CheckFeatureSupportExtendedResourceSharing에서 TRUE를 반환하는 경우 다음 기능 및 플래그를 사용하여 만든 리소스를 공유할 수 있습니다.

참고

ExtendedResourceSharingTRUE이면 Texture2D 리소스를 공유하기 위한 바인딩 플래그를 지정할 때 유연성이 높아집니다. 그래픽 드라이버와 하드웨어는 더 많은 바인딩 플래그를 지원할 뿐만 아니라 바인딩 플래그의 더 가능한 조합도 지원합니다. 예를 들어 D3D11_BIND_RENDER_TARGET 또는 바인딩 플래그를 지정하지 않을 수 있습니다.

 

ID3D11Device::CheckFeatureSupportExtendedResourceSharing에서 TRUE를 반환하더라도 이러한 기능 및 플래그를 사용하여 만든 리소스를 공유할 수 없습니다.

새 복사 옵션을 사용하여 하위 리소스 변경

Direct3D 11.1을 사용하면 새 복사 플래그를 사용하여 하위 리소스를 복사하고 업데이트할 수 있습니다. 하위 리소스를 복사하는 경우 원본 및 대상 리소스가 동일할 수 있으며 원본 및 대상 지역이 겹칠 수 있습니다.

이 Direct3D 11.1 기능은 다음 API로 구성됩니다.

리소스 및 리소스 뷰 삭제

Direct3D 11.1을 사용하면 디바이스 컨텍스트에서 리소스 및 리소스 보기를 삭제할 수 있습니다. 이 새로운 기능은 리소스 또는 리소스 뷰의 기존 콘텐츠가 더 이상 필요하지 않음을 GPU에 알릴 수 있습니다.

이 Direct3D 11.1 기능은 다음 API로 구성됩니다.

더 많은 UAV 지원

Direct3D 11.1을 사용하면 리소스를 출력 병합기 단계에 바인딩하고 순서가 지정되지 않은 리소스에 대한 뷰 배열을 설정할 때 더 많은 UAV를 사용할 수 있습니다.

Direct3D 11.1은 이 기능에 대해 다음 방법을 업데이트합니다.

상수 버퍼의 하위 범위를 셰이더에 바인딩

Direct3D 11.1을 사용하면 셰이더가 액세스할 수 있도록 상수 버퍼의 하위 범위를 바인딩할 수 있습니다. 더 큰 상수 버퍼를 제공하고 셰이더에서 사용할 수 있는 하위 정렬을 지정할 수 있습니다.

이 Direct3D 11.1 기능은 다음 API로 구성됩니다.

셰이더에 바인딩된 상수 버퍼의 하위 범위를 검색합니다.

Direct3D 11.1을 사용하면 셰이더에 바인딩된 상수 버퍼의 하위 범위를 검색할 수 있습니다.

이 Direct3D 11.1 기능은 다음 API로 구성됩니다.

리소스 보기의 전체 또는 일부 지우기

Direct3D 11.1을 사용하면 리소스 보기(RTV, UAV 또는 Texture2D 표면의 비디오 보기)를 지울 수 있습니다. 보기의 모든 부분에 동일한 색 값을 적용합니다.

이 Direct3D 11.1 기능은 다음 API로 구성됩니다.

NO_OVERWRITE 사용하여 동적 버퍼의 SRV 매핑

Direct3D 11.1을 사용하면 동적 버퍼의 SRV(셰이더 리소스 뷰)를 D3D11_MAP_WRITE_NO_OVERWRITE 매핑할 수 있습니다. Direct3D 11 및 이전 런타임은 꼭짓점 또는 인덱스 버퍼에 대한 매핑을 제한했습니다.

Direct3D 11.1은 이 기능에 대한 ID3D11DeviceContext::Map 메서드를 업데이트합니다.

모든 파이프라인 단계에서 UAV 사용

Direct3D 11.1을 사용하면 이전에 픽셀 셰이더 및 컴퓨팅 셰이더에서만 사용되었던 모든 셰이더 단계에서 다음 셰이더 모델 5.0 지침을 사용할 수 있습니다.

Direct3D 11.1은 이 기능에 대해 다음 방법을 업데이트합니다.

이러한 지침은 ps_5_0 및 cs_5_0 Direct3D 11.0에 존재했습니다. Direct3D 11.1에서는 UAV를 모든 셰이더 단계에서 사용할 수 있으므로 이러한 지침은 모든 셰이더 단계에서 사용할 수 있습니다.

모든 단계에서 UAV를 지원하지 않는 디바이스(이 기능으로 구현되지 않은 기존 드라이버 포함)에서 CreateVertexShader와 같은 create-shader 함수에 이러한 지침을 사용하는 컴파일된 셰이더(VS/HS/DS/HS)를 전달하면 create-shader 함수가 실패합니다. 셰이더가 하드웨어에서 지원하는 UAV 슬롯 집합 이외의 UAV 슬롯을 사용하려고 하면 셰이더 만들기 함수도 실패합니다.

이러한 지침에서 참조하는 UAV는 모든 파이프라인 단계에서 공유됩니다. 예를 들어 출력 병합기 단계 의 슬롯 0에 바인딩된 UAV는 슬롯 0에서 VS/HS/DS/GS/PS로 사용할 수 있습니다.

지정된 Draw*() 내에서 실행되거나 Dispatch*() 내의 컴퓨팅 셰이더에서 발급하는 셰이더 단계 내에서 또는 셰이더 단계에서 발급하는 UAV 액세스는 발급한 순서대로 완료되도록 보장되지 않습니다. 그러나 모든 UAV 액세스는 Draw*() 또는 Dispatch*()의 끝에서 완료됩니다.

WARP 디바이스에 대한 추가 지원

Direct3D 11.1은 D3D11CreateDeviceDriverType 매개 변수에 D3D_DRIVER_TYPE_WARP 전달하여 만드는 WARP 디바이스에 대한 지원을 확장합니다.

Direct3D 11.1 WARP 디바이스부터 다음을 지원합니다.

  • 9.1에서 11.1까지의 모든 Direct3D 기능 수준
  • 컴퓨팅 셰이더 및 테 셀레이션
  • 공유 표면. 즉, WARP 디바이스 간 및 다양한 프로세스의 WARP 디바이스 간에 표면을 완전히 공유할 수 있습니다.

WARP 디바이스는 다음과 같은 선택적 기능을 지원하지 않습니다.

GPU(그래픽 처리 장치)를 사용하지 않도록 설정하거나 디스플레이 드라이버 없이 VM(가상 머신), Hyper-V를 실행하면 이름이 "Microsoft 기본 디스플레이 어댑터"인 WARP 디바이스가 표시됩니다. 이 WARP 디바이스는 DWM, 인터넷 Explorer 및 Windows 스토어 앱을 포함하는 전체 Windows 환경을 실행할 수 있습니다. 또한 이 WARP 디바이스는 DirectDraw 를 사용하는 레거시 앱 실행 또는 Direct3D 3~Direct3D 11.1을 사용하는 실행 앱을 지원합니다.

세션 0 프로세스에서 Direct3D 사용

Windows 8 및 Windows Server 2012 시작하여 세션 0 프로세스에서 대부분의 Direct3D API를 사용할 수 있습니다.

 

기능 수준 9에서 섀도 버퍼 지원

Direct3D 10_0+ 섀도 버퍼 기능의 하위 집합을 사용하여 기능 수준 9_x 그림자 효과를 구현합니다. 기능 수준 9_x 그림자 효과를 구현하기 위해 수행해야 하는 작업에 대한 자세한 내용은 Direct3D 기능 수준 9에 대한 섀도 버퍼 구현을 참조하세요.

Direct3D 11의 새로운 기능