다음을 통해 공유


D3D12DDI_BARRIER_SYNC 열거형(d3d12umddi.h)

D3D12DDI_BARRIER_SYNC 값은 장벽과 관련하여 GPU 작업의 동기화 범위를 지정하는 다음 필드의 비트 단위 OR입니다.

통사론

typedef enum D3D12DDI_BARRIER_SYNC {
  D3D12DDI_BARRIER_SYNC_NONE = 0x0,
  D3D12DDI_BARRIER_SYNC_ALL = 0x1,
  D3D12DDI_BARRIER_SYNC_DRAW = 0x2,
  D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER = 0x4,
  D3D12DDI_BARRIER_SYNC_INDEX_INPUT = 0x4,
  D3D12DDI_BARRIER_SYNC_VERTEX_SHADING = 0x8,
  D3D12DDI_BARRIER_SYNC_PIXEL_SHADING = 0x10,
  D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL = 0x20,
  D3D12DDI_BARRIER_SYNC_RENDER_TARGET = 0x40,
  D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING = 0x80,
  D3D12DDI_BARRIER_SYNC_RAYTRACING = 0x100,
  D3D12DDI_BARRIER_SYNC_COPY = 0x200,
  D3D12DDI_BARRIER_SYNC_RESOLVE = 0x400,
  D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT = 0x800,
  D3D12DDI_BARRIER_SYNC_PREDICATION = 0x800,
  D3D12DDI_BARRIER_SYNC_ALL_SHADING = 0x1000,
  D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING = 0x2000,
  D3D12DDI_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO = 0x4000,
  D3D12DDI_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW = 0x8000,
  D3D12DDI_BARRIER_SYNC_VIDEO_DECODE = 0x100000,
  D3D12DDI_BARRIER_SYNC_VIDEO_PROCESS = 0x200000,
  D3D12DDI_BARRIER_SYNC_VIDEO_ENCODE = 0x400000,
  D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE = 0x800000,
  D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE = 0x1000000,
  D3D12DDI_BARRIER_SYNC_SPLIT = 0x80000000
} ;

상수

 
D3D12DDI_BARRIER_SYNC_NONE
값: 0x0
장벽 앞이나 후에 동기화가 필요하지 않습니다. 사용하는 경우 D3D12DDI_BARRIER_SYNC_NONE 유일한 비트 집합이어야 합니다.

D3D12DDI_BARRIER_SYNC_NONE SyncBefore 값은 ExecuteCommandLists 범위와 동일한 리소스에 대한 이전의 장벽이나 액세스가 없음을 의미합니다.

D3D12DDI_BARRIER_SYNC_NONESyncAfter 값은 동일한 ExecuteCommandLists 범위의 장벽 이후에 해당 하위 리소스에 액세스하지 않음을 의미합니다.

두 경우 모두 AccessAfterD3D12DDI_BARRIER_ACCESS_NO_ACCESS합니다.
D3D12DDI_BARRIER_SYNC_ALL
값: 0x1
SyncBefore 값은 D3D12DDI_BARRIER_SYNC_ALL 장벽을 실행하기 전에 이전의 모든 작업을 완료해야 했음을 나타냅니다.

D3D12DDI_BARRIER_SYNC_ALLSyncAfter 값은 모든 후속 작업이 장벽이 완료되기를 기다려야 했음을 나타냅니다.
D3D12DDI_BARRIER_SYNC_DRAW
값: 0x2
이 값은 모든 그리기 파이프라인 단계에 대한 우산 범위입니다. 다음 GPU 워크로드와 동기화합니다.

* DrawInstanced
* DrawIndexedInstanced
SetGraphicsRootDescriptorTable
SetGraphicsRootShaderResource

* SetGraphicsRootUnorderedAccessView
SetGraphicsRootConstantBufferView


D3D12DDI_DESCRIPTOR_RANGE_FLAG_0013_DATA_STATIC_WHILE_SET_AT_EXECUTE 설명자를 지원하려면 SetGraphicsRootXxx 동기화가 필요합니다.

