구문
매개 변수
NumBarriers [in]형식: UINT 제출된 배리어 설명의 수입니다. pBarriers [in]
형식: const D3D12_RESOURCE_BARRIER * 배리어 설명 배열에 대한 포인터입니다.
반환 값
형식: void 없음.설명
D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE 상태에 사용될 리소스는 해당 상태로 생성되어야 하며, 그 상태를 벗어나서는 안 됩니다. 또한 해당 상태로 생성되지 않은 리소스는 해당 상태로 전환될 수 없습니다. 자세한 내용은 GitHub의 DirectX Raytracing(DXR) 기능 사양의 가속 구조 메모리 제한을 참조하세요.
- D3D12_RESOURCE_TRANSITION_BARRIER - 전환 배리어는 하위 리소스 집합이 서로 다른 용도 사이에서 전환됨을 나타냅니다. 호출자는 하위 리소스의 before 및 after 용도를 지정해야 합니다. D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES 플래그는 리소스의 모든 하위 리소스를 동시에 전환하는 데 사용됩니다.
- D3D12_RESOURCE_ALIASING_BARRIER - 별칭 배리어는 동일한 힙에 매핑되는 두 개의 다른 리소스 사용 간의 전환을 나타냅니다. 애플리케이션은 이전 및 이후 리소스를 모두 지정할 수 있습니다. 하나 또는 두 리소스 모두 NULL일 수 있습니다(모든 타일 리소스가 별칭을 유발할 수 있음을 나타냄).
- D3D12_RESOURCE_UAV_BARRIER - 정렬되지 않은 액세스 뷰 배리어는 특정 리소스에 대한 모든 UAV 액세스(읽기 또는 쓰기)가 향후 UAV 액세스(읽기 또는 쓰기)가 시작되기 전에 완료되어야 함을 나타냅니다. 지정된 리소스는 NULL일 수 있습니다. UAV만 읽는 두 개의 draw 또는 dispatch 호출 사이에 UAV 배리어를 삽입할 필요는 없습니다. 또한 UAV 액세스를 임의의 순서로 실행하는 것이 안전하다는 것을 애플리케이션이 알고 있는 경우 동일한 UAV에 쓰는 두 draw 또는 dispatch 호출 사이에 UAV 배리어를 삽입할 필요는 없습니다. 리소스는 NULL일 수 있습니다(모든 UAV 액세스에 배리어가 필요할 수 있음을 나타냄).
- D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER
- D3D12_RESOURCE_STATE_INDEX_BUFFER
- D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE
- D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE
- D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT
- D3D12_RESOURCE_STATE_COPY_SOURCE
- D3D12_RESOURCE_STATE_DEPTH_READ
- D3D12_RESOURCE_STATE_UNORDERED_ACCESS
- D3D12_RESOURCE_STATE_DEPTH_WRITE
- D3D12_RESOURCE_STATE_COPY_DEST
- D3D12_RESOURCE_STATE_RENDER_TARGET
- D3D12_RESOURCE_STATE_STREAM_OUT
런타임 유효성 검사
런타임은 배리어 유형 값이 D3D12_RESOURCE_BARRIER_TYPE 열거형의 유효한 멤버인지 확인합니다. 또한 런타임은 다음을 확인합니다:- 리소스 포인터가 NULL이 아님.
- 하위 리소스 인덱스가 유효함
- 이전 및 이후 상태가 리소스의 D3D12_RESOURCE_BINDING_TIER 및 D3D12_RESOURCE_FLAGS 플래그에서 지원됨.
- 상태 마스크의 예약 비트가 설정되지 않음.
- 이전 및 이후 상태가 다름.
- 이전 및 이후 상태의 비트 집합이 유효함.
- D3D12_RESOURCE_STATE_RESOLVE_SOURCE 비트가 설정된 경우 리소스 샘플 카운트는 1보다 커야 함.
- D3D12_RESOURCE_STATE_RESOLVE_DEST 비트가 설정된 경우 리소스 샘플 카운트는 1과 같아야 함.
디버그 레이어
디버그 레이어는 일반적으로 런타임 유효성 검사가 실패하는 곳에서 오류를 발생시킵니다:- 명령 목록의 하위 리소스 전환이 동일한 명령 목록의 이전 전환과 일치하지 않는 경우.
- 리소스를 올바른 상태로 만들기 위해 ResourceBarrier를 먼저 호출하지 않고 리소스를 사용하는 경우.
- 리소스가 동시에 읽기 및 쓰기용으로 잘못 바인딩된 경우.
- ResourceBarrier에 전달된 before 상태가 별칭 사례를 포함하여 이전 ResourceBarrier 호출의 after 상태와 일치하지 않는 경우.
- D3D12 디버그 레이어가 ID3D12GraphicsCommandList::ResourceBarrier에 대해 경고를 발생시키는 모든 경우.
- 리소스에 D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE 사용 비트가 설정된 동안 깊이 버퍼가 읽기 전용이 아닌 모드에서 사용되는 경우.
예제
D3D12HelloTriangle 샘플은 다음과 같이 ID3D12GraphicsCommandList::ResourceBarrier를 사용합니다:요구 사항
헤더: d3d12_xs.h 또는 d3d12_x.h라이브러리: d3d12_xs.lib 또는 d3d12_x.lib
지원 플랫폼: XBOX Series 콘솔 및 XBOX One 제품군
