2016-07-22 12 views
1

나는 ID3D12GraphicsCommandList::SetGraphicsRootSignature 방법의 존재에 대해 약간 혼란 스럽다. 내가 this MSDN page에 대해 이해하고있는 바에 따르면, 그것의 유일한 유효한 사용법은 항상 SetPipelineState 다음에 그것을 호출하여 파이프 라인 상태 객체를 생성 할 때 제공된 것과 동일한 루트 서명을주는 것으로 보인다. 그것이 그렇다면 암시 적이 지 않은 것은 무엇입니까? 이 방법을 사용하는 다른 방법이 있습니까?D3D12의 SetGraphicsRootSignature의 요점은 무엇입니까?

답변

3

내부적으로 루트 서명 슬롯에서 실제 바인딩으로 매핑의 일부를 준비 할 수 있습니다. 다른 파이프 라인 상태 개체간에 루트 서명을 공유하면이 작업은 파이프 라인 상태 개체 당 한 번이 아니라 루트 서명마다 한 번 수행 할 수 있습니다.

SetGraphicsRootSignature을 자주 사용하는 전화 번호는 SetGraphicPipelineState입니다. 이는 이유.

+0

좋아, 나는 여러 그래픽 파이프 라인 상태가 내부적으로 어쨌든 함께 구축 된 동일한 루트 서명을 참조 할 수있을 것이라고 기대했지만 구매할 수 있습니다. – Trillian

1

DirectX 12의 "루트 서명"은 CPU 데이터 구조와 GPU 셰이더 언어 실행간에 데이터를 공유하기위한 공통 레이아웃 정보를 제공합니다. DirectX 12를 사용하면 프로그래머는 사용할 루트 서명 수, 사용시기, 루트 서명이 필요한 파이프 라인 상태 개체를 결정할 수 있습니다. Direct3D 11에는 항상 "루트 서명"이 매우 활발하게 활성화되어 있습니다.

루트 시그니처는 큰 페널티없이 자주 변경 될 수 있지만 루트 서명과 1 : 1 대응이 아닌 많은 PSO가 있어야한다는 가정이 있습니다. DirectX Tool Kit for DirectX 12에서 편의상

, 우리는 우리가 몇 가지 루트 서명을 사용하더라도, 루트 서명을 우리가 IEffect::Apply 방법으로 PSO를 설정할 때마다 시간을 설정합니다.