Vulkan 버퍼를 감싼 C++ RAII 래퍼가 그 버퍼를 쓰는 작업을 기록해 제출하고 스코프를 벗어난다. 소멸자는 그 자리에서 vkDestroyBuffer를 호출한다. 버퍼를 참조하는 제출된 명령은 아직 실행 중이다.
이 호출은 잘못이다. Vulkan은 버퍼를 파괴하기 전에 그 버퍼를 참조하는 제출된 명령이 모두 실행을 마쳤을 것을 요구한다. 스코프를 벗어났다는 건 호스트가 래퍼를 다 썼다는 사실뿐이다. GPU에 대해서는 아무것도 보여 주지 않는다.
처음 떠오른 방법은 제출 시점에 래퍼를 프레임 회수 목록으로 옮기고, 그 제출의 완료가 확인된 뒤에만 파괴하는 것이다. 계속 마음이 오가는 건 옮기는 위치다. 제출 호출 안인가, 프레임을 소유한 쪽인가? 프레임 목록이라고 부른다고 해서 항목을 언제 풀어 줘도 되는지가 정해지지도 않는다.