구문
typedef enum D3D12_STATE_OBJECT_FLAGS
{
D3D12_STATE_OBJECT_FLAG_NONE = 0,
D3D12_STATE_OBJECT_FLAG_ALLOW_LOCAL_DEPENDENCIES_ON_EXTERNAL_DEFINITIONS = 1,
D3D12_STATE_OBJECT_FLAG_ALLOW_EXTERNAL_DEPENDENCIES_ON_LOCAL_DEFINITIONS = 2
} D3D12_STATE_OBJECT_FLAGS
상수
| 상수 | 설명 |
|---|---|
| D3D12_STATE_OBJECT_FLAG_NONE | 상태 객체 제약이 없습니다. |
| D3D12_STATE_OBJECT_FLAG_ALLOW_LOCAL_DEPENDENCIES_ON_EXTERNAL_DEFINITIONS | 이 플래그는 collection 유형의 상태 객체에만 적용됩니다. 그렇지 않은 경우 이 플래그는 무시됩니다. 이 컬렉션의 익스포트는 해결되지 않은 참조(종속성)를 가질 수 있으며, 이는 해당 컬렉션이 레이트레이싱 파이프라인 상태 객체(RTPSO)와 같은 컨테이너 상태 객체에 포함될 때 해결(정의)되어야 합니다. 여기에는 외부 서브객체(예: 루트 시그니처)를 로컬 익스포트에 연결하기 위해 외부에서 정의된 서브객체 연결에 의존하는 것도 포함됩니다. 이 플래그가 없으면 이 컬렉션의 모든 익스포트는 필요한 서브객체 연결이 로컬로 정의되는 등, 종속성이 로컬에서 완전히 해결되어야 합니다. 고급 구현/드라이버는 컬렉션의 코드를 컴파일하기에 충분한 정보를 갖게 되며, (D3D12_STATE_OBJECT_FLAG_ALLOW_EXTERNAL_DEPENDENCIES_ON_LOCAL_DEFINITIONS 플래그가 설정되지 않는 한) 컴파일되지 않은 코드를 유지할 필요가 없어, 컬렉션이 컨테이너 상태 객체(예: RTPSO)에서 사용될 때 드라이버가 수행해야 할 작업은 최소화되며 이상적으로는 “저비용” 링크에 그치게 됩니다. |
| D3D12_STATE_OBJECT_FLAG_ALLOW_EXTERNAL_DEPENDENCIES_ON_LOCAL_DEFINITIONS | 이 플래그는 collection 유형의 상태 객체에만 적용됩니다. 그렇지 않은 경우 이 플래그는 무시됩니다. 이 컬렉션이 다른 상태 객체(예: RTPSO)에 포함되면, 컨테이너 상태 객체의 나머지 부분에 있는 셰이더/함수가 이 컬렉션의 익스포트에 의존(예: 호출)할 수 있습니다. 이 플래그가 없으면(기본값) 이 컬렉션의 익스포트는 컨테이너 상태 객체(예: RTPSO)의 다른 부분에서 직접 참조할 수 없습니다. 이는 드라이버가 외부 함수가 호출되어 모든 코드가 함께 컴파일될 가능성을 대비해 컴파일되지 않은 코드를 컬렉션에 보관할 필요가 없어지므로, 컬렉션의 메모리 공간을 약간 줄일 수 있습니다. 다만, 이 컬렉션의 코드에 대해 필요한 모든 서브객체 연결이 로컬에서 정의되지 않은 경우, 드라이버가 아직 셰이더 코드를 컴파일할 수 없어 컴파일되지 않은 코드를 계속 보관해야 할 수도 있습니다. 외부 서브객체를 로컬 익스포트에 연결하는 외부에서 정의된 서브객체 연결은 로컬 정의에 대한 외부 종속성으로 간주되지 않으므로, 이 플래그의 존재 여부는 해당 연결이 허용되는지 여부에 영향을 미치지 않습니다. 반면, 현재 컬렉션이 로컬로 정의된 서브객체와 외부 익스포트(예: 셰이더) 간의 서브객체 연결을 정의하는 경우, 이는 로컬 정의에 대한 외부 종속성으로 간주되며 이 플래그가 설정되어야 합니다. 이 플래그의 존재 여부와 관계없이, 컬렉션의 셰이더 진입점(예: hit group 또는 miss 셰이더)은 컨테이너 상태 객체(예: RTPSO)에서 익스포트하는 경우 진입점으로 표시됩니다. RTPSO의 경우, 익스포트된 진입점은 레이트레이싱을 위한 셰이더 테이블에서 사용될 수 있습니다. |
요구 사항
헤더: d3d12_xs.h 또는 d3d12_x.h라이브러리: d3d12_xs.lib 또는 d3d12_x.lib
지원 플랫폼: XBOX Series 콘솔 및 XBOX One 제품군
