Skip to main content
캐시된 파이프라인 라이브러리를 만듭니다. 함께 데이터를 공유할 것으로 예상되는 파이프라인 상태 객체(PSO)의 경우, 이를 직렬화하기 전에 라이브러리로 그룹화하면 메타데이터로 인한 오버헤드가 줄어들고 중복되거나 복제된 데이터가 디스크에 기록되는 것을 피할 수 있습니다. ID3D12PipelineLibrary 지원 여부는 D3D12_FEATURE_SHADER_CACHED3D12_FEATURE_DATA_SHADER_CACHE와 함께 ID3D12Device::CheckFeatureSupport를 사용하여 쿼리할 수 있습니다. D3D12_FEATURE_DATA_SHADER_CACHEFlags 멤버에 D3D12_SHADER_CACHE_SUPPORT_LIBRARY 플래그가 포함된 경우 ID3D12PipelineLibrary 인터페이스가 지원됩니다. 그렇지 않으면 이 함수를 호출할 때 항상 DXGI_ERROR_NOT_SUPPORTED가 반환됩니다.

구문

매개 변수

pLibraryBlob
형식: const void *
입력 라이브러리 blob이 비어 있으면 라이브러리의 초기 콘텐츠는 비어 있습니다. 입력 라이브러리 blob이 비어 있지 않으면 무결성을 검사하고 구문 분석한 후 포인터가 저장됩니다. 이 메서드에 대한 입력으로 제공된 포인터는 반환된 객체의 수명 동안 유효한 상태로 유지되어야 합니다. 효율성을 위해 데이터는 복사되지 않습니다. BlobLength
형식: SIZE_T
_pLibraryBlob_의 길이(바이트 단위)를 지정합니다. riid
형식: const IID &
ID3D12PipelineLibrary 객체에 대한 고유 REFIID를 지정합니다. 일반적으로 이 매개 변수와 다음 매개 변수를 매크로 IID_PPV_ARGS(&Library)로 설정하며, 여기서 Library는 객체의 이름입니다. ppPipelineLibrary
형식: void **
생성된 라이브러리에 대한 포인터를 반환합니다.

반환 값

형식: HRESULT 함수가 성공하면 S_OK를 반환합니다. 그렇지 않으면 HRESULT 오류 코드를 반환하며, blob이 손상되었거나 인식할 수 없는 경우 E_INVALIDARG, 제공된 데이터가 이전 드라이버나 런타임에서 가져온 경우 D3D12_ERROR_DRIVER_VERSION_MISMATCH, 데이터가 다른 하드웨어에서 가져온 경우 D3D12_ERROR_ADAPTER_NOT_FOUND가 포함될 수 있습니다. _pPipelineLibrary_에 nullptr을 전달하면 런타임은 여전히 blob의 유효성을 검사하지만 실제 라이브러리 생성을 피하고 라이브러리가 생성되었을 경우 S_FALSE를 반환합니다. 또한 이 기능은 업데이트된 드라이버가 필요하며, 이전 드라이버에서 사용하려고 하면 DXGI_ERROR_UNSUPPORTED가 반환됩니다.

설명

파이프라인 라이브러리는 다음 작업을 활성화합니다.
  • 기존 라이브러리 객체에 파이프라인 상태 객체(PSO) 추가(StorePipeline 참조).
  • 디스크 저장을 위해 PSO 라이브러리를 연속된 메모리 블록으로 직렬화(Serialize 참조).
  • 영구 저장소에서 PSO 라이브러리 역직렬화(CreatePipelineLibrary에서 처리).
  • 라이브러리에서 개별 PSO 검색(LoadComputePipelineLoadGraphicsPipeline 참조).
파이프라인 라이브러리의 수명 주기 어느 시점에서도 동일한 하위 구성 요소를 가진 PSO 간에 중복이 없습니다. 반환된 인터페이스만 참조 카운트하면서 제공된 포인터의 수명을 관리하는 권장 솔루션은 ID3D12Object::SetPrivateDataInterface를 활용하고 IUnknown을 구현하고 참조 카운트가 0에 도달하면 메모리를 해제하는 객체를 사용하는 것입니다.

스레드 안전성

파이프라인 라이브러리는 스레드 안전하게 사용할 수 있으며, 한 가지 예외를 제외하고 필요에 따라 내부적으로 동기화됩니다. 여러 스레드에서 동일한 PSO를 로드하는 경우(LoadComputePipeline, LoadGraphicsPipeline 또는 LoadPipeline을 통해) 스레드 안전하지 않은 방식으로 라이브러리 내 해당 파이프라인의 상태를 수정할 수 있으므로 스스로 동기화해야 합니다.

예제

Direct3D 12 파이프라인 상태 캐시 샘플을 참조하세요.

요구 사항

헤더: d3d12_xs.h 또는 d3d12_x.h
라이브러리: d3d12_xs.lib 또는 d3d12_x.lib
지원 플랫폼: XBOX Series 콘솔 및 XBOX One 제품군

함께 보기

마지막 수정일 2026년 8월 24일