다음을 통해 공유


루트 서명에서 직접 상수 사용

애플리케이션은 루트 서명에서 루트 상수를 각각 32비트 값 세트로 정의할 수 있습니다. 루트 상수는 HLSL(High Level Shading Language)의 상수 버퍼로 표시됩니다. 기록을 위해 상수 버퍼는 4x32비트 값 세트로 표시됩니다.

각 사용자 상수 세트는 32비트 값의 스칼라 배열로 처리되고, 동적으로 인덱싱 가능하며, 셰이더에서 읽기 전용입니다. 범위를 벗어나서 지정된 루트 상수 세트를 인덱싱하면 정의되지 않은 결과가 생성됩니다. 사용자 상수에 형식을 지정하기 위해 사용자 상수의 데이터 구조체 정의를 HLSL로 제공할 수 있습니다. 예를 들어 루트 서명이 4개 루트 상수의 세트를 정의하는 경우 HLSL은 상수에 다음 구조체를 오버레이할 수 있습니다.

struct DrawConstants
{
    uint foo;
    float2 bar;
    int moo;
};
ConstantBuffer<DrawConstants> myDrawConstants : register(b1, space0);

루트 서명 공간의 동적 인덱싱이 지원되지 않으므로 루트 상수에 매핑되는 상수 버퍼에서 배열이 허용되지 않습니다. 예를 들어 float myArray[2]; 같은 상수 버퍼에는 항목이 있을 수 없습니다. 루트 상수에 매핑되는 상수 버퍼 자체는 배열이 될 수 없으므로 cbuffer myCBArray[2]를 루트 상수에 매핑할 수 없습니다.

상수를 부분적으로 설정할 수 있습니다. 예를 들어 루트 서명이 RootTableBindSlot 2에서 4개의 32비트 값을 정의하는 경우 4개 상수의 하위 집합이 한 번에 설정될 수 있습니다(다른 항목은 변경되지 않음). 이 기능은 루트 서명 상태를 상속하고 부분적으로 변경할 수 있는 번들에서 유용할 수 있습니다.

상수를 설정할 때 셰이더에 필요한 상수 버퍼 레이아웃에 유의하세요. 예를 들어 상수가 vec4 경계에 패딩될 수 있습니다. 필요한 레이아웃을 확인하려면 HLSL 셰이더에서 리플렉션 정보를 확인합니다.

다음 API(ID3D12GraphicsCommandList 인터페이스에 있음)는 루트 서명에서 직접 상수를 설정하는 데 사용됩니다.

또한 D3D12_ROOT_CONSTANTS 구조를 참조하세요.

루트 서명