В книге по ДХ уделяют внимание тому, что если мы засабмитим на ГПУ кучу команд и начнём сабмитить следующие только тогда, когда она выполнит предыдущие - она будет нас ждать, но мол мы не хотим этого. Логично. Но они предлагают с ЦПУ сабмитить внимание! текущий (n) фрейм, n+1 и n+2 фрейм!
Мне понятен сабмит текущего фрейма. Ок. Мне понятен сабмит следующего, если скажем сейчас ГПУ рисует n-1 фрейм, мы сейчас собираем n фрейм и мы уже получили инпут и знаем кто куда двинется включая игрока для n+1 фрейма, можем собрать и его. Но n+2 это как вообще?
Это чтобы скрывать тормоза. Например _ровно один_ фрейм на гпу тормозит – на 2х фреймах ты получаешь: быстро записали n=1 (он будет тормозить на гпу), засабмитили, быстро подождали n=0 с гпу, быстро записали n=2, засабмитили, долго ждем n=1 с гпу (тормозит)... При 3х фреймах, если гпу в целом тащит, этот единственный фрейм сгладится соседними и на стороне цпу тормозов от него не будет видно. Увеличивая число frames in flight ты скрываешь больше тормозов, но а) ты тратишь больше ресурсов и б) CPU и GPU начинают играть в разные игры. 3 считается оптимальным