D3D12DDI_BARRIER_SYNC_DRAWSyncBefore 값은 장벽을 실행하기 전에 이전 그리기 작업을 모두 완료해야 했음을 나타냅니다.

SyncAfter 값은 D3D12DDI_BARRIER_SYNC_DRAW 모든 후속 그리기 작업이 장벽이 완료되기를 기다려야 했음을 나타냅니다.
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER
값: 0x4
입력 어셈블러 단계 실행에 대해 동기화합니다.
D3D12DDI_BARRIER_SYNC_INDEX_INPUT
값: 0x4
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER 매핑합니다.
D3D12DDI_BARRIER_SYNC_VERTEX_SHADING
값: 0x8
꼭짓점, 도메인, 헐, 테셀레이션, 기하 도형, 증폭 및 메시 음영을 비롯한 모든 꼭짓점 음영 단계에 대해 동기화합니다.
D3D12DDI_BARRIER_SYNC_PIXEL_SHADING
값: 0x10
픽셀 셰이더 실행에 대해 동기화합니다.
D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL
값: 0x20
깊이/스텐실 읽기/쓰기 작업과 동기화합니다. 여기에는 Draw* 및 ClearRenderTargetView 중에 DSV(깊이 스텐실 보기) 액세스가 포함됩니다.
D3D12DDI_BARRIER_SYNC_RENDER_TARGET
값: 0x40
렌더링 대상 읽기/쓰기 작업과 동기화합니다. 여기에는 그리기* 및 ClearRenderTargetView 중에 RTV(렌더링 대상 뷰) 쓰기가 포함됩니다.
D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING
값: 0x80
다음 GPU 워크로드와 동기화합니다.

* 디스패치
SetComputeRootDescriptorTable
SetComputeRootShaderResource

SetComputeRootUnorderedAccessView

SetComputeRootConstantBufferView


D3D12DDI_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTION 설명자를 지원하려면 SetComputeRootXxx 동기화가 필요합니다.
D3D12DDI_BARRIER_SYNC_RAYTRACING
값: 0x100
광선 추적 실행에 대해 동기화합니다.
D3D12DDI_BARRIER_SYNC_COPY
값: 0x200
복사 명령에 대해 동기화합니다.
D3D12DDI_BARRIER_SYNC_RESOLVE
값: 0x400
Resolve 명령에 대해 동기화합니다.
D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT
값: 0x800
ExecuteIndirect 실행에 대해 동기화합니다.
D3D12DDI_BARRIER_SYNC_PREDICATION
값: 0x800
조건자 명령에 대해 동기화합니다. D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT*로 별칭이 지정됩니다.
D3D12DDI_BARRIER_SYNC_ALL_SHADING
값: 0x1000
모든 셰이더 실행에 대해 동기화합니다.
D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING
값: 0x2000
픽셀 음영을 제외한 셰이더 실행과 동기화합니다. 레거시 ResourceBarrier API와의 호환성을 위해 존재합니다.
D3D12DDI_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO
값: 0x4000
PFND3D12DDI_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_0054 작업과 동기화합니다.
D3D12DDI_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW
값: 0x8000
UAV에 대한 실행과 동기화합니다.
D3D12DDI_BARRIER_SYNC_VIDEO_DECODE
값: 0x100000
비디오 디코딩 실행에 대해 동기화합니다.
D3D12DDI_BARRIER_SYNC_VIDEO_PROCESS
값: 0x200000
비디오 프로세스 실행과 동기화합니다.
D3D12DDI_BARRIER_SYNC_VIDEO_ENCODE
값: 0x400000
비디오 인코딩 실행에 대해 동기화합니다.
D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE
값: 0x800000
PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 작업과 동기화합니다.

AccessBefore 또는 AccessAfter 필드에 해당 장벽에는 D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE 비트가 설정되어 있어야 합니다.
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE
값: 0x1000000
PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 작업과 동기화합니다.

