ID3D12Device1::CreatePipelineLibrary 메서드(d3d12.h)

캐시된 파이프라인 라이브러리를 만듭니다. 데이터를 함께 공유할 것으로 예상되는 PSO(파이프라인 상태 개체)의 경우 데이터를 직렬화하기 전에 라이브러리로 그룹화하면 메타데이터로 인한 오버헤드가 줄어들고 중복되거나 중복된 데이터가 디스크에 기록되지 않도록 방지할 수 있습니다.

D3D12_FEATURE_SHADER_CACHE D3D12_FEATURE_DATA_SHADER_CACHE 사용하여 ID3D12Device::CheckFeatureSupport를 사용하여 ID3D12PipelineLibrary 지원을 쿼리할 수 있습니다. D3D12_FEATURE_DATA_SHADER_CACHEFlags 멤버에 플래그 D3D12_SHADER_CACHE_SUPPORT_LIBRARY 포함된 경우 ID3D12PipelineLibrary 인터페이스가 지원됩니다. 그렇지 않은 경우 이 함수가 호출될 때 항상 DXGI_ERROR_NOT_SUPPORTED 반환됩니다.

구문

HRESULT CreatePipelineLibrary(
  const void *pLibraryBlob,
  SIZE_T     BlobLength,
  REFIID     riid,
  void       **ppPipelineLibrary
);

매개 변수

pLibraryBlob

형식: [in] const void*

입력 라이브러리 Blob이 비어 있으면 라이브러리의 초기 콘텐츠가 비어 있습니다. 입력 라이브러리 Blob이 비어 있지 않으면 무결성에 대한 유효성이 검사되고 구문 분석되며 포인터가 저장됩니다. 이 메서드에 대한 입력으로 제공되는 포인터는 반환된 개체의 수명 동안 유효한 상태를 유지해야 합니다. 효율성상의 이유로 데이터가 복사되지 않습니다.

BlobLength

형식: SIZE_T

pLibraryBlob의 길이를 바이트 단위로 지정합니다.

riid

형식: REFIID

ID3D12PipelineLibrary 개체에 대한 고유한 REFIID를 지정합니다. 일반적으로 이 매개 변수와 다음 매개 변수를 매크로 IID_PPV_ARGS(&Library)로 설정합니다. 여기서 Library 는 개체의 이름입니다.

ppPipelineLibrary

형식: [out] void**

만든 라이브러리에 대한 포인터를 반환합니다.

반환 값

형식: HRESULT

함수가 성공하면 S_OK를 반환합니다. 그렇지 않으면 Blob이 손상되었거나 인식할 수 없는 경우 E_INVALIDARG, 제공된 데이터가 이전 드라이버 또는 런타임에서 제공된 경우 D3D12_ERROR_DRIVER_VERSION_MISMATCH, 데이터가 다른 하드웨어에서 온 경우 D3D12_ERROR_ADAPTER_NOT_FOUNDHRESULT오류 코드를 반환합니다.

pPipelineLibrary를 전달 nullptr 하면 런타임은 여전히 Blob의 유효성 검사를 수행하지만 실제 라이브러리를 만들지 않고 라이브러리가 만들어졌으면 S_FALSE 반환합니다.

또한 이 기능에는 업데이트된 드라이버가 필요하며 이전 드라이버에서 사용하려고 하면 DXGI_ERROR_UNSUPPORTED 반환됩니다.

설명

파이프라인 라이브러리를 사용하면 다음 작업을 수행할 수 있습니다.

  • 기존 라이브러리 개체에 PSO(파이프라인 상태 개체)를 추가합니다( StorePipeline 참조).
  • PSO 라이브러리를 디스크 스토리지의 연속 메모리 블록으로 직렬화합니다( Serialize 참조).
  • 영구 스토리지에서 PSO 라이브러리를 직렬화 해제합니다( CreatePipelineLibrary에서 처리됨).
  • 라이브러리에서 개별 PSO 검색( LoadComputePipelineLoadGraphicsPipeline 참조).

파이프라인 라이브러리의 수명 주기에는 동일한 하위 구성 요소가 있는 PSO 간에 중복이 없습니다.

반환된 인터페이스를 다시 계산해야 하는 동안 제공된 포인터의 수명을 관리하는 데 권장되는 솔루션은 ID3D12Object::SetPrivateDataInterface를 활용하고 IUnknown을 구현하고 ref-count가 0에 도달하면 메모리를 해제하는 개체를 사용하는 것입니다.

스레드 보안

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

예제

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

요구 사항

   
대상 플랫폼 Windows
헤더 d3d12.h
라이브러리 D3d12.lib
DLL D3d12.dll

추가 정보