Direct3D 12 용어집

Direct3D 12 특유의 용어입니다.

바인딩

그래픽 파이프라인에 메모리를 연결하는 프로세스입니다. 예를 들어 리소스 바인딩은 개체 렌더링에 사용하기 위해 텍스처와 같은 리소스를 파이프라인에 바인딩합니다.

버퍼

연속 메모리 할당과 동의어인 D3D 리소스의 한 종류입니다.

번들

GPU(그래픽 처리 장치)에서 직접 명령 목록을 통해서만 직접 실행할 수 있는 명령 버퍼입니다. 번들은 모든 GPU 상태를 상속합니다(현재 설정된 파이프라인 상태 개체 및 기본 토폴로지 제외).

명령 할당자

GPU 명령이 저장되는 기본 메모리 할당입니다. 명령 할당자 개체는 직접 명령 목록번들 모두에 적용됩니다.

명령 목록

명령 목록은 GPU에서 실행하는 명령 세트에 해당합니다. 여기에는 상태 설정, 그리기, 지우기 및 복사와 같은 명령이 포함됩니다. D3D12 명령 목록 인터페이스는 D3D11 명령 목록 인터페이스와 크게 다릅니다. D3D12 명령 목록 인터페이스에는 D3D11 디바이스 컨텍스트 렌더링 API와 비슷한 API가 포함되어 있습니다.

D3D12 명령 목록은 리소스를 매핑 또는 매핑 해제하거나, 타일 매핑을 변경하거나, 타일 풀의 크기를 조정하거나, 쿼리 데이터를 가져오지 않으며, 실행할 명령을 GPU에 암시적으로 제출하지도 않습니다.

D3D11 지연 컨텍스트와 달리 D3D12 명령 목록은 두 가지 수준의 간접 참조만 지원합니다. 직접 명령 목록은 GPU에서 실행할 수 있는 명령 버퍼에 해당합니다. 번들은 직접 명령 목록을 통해서만 직접 실행할 수 있습니다.

직접 명령 목록은 어떤 GPU 상태도 상속하지 않습니다. 번들은 모든 GPU 상태를 상속합니다(현재 설정된 파이프라인 상태 개체 및 기본 토폴로지 제외).

명령 목록에 대한 메모리는 명령 할당자에서 설정됩니다. 명령 목록의 목적은 GPU에 단일 렌더링 요청으로 제출할 수 있다는 것입니다.

명령 큐

GPU에서 연속적으로 실행하는 명령 목록의 큐입니다. 애플리케이션에서 명령 목록을 명령 큐에 명시적으로 제출하여 실행해야 합니다. 일반적으로 GPU에는 3D 그래픽, 컴퓨팅 및 복사, 3D 그래픽 파이프라인, 컴퓨팅 엔진 및 하나 이상의 복사 엔진에 해당하는 세 개의 명령 큐가 있습니다.

보수적 래스터화

일반 래스터화는 Direct3D 그래픽 파이프라인의 래스터라이저 단계에 대한 작동 모드입니다. 표준 샘플 기반 래스터화를 비활성화하고, 대신 기본형에서 특정 양만큼 검사되는 픽셀을 래스터화합니다. 한 가지 중요한 차이점은 모든 검사가 래스터화된 픽셀을 생성하지만 하드웨어에서 해당 검사의 특징을 지정할 수 없으므로 검사는 항상 픽셀 셰이더에 이진, 즉 완전히 검사되거나 검사되지 않는 것으로 나타납니다. 실제 검사를 분석적으로 결정하는 것은 픽셀 셰이더 코드에 맡겨져 있습니다.

일반 래스터화는 픽셀의 색이 더 확실하고 가장자리 사례를 제거할 수 있는 충돌/적중 감지, 범주화 및 폐색 선별과 같은 문제를 해결하는 데 도움이 됩니다. 일반 래스터화를 참조하세요.

CBV(상수 버퍼 뷰)

