IDMLCommandRecorder::RecordDispatch 메서드(directml.h)
명령 목록에 디스패치 가능한 개체(연산자 이니셜라이저 또는 컴파일된 연산자)의 실행을 기록합니다.
이 메서드는 GPU에 실행을 제출하지 않습니다. 명령 목록에 기록하기만 하면됩니다. 명령 목록을 닫고 Direct3D 12 명령 큐에 제출해야 합니다.
GPU에서 이 호출을 실행하기 전에 바인딩된 모든 리소스가 D3D12_RESOURCE_STATE_UNORDERED_ACCESS 상태이거나 D3D12_RESOURCE_STATE_COMMON같은D3D12_RESOURCE_STATE_UNORDERED_ACCESS 암시적으로 승격 가능한 상태여야 합니다. 이 호출이 완료되면 리소스는 D3D12_RESOURCE_STATE_UNORDERED_ACCESS 상태를 유지합니다. 하나 이상의 텐서에 DML_TENSOR_FLAG_OWNED_BY_DML 플래그가 설정되어 있고 연산자 이니셜라이저를 실행하는 경우 바인딩된 업로드 힙만이 이에 대한 유일한 예외입니다. 그러한 경우 입력을 위해 바인딩된 업로드 힙은 D3D12_RESOURCE_STATE_GENERIC_READ 상태여야 하며 모든 업로드 힙에 필요한 상태로 유지됩니다.
이 메서드는 명령 목록에서 다음 상태를 다시 설정합니다.
- 컴퓨팅 루트 서명
- 파이프라인 상태
이 메서드는 파이프라인에 바인딩할 리소스를 나타내는 바인딩 테이블을 사용하지만 설명자 자체를 포함하는 설명자 힙을 설정하지는 않습니다. 따라서 애플리케이션은 ID3D12GraphicsCommandList::SetDescriptorHeaps 를 호출하여 올바른 설명자 힙을 파이프라인에 바인딩합니다.
DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE이 연산자를 컴파일할 때 설정되지 않은 경우, 모든 바인딩은 RecordDispatch가 호출되기 전에 바인딩 테이블에서 설정되어야 합니다. 그렇지 않으면 동작이 정의되지 않습니다. 그렇지 않으면 _DESCRIPTORS_VOLATILE 플래그가 설정된 경우 실행하기 위해 Direct3D 12 명령 목록이 명령 큐에 제출될 때까지 리소스 바인딩이 지연될 수 있습니다.
이 메서드는 ID3D12GraphicsCommandList::D ispatch 호출처럼 논리적으로 작동합니다. 이와 같이, 디스패치 간 데이터 종속성이 있는 경우 정확한 순서를 보장하기 위해서는 UAV(순서가 지정되지 않은 액세스 뷰) 장벽이 필요합니다. 이 메서드는 입력이나 출력 리소스에 UAV 장벽을 삽입하지 않습니다. 애플리케이션은 해당 콘텐츠가 업스트림 디스패치에 의존하는 경우 입력에 대해, 그리고 해당 출력에 의존하는 다운스트림 디스패치가 있는 경우 모든 출력에 대해 올바른 UAV 장벽이 수행되는지 확인해야 합니다.
이 메서드는 전달된 인터페이스에 대한 참조를 포함하지 않습니다. IDMLDispatchable 개체를 사용하는 모든 디스패치가 GPU에서 실행을 완료할 때까지 해제되지 않도록 하는 것은 사용자의 책임입니다.
구문
void RecordDispatch(
ID3D12CommandList *commandList,
IDMLDispatchable *dispatchable,
IDMLBindingTable *bindings
);
매개 변수
commandList
형식: ID3D12CommandList*
실행을 기록할 명령 목록을 나타내는 ID3D12CommandList 인터페이스에 대한 포인터입니다. 명령 목록은 열려 있어야 하며 형식 D3D12_COMMAND_LIST_TYPE_DIRECT 또는 D3D12_COMMAND_LIST_TYPE_COMPUTE 있어야 합니다.
dispatchable
형식: IDMLDispatchable*
실행이 명령 목록에 기록되는 개체(연산자 이니셜라이저 또는 컴파일된 연산자)를 나타내는 IDMLDispatchable 인터페이스에 대한 포인터입니다.
bindings
형식: IDMLBindingTable*
디스패치 가능한 개체를 실행하는 데 사용할 바인딩을 나타내는 IDMLBindingTable 인터페이스에 대한 포인터입니다. DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE 플래그가 설정되지 않은 경우 필요한 모든 바인딩을 입력해야 합니다. 그렇지 않으면 오류가 발생합니다.
반환 값
없음
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | Windows |
헤더 | directml.h |
라이브러리 | DirectML.lib |
DLL | DirectML.dll |