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_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 또는 |
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE 값: 0x1000000 PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 작업과 동기화합니다. AccessBefore 또는 |
D3D12DDI_BARRIER_SYNC_SPLIT 값: 0x80000000 분할 장벽을 나타내는 특수 동기화 비트입니다. 분할 장벽의 시작을 나타내는 SyncAfter 값으로 사용됩니다. 애플리케이션은 D3D12DDI_BARRIER_SYNC_SPLIT 설정된 SyncBefore 일치하는 장벽을 제공해야 합니다. 비고를 참조하세요. |
발언
분할 장벽은 명령 스트림의 두 지점 간에 상태 전환이 발생해야 하며 ExecuteCommandLists 경계를 넘어야 한다는 힌트입니다. 드라이버는 필요한 레이아웃 전환을 완료하고 분할 장벽의 시작과 끝 사이에 언제든지 캐시 플러시를 수행할 수 있습니다.
향상된 장벽 API는 SPLIT 동기화를 허용합니다. 분할 장벽은 초기 장벽이 D3D12DDI_BARRIER_SYNC_SPLITSyncAfter 값을 사용하고 최종 장벽은 D3D12DDI_BARRIER_SYNC_SPLITSyncBefore 값을 사용하는 장벽 쌍으로 표시됩니다.
분할 장벽 쌍은 초기 및 최종 장벽 모두에 대해 동일한 LayoutBefore, LayoutAfter, AccessBefore및 AccessAfter 값을 사용해야 합니다. 분할 장벽 쌍은 동일한 리소스에 다른 중간 장벽이 없는 순차적이어야 합니다. 다음 코드 조각은 애플리케이션 수준 예제입니다.
// 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 경계를 넘어 분할 장벽이 허용됩니다. 이 경우 모든 AccessBefore 및 AccessAfter 값은 ExecuteCommandLists 경계가 캐시 플러시를 처리하기 때문에 효과적으로 무시됩니다. 기본적으로 ExecuteCommandLists 간 분할 장벽은 레이아웃 전용 장벽입니다. 따라서 ExecuteCommandLists 경계를 넘어 버퍼 장벽 또는 동시 액세스 텍스처 장벽을 분할하는 것은 목적이 없습니다. 지정된 ExecuteCommandLists 범위의 버퍼 또는 동시 액세스 텍스처에 대한 타의 추종을 불허하는 BEGIN 또는 END 분할 장벽은 효과적으로 사용되지 않으며 디버그 계층은 경고를 생성합니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 11(WDDM 3.0) |
헤더 | d3d12umddi.h |