상수 버퍼에는 카메라 뷰, 투영 행렬 및 월드 행렬과 같은 셰이더 상수 데이터가 포함됩니다. "상수 버퍼 보기"는 그래픽 파이프라인에서 볼 수 있는 버퍼의 형식별 보기입니다.

기본 힙

GPU에 쓴 리소스를 포함하여 영구 GPU 리소스 종류를 지원하는 데 집중하는 사용자 모드 힙입니다.

설명자

설명자는 D3D12에서 단일 리소스에 대한 바인딩의 기본 단위입니다. 설명자는 GPU에 대한 개체를 GPU 특정 형식으로 완전히 설명하는 비교적 작은 데이터 블록입니다. SRV(셰이더 리소스 뷰), UAV(순서가 지정되지 않은 액세스 뷰), CBV(상수 버퍼 뷰) 및 샘플러 등 다양한 유형의 설명자가 있습니다.

설명자 힙

설명자 힙은 설명자의 연속 할당 컬렉션으로, 모든 설명자에 대한 하나의 할당입니다. 설명자 힙의 기본 지점은 셰이더에서 최대한 많은 수의 렌더링 창(이상적으로 전체 렌더링 프레임)으로 참조하는 개체 형식의 설명자 사양을 저장하는 데 필요한 대량의 메모리 할당량을 포함하는 것입니다.

설명자 테이블

설명자 테이블은 논리적으로 설명자의 배열입니다. 각 설명자 테이블에는 SRV, UAV, CBV 및 샘플러를 포함하여 하나 이상의 유형의 설명자가 저장됩니다. 설명자 테이블은 메모리의 할당이 아니라 설명자 힙에 대한 오프셋 및 길이일 뿐입니다.

직접 명령 목록

GPU에서 실행할 수 있는 명령 버퍼입니다. 직접 명령 목록은 어떤 GPU 상태도 상속하지 않습니다.

fence

GPU와 CPU를 동기화하는 메커니즘입니다. 다른 프로세서에서 따라잡을 때까지 펜스에서 기다리도록 GPU와 CPU 모두에 지시할 수 있습니다. 다중 엔진 동기화를 참조하세요.

위험, 위험 추적

리소스가 한 가지 용도로 사용되었고 앱에서 다른 용도로 해당 리소스를 다시 사용하려는 경우 위험이 발생합니다. 리소스를 다시 사용하려면 중간 캐시를 플러시하거나 무효화해야 하고, 압축 요구 사항은 두 번째 사용에서 일관되게 유지해야 하며, 리소스가 의도한 용도로 쓰이고 무효화된 후 리소스를 읽지 않도록 방지하는 데 필요한 상태에 있어야 합니다.

리소스를 유지 관리하고 이러한 동기화 문제를 방지하는 프로세스를 위험 추적이라고 합니다. 드라이버에서 위험을 추적하지 않으면 앱에서 위험 추적을 수행해야 합니다. 이전 버전의 DirectX 대부분에서는 드라이버에서 위험 추적을 처리했습니다. DirectX 12에서는 성능을 향상시키기 위해 위험 추적 기능이 없는 메서드를 사용할 수 있습니다.

상위 수준 셰이더 언어(HLSL)

컴퓨터 언어는 C와 비슷하지만 여러 가지 방법에서 구별되며, 셰이더 코드를 작성하는 데 사용됩니다. 꼭짓점, 픽셀, 기하 도형, 컴퓨팅, 정의역 및 헐 셰이더는 모두 HLSL을 사용하여 작성됩니다. 컴파일러는 HLSL 원본을 GPU에서 사용할 이진 형식으로 변환합니다.

multiengine

단일 GPU의 다양한 인스턴스 및 엔진 유형입니다. 엔진 유형에는 그래픽, 컴퓨팅 및 복사가 포함됩니다.

MultiGPU