AccessBefore 또는 AccessAfter 필드에 해당 장벽에는 D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE 비트가 설정되어 있어야 합니다.
D3D12DDI_BARRIER_SYNC_SPLIT
값: 0x80000000
분할 장벽을 나타내는 특수 동기화 비트입니다. 분할 장벽의 시작을 나타내는 SyncAfter 값으로 사용됩니다. 애플리케이션은 D3D12DDI_BARRIER_SYNC_SPLIT 설정된 SyncBefore 일치하는 장벽을 제공해야 합니다. 비고를 참조하세요.

발언

분할 장벽은 명령 스트림의 두 지점 간에 상태 전환이 발생해야 하며 ExecuteCommandLists 경계를 넘어야 한다는 힌트입니다. 드라이버는 필요한 레이아웃 전환을 완료하고 분할 장벽의 시작과 끝 사이에 언제든지 캐시 플러시를 수행할 수 있습니다.

향상된 장벽 API는 SPLIT 동기화를 허용합니다. 분할 장벽은 초기 장벽이 D3D12DDI_BARRIER_SYNC_SPLITSyncAfter 값을 사용하고 최종 장벽은 D3D12DDI_BARRIER_SYNC_SPLITSyncBefore 값을 사용하는 장벽 쌍으로 표시됩니다.

분할 장벽 쌍은 초기 및 최종 장벽 모두에 대해 동일한 LayoutBefore, LayoutAfter, AccessBeforeAccessAfter 값을 사용해야 합니다. 분할 장벽 쌍은 동일한 리소스에 다른 중간 장벽이 없는 순차적이어야 합니다. 다음 코드 조각은 애플리케이션 수준 예제입니다.

// BEGIN split from compute shader UAV to pixel shader SRV
splitBarrierBegin.SyncBefore = D3D12_BARRIER_SYNC_COMPUTE
splitBarrierBegin.SyncAfter = D3D12_BARRIER_SYNC_SPLIT
splitBarrierBegin.AccessBefore = D3D12_BARRIER_ACCESS_UNORDERED_ACCESS
splitBarrierBegin.AccessAfter = D3D12_BARRIER_ACCESS_DIRECT_QUEUE_SHADER_RESOURCE
splitBarrierBegin.LayoutBefore = D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS
splitBarrierBegin.LayoutAfter = D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE

// END split from compute shader UAV to pixel shader SRV
splitBarrierEnd.SyncBefore = D3D12_BARRIER_SYNC_SPLIT
splitBarrierEnd.SyncAfter = D3D12_BARRIER_SYNC_PIXEL_SHADING
splitBarrierEnd.AccessBefore = D3D12_BARRIER_ACCESS_UNORDERED_ACCESS
splitBarrierEnd.AccessAfter = D3D12_BARRIER_ACCESS_DIRECT_QUEUE_SHADER_RESOURCE
splitBarrierEnd.LayoutBefore = D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS
splitBarrierEnd.LayoutAfter = D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE

ExecuteCommandLists 경계를 넘어 분할 장벽이 허용됩니다. 이 경우 모든 AccessBeforeAccessAfter 값은 ExecuteCommandLists 경계가 캐시 플러시를 처리하기 때문에 효과적으로 무시됩니다. 기본적으로 ExecuteCommandLists 간 분할 장벽은 레이아웃 전용 장벽입니다. 따라서 ExecuteCommandLists 경계를 넘어 버퍼 장벽 또는 동시 액세스 텍스처 장벽을 분할하는 것은 목적이 없습니다. 지정된 ExecuteCommandLists 범위의 버퍼 또는 동시 액세스 텍스처에 대한 타의 추종을 불허하는 BEGIN 또는 END 분할 장벽은 효과적으로 사용되지 않으며 디버그 계층은 경고를 생성합니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows 11(WDDM 3.0)
헤더 d3d12umddi.h

참고 항목

D3D12DDI_BARRIER_ACCESS

D3D12DDI_BUFFER_BARRIER_0088

D3D12DDI_GLOBAL_BARRIER_0088

D3D12DDI_RANGED_BARRIER_0088

D3D12DDI_TEXTURE_BARRIER_0088