구문
멤버
SizeInBytes형식: SIZE_T SAL:
In
pPipelineStateSubobjectStream 멤버가 가리키는 불투명 데이터 구조의 크기(바이트)를 지정합니다.
pPipelineStateSubobjectStream형식: void * SAL:
In_reads(Inexpressible(“Dependentonsizeofsubobjects”))
임의의 파이프라인 상태 하위 객체를 바이트 스트림으로 설명하는 데이터 구조의 주소를 지정합니다.
설명
이 구조체를 ID3D12Device2::CreatePipelineState 메서드와 함께 사용하여 파이프라인 상태 객체를 만듭니다. 제공된 스트림의 형식은 **D3D12_PIPELINE_STATE_SUBOBJECT_TYPE의 교차 집합과 이에 대응하는 하위 객체 유형(예를 들어, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER는 **D3D12_RASTERIZER_DESC**와 쌍을 이룹니다)으로 구성되어야 합니다. 정렬 측면에서 D3D12 런타임은 하위 객체가 연속된 필드 집합이 아닌 열거형-구조체의 개별 구조체 쌍이 될 것을 기대합니다. 또한 시스템의 자연 워드 정렬에 정렬될 것을 기대합니다. 이는alignas(void*)를 사용하거나 열거형 + 하위 객체와 void*의 union을 만들어 달성할 수 있습니다.
단순히 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE을 **void\***와 union하는 것으로는 충분하지 않습니다. 이렇게 하면 특정 하위 객체가 잘못 정렬됩니다. 예를 들어 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY 다음에는 D3D12_PRIMITIVE_TOPOLOGY_TYPE 열거형이 옵니다. 하위 객체 유형이 **void\***와 union되면 이 두 멤버 사이에 추가 패딩이 발생하여 스트림의 손상이 발생합니다. 이 때문에
alignas를 사용할 수 없는 경우 전체 하위 객체 구조체를 **void\***와 union해야 합니다.d3dx12.h 확장을 사용하는 것을 고려해 보세요. 이는 모든 파이프라인 하위 객체에 대한 도우미 구조체 집합을 제공합니다(예를 들어, 위의 구조체는 CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER와 매우 유사합니다). 이 헤더는 GitHub의 DirectX-Headers 리포지토리에서 찾을 수 있습니다.
-runtime-validation
런타임은 PSO 설명자가 컴퓨트, 메시 또는 그래픽 파이프라인인지, 모든 하위 객체가 인식되는 유형인지, 중복된 하위 객체가 없는지 확인합니다.중복된 하위 객체를 인식하기 위해 일부 하위 객체는 다른 것들의 “파생된” 버전으로 간주됩니다. 예를 들어, 런타임이 D3D12_DEPTH_STENCIL_DESC 하위 객체를 발견한 다음 나중에 **D3D12_DEPTH_STENCIL_DESC1**을 발견하면, 이러한 것들을 중복된 하위 객체로 간주하고 실패합니다.
요구 사항
헤더: d3d12_xs.h 또는 d3d12_x.h라이브러리: d3d12_xs.lib 또는 d3d12_x.lib
지원 플랫폼: XBOX Series 콘솔 및 XBOX One 제품군