둘 이상의 그래픽 어댑터가 있는 하드웨어 구성입니다. 개별 어댑터는 노드라고도 합니다. 여러 개의 GPU를 사용하면 CPU와 동기화하는 작업을 수행할 수 있으며, 상호 간에 수행하는 작업이 단일 GPU보다 훨씬 더 복잡합니다.

PSO(파이프라인 상태 개체)

중요한 GPU 상태 부분입니다. 이 상태에는 현재 설정된 모든 셰이더와 특정 고정 함수 상태 개체가 포함됩니다. 파이프라인 개체에 포함된 상태를 변경하는 유일한 방법은 현재 바인딩된 파이프라인 개체를 변경하는 것입니다.

조건자

단정은 CPU가 아니라 GPU에서 개체를 그리거나, 복사하거나, 디스패치하지 않도록 결정하는 기능입니다. 예를 들어 개체의 경계 상자가 다른 개체에 의해 완전히 폐색되거나 원근감으로 인해 개체가 픽셀 크기보다 작아지면 숨겨진 개체를 그리려는 시도에서 전혀 의미가 없을 수 있습니다. 단정을 참조하세요.

ROV(정렬된 래스터라이저 보기)

표준 그래픽 파이프라인은 투명도를 포함한 여러 텍스처를 올바르게 합성하는 데 문제가 있을 수 있습니다. 철조망, 연기, 불, 초목, 색유리와 같은 개체는 원하는 효과를 얻기 위해 투명도를 사용합니다. 투명도를 포함한 여러 텍스처가 서로 나란히 있을 때 문제가 발생합니다(예: 초목이 있는 유리 건물 전면의 펜스 앞에서 발생하는 연기). ROV(정렬된 래스터라이저 보기)를 사용하면 기본 OIT(순서 독립적 투명도) 알고리즘에서 하드웨어 기능을 사용하여 투명도 순서를 올바르게 해결할 수 있습니다. 투명도는 픽셀 셰이더에서 처리됩니다.

ROV(정렬된 래스터라이저 보기)를 사용하면 픽셀 셰이더 코드에서 UAV(순서가 지정되지 않은 액세스 보기)의 그래픽 파이프라인 결과 순서에 대한 일반 요구 사항을 변경하는 선언을 사용하여 UAV 바인딩을 표시할 수 있습니다.

다시 읽기 힙

데이터를 GPU에서 CPU로 다시 전송하는 데 집중하는 사용자 모드 힙입니다.

리소스

파이프라인에 데이터를 제공하고 장면에서 렌더링되는 항목을 정의하는 엔터티입니다. 리소스는 게임 미디어에서 로드하거나 런타임에 동적으로 만들 수 있습니다. 일반적으로 리소스에는 텍스처 데이터, 꼭짓점 데이터 및 셰이더 데이터가 포함됩니다. 대부분의 Direct3D 애플리케이션은 해당 수명 전체에서 리소스를 광범위하게 만들고 삭제합니다.

리소스 장벽

리소스 장벽은 단일 리소스에 대한 다중 액세스 동기화가 필요할 수 있음을 드라이버에 알려줍니다(예: 동일한 텍스처에 대한 읽기 및 쓰기).

리소스 바인딩

리소스 바인딩은 리소스(텍스처, 꼭짓점 버퍼, 인덱스 버퍼 등)를 그래픽 파이프라인에 연결하여 파이프라인의 셰이더에서 올바른 리소스를 처리할 수 있게 하는 프로세스입니다.

리소스 힙

리소스 힙은 GPU에서 송수신할 때 리소스를 보관하도록 별도로 설정된 메모리 버퍼인 힙에 대한 일반 용어입니다. 업로드 힙은 GPU로 전송하는 데 필요하고, 다시 읽기 힙은 GPU에서 CPU로 전송하는 데 필요하며, 기본 힙이라고 하는 영구 힙은 GPU에서 여러 렌더링 프레임을 통해 유지하는 데 필요합니다.

루트 서명

