> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# D3D12_PIPELINE_STATE_STREAM_DESC

> 파이프라인 상태 스트림을 설명합니다.

파이프라인 상태 스트림을 설명합니다.

## 구문

```cpp theme={null}
typedef struct D3D12_PIPELINE_STATE_STREAM_DESC
{
    SIZE_T SizeInBytes;
    void  pPipelineStateSubobjectStream;
} D3D12_PIPELINE_STATE_STREAM_DESC
```

### 멤버

*SizeInBytes*\
형식: SIZE\_T

[SAL](https://learn.microsoft.com/en-us/cpp/code-quality/annotating-function-parameters-and-return-values): <code>*In*</code>

pPipelineStateSubobjectStream 멤버가 가리키는 불투명 데이터 구조의 크기(바이트)를 지정합니다.

*pPipelineStateSubobjectStream*\
형식: void \*

[SAL](https://learn.microsoft.com/en-us/cpp/code-quality/annotating-function-parameters-and-return-values): <code>*In\_reads*(*Inexpressible*("Dependentonsizeofsubobjects"))</code>

임의의 파이프라인 상태 하위 객체를 바이트 스트림으로 설명하는 데이터 구조의 주소를 지정합니다.

## 설명

이 구조체를 **[ID3D12Device2::CreatePipelineState](/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)** 메서드와 함께 사용하여 파이프라인 상태 객체를 만듭니다.

제공된 스트림의 형식은 \*\*[D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE](/reference/graphics/d3d12_x/enums/d3d12_pipeline_state_subobject_type)의 교차 집합과 이에 대응하는 하위 객체 유형(예를 들어, **D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE\_RASTERIZER**는 \*\*[D3D12\_RASTERIZER\_DESC](/reference/graphics/d3d12/structs/d3d12_rasterizer_desc_public)\*\*와 쌍을 이룹니다)으로 구성되어야 합니다. 정렬 측면에서 D3D12 런타임은 하위 객체가 연속된 필드 집합이 아닌 열거형-구조체의 개별 구조체 쌍이 될 것을 기대합니다. 또한 시스템의 자연 워드 정렬에 정렬될 것을 기대합니다. 이는 `alignas(void*)`를 사용하거나 열거형 + 하위 객체와 `void*`의 `union`을 만들어 달성할 수 있습니다.

<Info>
  단순히 **D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE**을 \*\*void\\\*\*\*와 union하는 것으로는 충분하지 않습니다. 이렇게 하면 특정 하위 객체가 잘못 정렬됩니다. 예를 들어 **D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE\_PRIMITIVE\_TOPOLOGY** 다음에는 **[D3D12\_PRIMITIVE\_TOPOLOGY\_TYPE](/reference/graphics/d3d12_x/enums/d3d12_primitive_topology_type)** 열거형이 옵니다. 하위 객체 유형이 \*\*void\\\*\*\*와 union되면 이 두 멤버 사이에 추가 패딩이 발생하여 스트림의 손상이 발생합니다. 이 때문에 `alignas`를 사용할 수 없는 경우 전체 하위 객체 구조체를 \*\*void\\\*\*\*와 union해야 합니다.
</Info>

\*\*[D3D12\_RASTERIZER\_DESC](/reference/graphics/d3d12/structs/d3d12_rasterizer_desc_public)\*\*와 함께 사용하기에 적합한 하위 객체의 예는 다음과 같습니다.

```cpp theme={null}
struct alignas(void*) StreamingRasterizerDesc
{
private:
D3D12_PIPELINE_STATE_SUBOBJECT_TYPE Type = D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER;
public:
D3D12_RASTERIZER_DESC Desc;
}
```

런타임은 **VS**(정점 셰이더), **CS**(컴퓨트 셰이더), **MS**(메시 셰이더) 중 어떤 하위 객체 유형이 발견되는지에 따라 파이프라인 스트림의 유형(유효한 유형은 **COMPUTE**, **GRAPHICS**, **MESH**)을 결정합니다. 런타임이 이러한 셰이더 중 어느 것도 찾지 못하면 파이프라인 생성에 실패합니다. null이 아닌 이러한 셰이더가 여러 개 발견되면 실패합니다. 이는 예를 들어 스트림 객체에 **CS**와 **VS**가 모두 있는 것이 유효하다는 의미이며, 단 \*\*[ID3D12Device2::CreatePipelineState](/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)\*\*의 특정 호출에 대해 셰이더 바이트코드에 대해 하나만 null이 아닌 포인터를 가져야 합니다.
파이프라인과 관련 없는 하위 객체 유형(예: 그래픽 스트림의 컴퓨트 셰이더 하위 객체)은 무시됩니다.
하위 객체가 제공되지 않는 경우(위의 필수 하위 객체 제외), 런타임은 이에 대한 기본값을 제공합니다.

C++용 `d3dx12.h` 확장을 사용하는 것을 고려해 보세요. 이는 모든 파이프라인 하위 객체에 대한 도우미 구조체 집합을 제공합니다(예를 들어, 위의 구조체는 `CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER`와 매우 유사합니다). 이 헤더는 GitHub의 **[DirectX-Headers](https://github.com/microsoft/DirectX-Headers/blob/main/include/directx/d3dx12.h)** 리포지토리에서 찾을 수 있습니다.

### -runtime-validation

런타임은 PSO 설명자가 컴퓨트, 메시 또는 그래픽 파이프라인인지, 모든 하위 객체가 인식되는 유형인지, 중복된 하위 객체가 없는지 확인합니다.

<Note>
  중복된 하위 객체를 인식하기 위해 일부 하위 객체는 다른 것들의 "파생된" 버전으로 간주됩니다. 예를 들어, 런타임이 **[D3D12\_DEPTH\_STENCIL\_DESC](/reference/graphics/d3d12/structs/d3d12_depth_stencil_desc_public)** 하위 객체를 발견한 다음 나중에 \*\*[D3D12\_DEPTH\_STENCIL\_DESC1](/reference/graphics/d3d12/structs/d3d12_depth_stencil_desc1_public)\*\*을 발견하면, 이러한 것들을 중복된 하위 객체로 간주하고 실패합니다.
</Note>

## 요구 사항

**헤더:** d3d12\_xs.h 또는 d3d12\_x.h\
**라이브러리:** d3d12\_xs.lib 또는 d3d12\_x.lib\
**지원 플랫폼**: XBOX Series 콘솔 및 XBOX One 제품군

## 함께 보기

[핵심 구조체](https://learn.microsoft.com/en-us/windows/win32/direct3d12/direct3d-12-structures)


## Related topics

- [LoadPipeline](/ko/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary1/methods/id3d12pipelinelibrary1_loadpipeline_public.md)
- [D3D12_STREAM_OUTPUT_DESC](/ko/reference/graphics/d3d12/structs/d3d12_stream_output_desc_public.md)
- [D3D12_COMPUTE_PIPELINE_STATE_DESC](/ko/reference/graphics/d3d12/structs/d3d12_compute_pipeline_state_desc_public.md)
- [D3D12_CACHED_PIPELINE_STATE](/ko/reference/graphics/d3d12/structs/d3d12_cached_pipeline_state_public.md)
- [D3D12_INPUT_LAYOUT_DESC](/ko/reference/graphics/d3d12/structs/d3d12_input_layout_desc_public.md)
