루트 서명 개요
루트 서명은 앱에서 구성되며 명령 목록을 셰이더에 필요한 리소스에 연결합니다. 그래픽 명령 목록에는 그래픽 및 컴퓨팅 루트 서명이 모두 있습니다. 컴퓨팅 명령 목록에는 컴퓨팅 루트 서명이 하나만 있습니다. 이러한 루트 서명은 서로 독립적입니다.
- 루트 매개 변수 및 인수
- 루트 상수, 설명자 및 테이블
- 관련 항목
루트 매개 변수 및 인수
루트 서명 API 함수 서명과 유사하며 셰이더가 예상해야 하는 데이터 형식을 결정하지만 실제 메모리 또는 데이터는 정의하지 않습니다. 루트 매개 변수 루트 서명의 한 항목입니다. 런타임에 설정되고 변경된 루트 매개 변수의 실제 값은 루트 인수라고 불립니다. 루트 인수를 변경하면 셰이더가 읽은 데이터가 변경됩니다.
루트 상수, 설명자 및 테이블
루트 서명에는 세 가지 유형의 매개 변수가 포함될 수 있습니다. 루트 상수(루트 인수에 인라인된 상수), 루트 설명자(루트 인수에 인라인된 설명자) 및 설명자 테이블(설명자 힙의 설명자 범위에 대한 포인터).
루트 상수는 셰이더에 상수 버퍼로 표시되는 인라인 32비트 값입니다.
인라인 루트 설명자에는 CBV로 제한되지만 가장 자주 액세스되는 설명자와 원시 또는 구조화된 UAV 또는 SRV 버퍼가 포함되어야 합니다. 2D 텍스처 SRV와 같은 더 복잡한 형식은 루트 설명자로 사용할 수 없습니다. 루트 설명자는 크기 제한을 포함하지 않으므로 크기를 포함하는 설명자 힙의 설명자와 달리 범위를 벗어나는 검사가 있을 수 없습니다.
루트 서명 내의 설명자 테이블 항목에는 설명자, HLSL 셰이더 바인딩 이름 및 표시 유형 플래그가 포함됩니다. 셰이더 이름에 대한 자세한 내용은 셰이더 모델 5.1 참조하세요. 일부 하드웨어에서는 설명자가 필요한 셰이더 단계에 설명자만 표시하여 성능이 향상될 수 있습니다(D3D12_SHADER_VISIBILITY참조).
루트 설명자 테이블 항목
루트 서명의 레이아웃은 매우 유연하며, 일부 제약 조건은 덜 지원되는 하드웨어에 적용됩니다. 하드웨어 수준에 관계없이 애플리케이션은 항상 효율성을 극대화하기 위해 필요에 따라 루트 서명을 작게 만들어야 합니다. 애플리케이션은 루트 서명에서 루트 상수에 대한 공간 대신 설명자 테이블을 더 많이 선택하거나 그 반대도 가능합니다.
콘텐츠의 일부가 그리기(그래픽)/디스패치(컴퓨팅) 호출 간에 변경될 때마다 애플리케이션이 바인딩한 루트 서명의 내용(설명자 테이블, 루트 상수 및 루트 설명자)은 D3D12 드라이버에 의해 자동으로 버전이 지정됩니다. 따라서 각 그리기/디스패치는 루트 서명 상태의 고유한 전체 집합을 가져옵니다.
이상적으로 동일한 루트 서명을 공유하는 PSO(파이프라인 상태 개체) 그룹이 있습니다. 파이프라인에서 루트 서명을 설정한 후에는 번들에 대한 상속을 포함하여 정의하는 모든 바인딩(설명자 테이블, 설명자, 상수)을 개별적으로 설정하거나 변경할 수 있습니다.
앱은 원하는 설명자 테이블 수와 인라인 설명자(더 많은 공간을 차지하지만 간접 참조를 제거함)와 루트 서명에서 원하는 인라인 상수(간접 참조 없음) 간에 자체적으로 절충할 수 있습니다. 애플리케이션은 루트 서명을 가능한 한 적게 사용해야 하며, 대량 데이터를 나타내기 위해 이를 가리키는 힙 및 설명자 힙과 같은 애플리케이션 제어 메모리에 의존해야 합니다.
관련 항목