루트 서명은 그래픽 또는 컴퓨팅 파이프라인에 바인딩되는 모든 리소스를 정의합니다. 루트 서명은 앱에서 구성되고, 명령 목록을 셰이더에 필요한 리소스에 연결합니다. 일반적으로 애플리케이션당 하나의 그래픽과 하나의 컴퓨팅 루트 서명이 있습니다.

샘플러

샘플러는 텍스처에서 읽는 코드입니다.

셰이더 리소스 뷰(SRV)

텍스처와 같은 셰이더 리소스의 데이터를 보는 형식별 방법입니다.

정적 힙

일반적으로 동시에 사용되며 자주 변경되지 않는 여러 GPU 읽기 전용 리소스에 집중하는 사용자 모드 힙입니다.

스왑 체인

스왑 체인은 백 버퍼 회전을 제어하여 그래픽 애니메이션의 기초를 형성합니다. 스왑 체인은 하위 수준 API 세트 DXGI에서 처리됩니다(DXGI 개요 참조).

swizzle

주변 차원 데이터에서 주변 주소를 사용하려는 경향이 있는 다차원 데이터를 메모리에 배치하는 기술입니다. 특히 한 행의 모든 데이터가 다음 행의 데이터 앞에 연속적으로 배치되지 않습니다. "매개 변수가 있는 스위즐"은 스위즐 패턴을 설명하는 표준화된 방법을 설명합니다.

텍스처

다차원이고 GPU의 다차원 액세스에 최적화된 메모리 레이아웃이 있는 D3D 리소스의 한 종류입니다. 텍스처에는 조명과 혼합을 수행하기 전에 화면에 렌더링하는 데 필요한 원시 이미지가 포함되어 있는 경우가 많지만 색 그라데이션 및 참조 색과 같은 다른 형식의 데이터가 포함될 수 있습니다. Direct3D 12는 1, 2 및 3차원 텍스처를 지원합니다.

타일

메모리의 CPU/시스템 페이지와 비슷한 비디오 메모리의 페이지입니다. 타일 표기법은 GPU 가상 메모리 하위 시스템과 CPU 가상 메모리 하위 시스템을 구분하는 데 도움이 됩니다. GPU는 시스템 가상 메모리와 비슷한 가상 메모리 기능을 제공합니다. 일부 GPU는 가상 메모리 기능을 공유하여 CPU와 GPU 모두에서 가상 메모리 하위 시스템의 일부 페이지를 공유할 수 있습니다.

타일형 리소스

애플리케이션에서 액세스할 수 없는 것으로 알려진 화면 영역을 저장하는 데 소모되는 GPU 메모리를 줄이고 하드웨어에서 인접한 타일에서 필터링하는 방법을 이해할 수 있도록 하려면 타일식 리소스가 필요합니다. 타일식 리소스는 논리적 큰 리소스이지만 적은 양의 실제 메모리를 요구합니다.

UAV(순서가 지정되지 않은 액세스 뷰)

다중 샘플링 없이 버퍼, 텍스처 및 텍스처 배열을 포함하는 리소스에 순서가 지정되지 않은 액세스 보기를 사용하면 여러 스레드에서 일시적으로 정렬되지 않은 읽기/쓰기 액세스가 가능합니다. 즉, 메모리 충돌을 생성하지 않고 여러 스레드에서 이 리소스 종류를 동시에 읽고 쓸 수 있습니다.

업로드 힙

데이터를 CPU에서 GPU로 전송하는 데 집중하는 사용자 모드 힙입니다.

사용자 모드 힙

커널 구성 요소를 인식하지 않고 재생되는 대규모 연속 메모리 할당의 컬렉션입니다. 할당 및 소멸 메서드는 안정 상태에서 커널 할당 및 소멸 메서드를 호출하지 않습니다. 업로드, 다시 읽기 및 기본 힙은 사용자 모드 힙의 변형입니다.

볼륨 타일 리소스

3차원 타일식 리소스입니다.