Ну просто RingBiffer, каждый раз при копировании сдвигаешь оффсет, помечаешь как "занято", через frames_in_flight фреймов почечаешь range как свободный, если места нет – реаллоцируешь
на пройке с эти, конечно, проще, там можно выделить память в командром буфере под значение, залить туда 0 до отправки, а в сам буфер после копирования добавить команду по типу *value_ptr = 1. Далее просто чекать этот указатель на CPU.
В вулкане такое только с GPU-CPU shared памятью удастся провернуть, и то через костыли по типу временных буферов и доп. команды копирования значения 1 в этот shared буфер