다음을 통해 공유


셰이더가 공유할 변수 및 형식 저장

클래스 연결 개체는 여러 셰이더가 공유할 수 있는 변수 및 형식의 네임스페이스입니다. 셰이더를 만들기 위한 호출에서 클래스 연결 개체를 전달하면 런타임은 셰이더의 각 인터페이스를 구현할 수 있는 변수 및 형식 목록을 수집하고 해당 변수 및 형식의 이름을 클래스 연결 개체에 저장합니다.

따라서 ID3D11ClassLinkage::GetClassInstance 메서드를 호출하여 클래스 연결 개체에서 클래스 인스턴스를 만들 때 런타임은 제공된 이름에 해당하는 변수 또는 형식을 검색할 수 있습니다. 각 셰이더(해당 이름이 지정된 셰이더에 대해 유효한 경우) 및 해당 셰이더는 지정된 클래스 연결 개체로 만들어집니다.

예를 들어, Color 인터페이스를 구현하는 Light 클래스가 있고 꼭짓점 셰이더와 픽셀 셰이더에서 이 클래스를 사용한다고 가정합니다. 셰이더를 만들 때(예: ID3D11Device::CreatePixelShader 호출) 런타임은 Light 클래스 형식이 꼭짓점과 픽셀 모두에서 사용 가능한지 확인합니다. 셰이더를 만들고 클래스 연결 개체에 Light 클래스 형식을 추가합니다. 그런 다음, 원하는 위치에 Light 인스턴스를 만들고, 두 셰이더의 리소스를 바인딩하고, 셰이더를 디바이스로 설정할 때 클래스 인스턴스 배열에 이 인스턴스를 전달할 수 있습니다(예: ID3D11DeviceContext::P SSetShader). 그런 다음 런타임은 다음 시퀀스를 수행합니다.

  1. 인스턴스가 동일한 클래스 연결 개체로 만들어졌는지 확인합니다.
  2. 꼭짓점 셰이더와 픽셀 셰이더 모두에서 Light 클래스 형식을 사용할 수 있는지 확인합니다.
  3. 꼭짓점 셰이더와 픽셀 셰이더에 대해 다를 수 있는 올바른 함수 테이블을 선택합니다.
  4. 인스턴스가 제공하는 오프셋을 아래로 보냅니다.

클래스 연결 개체는 궁극적으로 형식 및 변수 이름의 리포지토리입니다. 각 항목(형식 및 변수)에 사용할 수 있는 최대 이름 수는 64K입니다. 형식 및 변수 이름이 길수록 셰이더당 저장되는 인터페이스 메타데이터에 대한 스토리지 요구 사항이 높아집니다. 이는 런타임이 각 셰이더에 대해 이러한 이름에 대한 매핑을 저장해야 하기 때문입니다.

동적 연결

동적 연결