Direct3D 12 Core 1.0 기능 수준

Core 1.0 기능 수준은 전체 Direct3D 12 기능 집합의 하위 집합입니다. 코어 1.0 기능 수준은 컴퓨팅 전용 디바이스라고 하는 디바이스 범주에 의해 노출될 수 있습니다. 컴퓨팅 전용 디바이스의 전체 드라이버 모델은 MCDM(Microsoft Compute Driver Model)입니다. MCDM은 더 큰 범위를 가진 WDDM(Windows 디바이스 드라이버 모델)의 축소된 피어입니다.

핵심 기능 수준 내의 기능만 지원하는 디바이스를 핵심 디바이스라고 합니다.

참고 항목

컴퓨팅 전용 디바이스, MCDM 디바이스, 핵심 기능 수준 디바이스 및 코어 디바이스는 모두 동일한 것을 의미합니다. 간단히 하기 위해 Core 디바이스를 선호합니다.

핵심 디바이스 만들기

일반적으로 Direct3D 12 디바이스를 만들려면 D3D12CreateDevice 함수를 호출하고 최소 기능 수준을 지정합니다.

기능 수준을 9에서 12로 지정하면 반환되는 디바이스는 기존 GPU(핵심 디바이스의 기능 상위 집합을 지원)와 같은 기능이 풍부한 디바이스입니다. 핵심 디바이스는 해당 기능 수준에 대해 반환되지 않습니다.

반면에 핵심 기능 수준(예 : D3D_FEATURE_LEVEL::D 3D_FEATURE_LEVEL_1_0_CORE)을 지정하는 경우 반환되는 디바이스는 기능이 풍부하거나 핵심 디바이스일 수 있습니다.

// d3dcommon.h
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000

기능 수준을 지정 _CORE 하는 경우 런타임/디버그 계층은 애플리케이션에서 사용하는 기능이 해당 _CORE 기능 수준에서 허용되는지 확인합니다. 해당 기능 집합은 이 항목의 뒷부분에서 정의됩니다.

핵심 디바이스용 셰이더 모델

핵심 디바이스는 셰이더 모델 5.0+를 지원합니다.

런타임은 5.x 비 DXIL 셰이더 모델을 6.0 DXIL로 변환합니다. 따라서 드라이버는 6.x만 지원하면 합니다.

핵심 디바이스에 대한 리소스 관리 모델

  • 지원되는 리소스 차원: 원시 및 구조화된 버퍼만(형식화된 버퍼 없음, texture1d/2D 등)
  • 예약된(타일식) 리소스에 대한 지원 없음
  • 사용자 지정 힙에 대한 지원 없음
  • 다음 힙 플래그를 지원하지 않습니다.
    • D3D12_HEAP_FLAG_HARDWARE_PROTECTED
    • D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
    • D3D12_HEAP_FLAG_ALLOW_DISPLAY
    • D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS (참고 셰이더 원자성 필요, 이 플래그는 다른 기능, 크로스 어댑터 원자성)

핵심 디바이스에 대한 리소스 바인딩 모델

  • 리소스 바인딩 계층 1만 지원
  • 예외:
    • 텍스처 샘플러에 대한 지원 없음
    • 기능 수준 11.1 이상과 같은 64개 UAV에 대한 지원(단 8개와 반대)
    • 구현은 설명자를 통해 리소스에 대한 셰이더 액세스에 검사 경계를 구현할 필요가 없으며, 범위를 벗어난 액세스는 정의되지 않은 동작을 생성합니다.
      • 부산물로서 루트 서명에서 D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS 설명자 범위 플래그는 지원되지 않습니다.
  • UAV/CBV 설명자는 기본 힙의 리소스에서만 만들 수 있습니다(따라서 업로드/읽기 저장 힙 없음). 이렇게 하면 애플리케이션이 CPU-GPU<> 간에 데이터를 가져오기 위해 복사본을 수행합니다.
  • 바인딩 기능 계층이 가장 낮음에도 불구하고 이 계층에서도 다음과 같은 몇 가지 기능이 필요합니다.
    • 명령 목록이 기록된 후 설명자 힙을 업데이트할 수 있습니다(리소스 바인딩 사양의 D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE 참조).
    • 루트 설명자는 기본적으로 GPUVA 포인터입니다.
      • MMU/VA 지원은 없지만 루트 설명자에 사용되는 버퍼 VA는 주소 패치를 수행하여 구현에 의해 에뮬레이트될 수 있습니다.

구조적 버퍼 제한

구조화된 버퍼에는 4 바이트 정렬된 기본 주소가 있어야 하고, 스트라이드는 2 또는 4의 배수여야 합니다. 특히 D3D_FEATURE_LEVEL_1_0_CORE 형식화된 버퍼가 지원되지 않는 경우 2의 보폭은 16비트 데이터가 있는 앱에 대한 것입니다.

설명자에 지정된 Stride는 HLSL에 지정된 보폭과 일치해야 합니다.

핵심 디바이스에 대한 명령 큐 지원

큐만 계산 및 복사합니다(3D, 비디오 등 큐 없음).

핵심 디바이스에 대한 셰이더 지원

컴퓨팅 셰이더만, 그래픽 셰이더(꼭짓점, 픽셀 셰이더 등) 또는 렌더링 대상, 스왑 체인, 입력 어셈블러와 같은 관련 기능이 없습니다.

산술 정밀도

핵심 디바이스는 16비트 부동 소수점 작업에 대한 비정규화를 지원할 필요가 없습니다.

핵심 디바이스에 지원되는 API

아래 목록은 전체 애플리케이션 프로그래밍 인터페이스의 지원되는 하위 집합을 나타냅니다(Core 1.0 기능 수준에서 지원되지 않는 API는 나열되지 않음).

ID3D12Device 메서드

ID3D12Device1 메서드

ID3D12Device2 메서드

ID3D12Device3 메서드

ID3D12Device4 메서드

ID3D12Device5 메서드

ID3D12CommandQueue 메서드

ID3D12CommandList 메서드

ID3D12GraphicsCommandList 메서드

ID3D12GraphicsCommandList1 메서드

ID3D12GraphicsCommandList2 메서드

ID3D12GraphicsCommandList4 메서드