dcl_interface_dynamicindexed(sm5 - asm)

함수 테이블 포인터(인터페이스)를 선언합니다.

dcl_interface_dynamicindexed 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에 대해 이 명령을 지원합니다.

셰이더 모델 5 어셈블리(DirectX HLSL)