dcl_interface(sm5 - asm)
함수 테이블 포인터(인터페이스)를 선언합니다.
dcl_interface fp#[arraySize][numCallSites] = {ft#, ft#, ...} |
---|
항목 | 설명 |
---|---|
fp# |
[in] 함수 테이블 포인터입니다. |
설명
셰이더를 사용하려면 먼저 API에서 각 인터페이스를 바인딩해야 합니다. 바인딩은 메서드 슬롯을 채울 수 있도록 함수 테이블 중 하나에 대한 참조를 제공합니다. 컴파일러는 참조되지 않은 개체에 대한 포인터를 생성하지 않습니다.
함수 테이블 포인터에는 C++ 포인터-포인터-vtable 표현에 필요한 추가 수준의 간접 참조를 피하기 위해 전체 메서드 슬롯 집합이 있습니다. 또한 이 포인터가 5-튜플이어야 합니다. HLSL 가상 인라이닝 모델에서는 루트 개체당 테이블을 설정할 수 있도록 호출에 사용되는 전역 변수/입력이 항상 알려져 있습니다.
함수 포인터 선언은 함께 사용할 수 있는 함수 테이블을 나타냅니다. 이는 또한 방법 상관관계 정보의 파생을 허용합니다.
인터페이스 선언의 첫 번째 []는 배열 크기입니다. 동적 인덱싱이 사용되는 경우 선언은 다음과 같이 표시합니다. 인터페이스 포인터 배열은 정적으로 인덱싱할 수도 있으며 인터페이스 포인터 배열이 동적 인덱싱을 의미할 필요는 없습니다.
인터페이스 포인터의 번호 매기기는 첫 번째 선언에 대해 0부터 시작하여 배열 크기를 고려하므로 4개 항목 배열 fp0[4][1] 다음의 첫 번째 포인터는 fp4[][]가 됩니다.
인터페이스 선언의 두 번째 []는 선언에서 참조하는 각 테이블의 본문 수와 일치해야 하는 호출 사이트 수입니다.
인터페이스 선언에 나열할 수 있는 함수 테이블(ft#) 선택 항목 수에는 제한이 없습니다.
지정된 함수 테이블(ft#)은 하나 이상의 인터페이스 선언에서 두 번 이상 나타날 수 있습니다.
제한
[arraySize] 선언의 모든 fp# 선언의 합계인 셰이더의 개체 사이트 수는 253 이하여야 합니다. 이 숫자는 존재할 수 있는 이 포인터의 수에 해당합니다. 런타임은 이 포인터 데이터 통신을 위한 DDI 크기에 대한 경계를 유지하기 위해 이 253 제한을 적용합니다.
잠재적 분기 대상 수의 모든 fcall 문의 합계인 셰이더의 호출 사이트 수는 4096 이하여야 합니다.
예를 들어, 첫 번째 fp[][] 차원에 대한 정적 인덱스를 사용하는 fcall은 하나로 계산됩니다.
fcall fp0[0][0] // +1
동적 인덱스를 사용하는 fcall은 배열의 요소 수로 계산됩니다(dcl_interface의 첫 번째 []).
dcl_interface_dynamicindexed fp1[2][1] = {ft2, ft3, ft4} ...
fcall fp1[r0.z + 0][1] // +2
이 제한은 일부 구현에서 함수 본문 선택 테이블을 상수 버퍼와 같은 스토리지에 쉽게 맞추는 데 도움이 됩니다.
이 명령은 다음 셰이더 단계에 적용됩니다.
꼭짓점 | Hull | 도메인 | 기하 도형 | 픽셀 | 컴퓨팅 |
---|---|---|---|---|---|
X | X | X | X | X | X |
최소 셰이더 모델
이 명령은 다음 셰이더 모델에서 지원됩니다.
셰이더 모델 | 지원 여부 |
---|---|
셰이더 모델 5 | 예 |
셰이더 모델 4.1 | 아니요 |
셰이더 모델 4 | 아니요 |
셰이더 모델 3(DirectX HLSL) | 아니요 |
셰이더 모델 2(DirectX HLSL) | 아니요 |
셰이더 모델 1(DirectX HLSL) | 아니요 |
cs_4_0 및 cs_4_1은 UAV 및 SRV에 대해 이 명령을 지원합니다.