다음을 통해 공유


루트 서명 예제

다음 섹션에서는 빈 서명에서 완전히 가득 찬 것까지 복잡성이 다양한 루트 서명을 보여 줍니다.

빈 루트 서명

빈 루트 서명에 바인딩이 없는

빈 루트 서명은 유용할 것 같지는 않지만 입력 어셈블러만 사용하고 설명자에 액세스하지 않는 최소 꼭짓점 및 픽셀 셰이더를 사용하는 간단한 렌더링 패스에서 사용할 수 있습니다. 또한 혼합 단계, 렌더링 대상 및 깊이 스텐실 스테이지는 빈 루트 서명이 있더라도 사용할 수 있습니다.

하나의 상수

단일 루트 상수

API 바인딩 슬롯은 이 매개 변수의 루트 인수가 명령 목록 레코드 시간에 바인딩되는 위치입니다. API 바인딩 슬롯의 수는 루트 서명의 매개 변수 순서에 따라 암시적입니다(첫 번째는 항상 0). HLSL 바인딩 슬롯은 셰이더에 루트 매개 변수가 표시되는 위치입니다. 형식(위 예제의 "uint")은 하드웨어에 알려지지 않았지만 이미지의 주석일 뿐이며 하드웨어는 단순히 단일 DWORD를 내용으로 표시합니다.

명령 목록 레코드 시간에 상수 바인딩을 위해 다음과 유사한 명령이 사용됩니다.

pCmdList->SetComputeRoot32BitConstant(0,seed); // 0 is the parameter index, seed is used by the shaders

루트 상수 버퍼 뷰 추가

루트 서명 상수 버퍼 뷰를 추가합니다.

이 예제에서는 두 개의 루트 상수와 두 개의 DWORD 슬롯 비용이 드는 CBV(루트 상수 버퍼 뷰)를 보여 줍니다.

상수 버퍼 뷰를 바인딩하려면 다음과 같은 명령을 사용합니다. 첫 번째 매개 변수(2)는 이미지에 표시된 슬롯입니다. 일반적으로 상수 배열이 설정되고 b0의 셰이더에서 CBV로 사용할 수 있게 됩니다.

pCmdList->SetGraphicsRootConstantBufferView(2,GPUVAForCurrDynamicConstants);

설명자 테이블 바인딩

루트 서명 설명자 테이블을 추가합니다.

이 예제에서는 두 설명자 테이블의 사용을 보여 줍니다. 하나는 CBV_SRV_UAV 설명자 힙에서 실행 시 사용할 수 있는 5개의 설명자로 구성된 테이블을 선언하고 다른 하나는 실행 시 샘플러 설명자 힙에 표시될 두 설명자의 테이블을 선언합니다.

명령 목록을 기록할 때 설명자 테이블을 바인딩합니다.

pCmdList->SetComputeRootDescriptorTable(1, handleToCurrentMaterialDataInHeap);
pCmdList->SetComputeRootDescriptorTable(2, handleToCurrentMaterialDataInSamplerHeap);

루트 서명의 또 다른 기능은 크기가 4개의 DWORDS인 float4 루트 상수입니다. 다음 명령은 네 개의 중간 두 DWORDS만 바인딩합니다.

pCmdList->SetComputeRoot32BitConstants(0,2,myFloat2Array,1);  // 2 constants starting at offset 1 (middle 2 values in float4)

더 복잡한 루트 서명

이 예제에서는 대부분의 형식의 항목이 있는 조밀한 루트 서명을 보여 있습니다. 설명자 테이블 중 2개(슬롯 3 및 6)에는 바인딩되지 않은 크기 배열이 포함됩니다. 여기서는 애플리케이션에서 힙의 유효한 설명자만 터치해야 하는 부담이 있습니다. 바인딩되지 않은 배열 또는 매우 큰 배열에는 하드웨어 계층 2 이상 리소스 바인딩 지원이 필요합니다.

두 개의 정적 샘플러가 있습니다(루트 서명 슬롯을 요구하지 않고 바인딩됨).

슬롯 9에서 UAV u4 및 UAV u5는 동일한 설명자 테이블 오프셋에 선언됩니다. 이는 별칭이 지정된 설명자를 사용하는 것입니다. 메모리의 설명자는 HLSL 셰이더에서 u4 및 u5로 표시됩니다. 이 경우 셰이더는 D3D10_SHADER_RESOURCES_MAY_ALIAS 옵션 또는 FXC의 /res_may_alias 옵션으로 컴파일되어야 합니다. 별칭 설명자를 사용하면 셰이더를 변경하지 않고도 한 설명자가 여러 바인딩 지점에 바인딩될 수 있습니다.

스트리밍 셰이더 리소스 뷰

이 루트 서명

이 루트 서명은 모든 SRV가 하나의 큰 배열에서 스트리밍되는 시나리오를 보여 줍니다. 실행 시 루트 서명이 설정되면 설명자 테이블을 한 번 설정할 수 있습니다. 그런 다음 처음 몇 개의 루트 인수를 통해 공급되는 상수로 배열로 인덱싱하여 모든 텍스처 읽기를 수행합니다. 단일 설명자 힙만 필요하며, 텍스처가 무료 설명자 슬롯에서 또는 외부로 스트리밍될 때만 업데이트됩니다.

큰 힙의 설명자 오프셋은 상수 버퍼 뷰의 상수로 셰이더에 의해 식별됩니다. 예를 들어 셰이더에 재질 ID가 지정되면 상수로 하나의 큰 배열로 인덱싱하여 필요한 설명자(필요한 텍스처를 참조)에 액세스할 수 있습니다.

이 시나리오에는 리소스 바인딩 계층2 이상이 있는 하드웨어가 필요합니다.

리소스 바인딩 하드웨어 계층

HLSL 리소스 바인딩

루트 서명