Direct3D 11.2 기능

Windows 8.1, Windows RT 8.1 및 Windows Server 2012 R2에 포함된 Direct3D 11.2에는 다음 기능이 추가되었습니다.

타일형 리소스

Direct3D 11.2를 사용하면 적은 양의 실제 메모리를 사용하는 큰 논리 리소스로 간주할 수 있는 타일형 리소스를 만들 수 있습니다. 타일형 리소스는 게임 및 앱 UI의 지형에 유용합니다(예: ).

타일식 리소스는 D3D11_RESOURCE_MISC_TILED 플래그를 지정하여 생성됩니다. 타일형 리소스를 사용하려면 다음 API를 사용합니다.

타일형 리소스에 대한 자세한 내용은 타일형 리소스를 참조하세요.

타일형 리소스 지원 확인

타일형 리소스를 사용하기 전에 디바이스가 타일형 리소스를 지원하는지 확인해야 합니다. 타일형 리소스에 대한 지원을 검사 방법은 다음과 같습니다.

HRESULT hr = D3D11CreateDevice(
    nullptr,                    // Specify nullptr to use the default adapter.
    D3D_DRIVER_TYPE_HARDWARE,   // Create a device using the hardware graphics driver.
    0,                          // Should be 0 unless the driver is D3D_DRIVER_TYPE_SOFTWARE.
    creationFlags,              // Set debug and Direct2D compatibility flags.
    featureLevels,              // List of feature levels this app can support.
    ARRAYSIZE(featureLevels),   // Size of the list above.
    D3D11_SDK_VERSION,          // Always set this to D3D11_SDK_VERSION for Windows Store apps.
    &device,                    // Returns the Direct3D device created.
    &m_d3dFeatureLevel,         // Returns feature level of device created.
    &context                    // Returns the device immediate context.
    );

if (SUCCEEDED(hr))
{
    D3D11_FEATURE_DATA_D3D11_OPTIONS1 featureData;
    DX::ThrowIfFailed(
        device->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS1, &featureData, sizeof(featureData))
        );

    m_tiledResourcesTier = featureData.TiledResourcesTier;
}

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

Direct3D 11.2는 D3D11CreateDeviceDriverType 매개 변수에 D3D_DRIVER_TYPE_WARP 전달하여 만드는 WARP 디바이스에 대한 지원을 확장합니다. Direct3D 11.2의 WARP 소프트웨어 렌더러는 타일식 리소스, IDXGIDevice3::Trim, 공유 BCn 표면, minblend 및 지도 기본값을 포함하여 Direct3D 기능 수준 11_1에 대한 모든 지원을 추가합니다. HLSL 셰이더의 이중 지원도 16x MSAA에 대한 지원과 함께 사용하도록 설정되었습니다.

그래픽 명령에 주석 달기

Direct3D 11.2를 사용하면 다음 API를 사용하여 그래픽 명령에 주석을 달 수 있습니다.

HLSL 셰이더 연결

Windows 8.1 그래픽 프로그래머가 미리 컴파일된 HLSL 함수를 만들고, 라이브러리에 패키지하고, 런타임에 전체 셰이더에 연결할 수 있는 별도의 HLSL 셰이더 컴파일 및 연결을 추가합니다. 이는 기본적으로 C/C++ 별도의 컴파일, 라이브러리 및 링크와 동일하며, 계산을 완료하기 위해 더 많은 정보를 사용할 수 있게 되면 프로그래머가 미리 컴파일된 HLSL 코드를 작성할 수 있습니다. 셰이더 연결을 사용하는 방법에 대한 자세한 내용은 셰이더 연결 사용을 참조하세요.

런타임에 동적 연결을 사용하여 최종 셰이더를 만들려면 다음 단계를 완료합니다.

셰이더 연결을 만들고 사용하려면

  1. 연결 컨텍스트를 나타내는 ID3D11Linker 링커 개체를 만듭니다. 단일 컨텍스트를 사용하여 여러 셰이더를 생성할 수 없습니다. 연결 컨텍스트는 단일 셰이더를 생성하는 데 사용되며 연결 컨텍스트는 throw됩니다.
  2. D3DLoadModule을 사용하여 라이브러리 Blob에서 라이브러리를 로드하고 설정합니다.
  3. D3DLoadModule을 사용하여 항목 셰이더 Blob을 로드 및 설정하거나 FLG 셰이더를 만듭니다.
  4. ID3D11Module::CreateInstance를 사용하여 ID3D11ModuleInstance 개체를 만든 다음, 이러한 개체의 함수를 호출하여 최종 슬롯에 리소스를 다시 바인딩합니다.
  5. 링커에 라이브러리를 추가한 다음 ID3D11Linker::Link 를 호출하여 완전히 미리 컴파일되고 연결된 셰이더처럼 런타임에서 로드하고 사용할 수 있는 최종 셰이더 바이트 코드를 생성합니다.

FLG(함수 연결 그래프)

Windows 8.1 FLG(함수 연결 그래프)도 추가합니다. FLG를 사용하여 서로 값을 전달하는 미리 컴파일된 함수 호출 시퀀스로 구성된 셰이더를 생성할 수 있습니다. FLG를 사용하는 경우 HLSL을 작성하고 HLSL 컴파일러를 호출할 필요가 없습니다. 대신 셰이더 구조는 C++ API 호출을 사용하여 프로그래밍 방식으로 지정됩니다. FLG 노드는 미리 컴파일된 라이브러리 함수의 입력 및 출력 서명과 호출을 나타냅니다. 함수 호출 노드를 등록하는 순서는 호출 시퀀스를 정의합니다. 입력 서명 노드를 먼저 지정해야 하는 반면 출력 서명 노드는 마지막으로 지정해야 합니다. FLG 에지는 한 노드에서 다른 노드로 값이 전달되는 방식을 정의합니다. 전달된 값의 데이터 형식은 동일해야 합니다. 암시적 형식 변환이 없습니다. 셰이프 및 스위즐링 규칙은 HLSL 동작을 따르며 값은 이 시퀀스에서만 전달될 수 있습니다. FLG API에 대한 자세한 내용은 ID3D11FunctionLinkingGraph를 참조하세요.

받은 편지함 HLSL 컴파일러

HLSL 컴파일러는 이제 Windows 8.1 이상에서 받은 편지함입니다. 이제 셰이더 프로그래밍을 위한 대부분의 API는 Windows 8.1 이상용으로 빌드된 Windows 스토어 앱에서 사용할 수 있습니다. 셰이더 프로그래밍을 위한 많은 API는 Windows 8 위해 빌드된 Windows 스토어 앱에서 사용할 수 없습니다. 이러한 API에 대한 참조 페이지는 메모로 표시되었습니다. 그러나 일부 셰이더 API(예: D3DCompileFromFile)는 Windows 스토어에 제출하는 앱이 아니라 Windows 스토어 앱을 개발하는 데만 사용할 수 있습니다. 이러한 API에 대한 참조 페이지는 여전히 메모로 표시됩니다.

Direct3D 11의 새로운 기능