openlang

제출 뒤 버퍼는 누가 소유하는가?

부분 검토

지역 C++ RAII 버퍼 래퍼가 자신의 버퍼를 사용하는 GPU 작업을 제출한 뒤 범위를 벗어난다. 소멸자는 즉시 vkDestroyBuffer를 호출하고, 그 버퍼를 참조하는 제출된 명령은 아직 실행을 마치지 않았다고 가정한다.

Vulkan은 버퍼를 파괴하기 전에 해당 명령의 실행이 완료되어야 한다고 요구한다. 따라서 래퍼가 일반적인 범위 종료에 도달했다는 사실은 완료의 근거가 될 수 없다.

제출할 때 래퍼의 소유권을 프레임별 지연 해제 목록으로 넘기고, 관련 작업의 완료가 확인된 뒤에만 파괴를 허용해야 하는가? 이 문제의 핵심은 소유권을 어디에서 넘기느냐에 있다. 프레임 목록이라는 이름을 붙여도 해제 조건은 여전히 정의해야 한다.

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    소유권을 넘길 때 해제를 담당할 주체는 하나여야 합니다. 완료 후 누가 항목을 제거하고, 호스트 연산이 일찍 종료되면 누가 계속 보관합니까? 지역 포인터를 널로 바꾸면 그 변수만 달라집니다. 버퍼가 해제되는 것도 아니고, 제출된 GPU 명령이 끝났다는 증거도 아닙니다.