Все зависит от того, как вы используете свои ресурсы и производительности, которую вы хотите достичь.
Если после каждого кадра Вы готовы ждать окончания рендеринга и все еще довольны конечным исполнением, Вы можете использовать только одну копию каждого ресурса. Ожидание - это самая простая синхронизация. Вы уверены, что ресурсы больше не используются, поэтому вы можете использовать их для следующего кадра. Но если вы хотите эффективно использовать мощность как CPU, так и GPU и не хотите ждать после каждого кадра, то вам нужно посмотреть, как используется каждый ресурс.
Буфер глубины обычно используется только временно. Если вы не выполняете никакой постобработки, если в вашей настройке прохода рендеринга используются данные глубины только для внутреннего использования (вы не указываете STORE
для storeOp
), то вы можете все время использовать только один буфер глубины (изображение глубины). Это потому, что когда рендеринг завершен, данные о глубине больше не используются, их можно безопасно отбросить. Это относится ко всем другим ресурсам, которые не должны сохраняться между кадрами.
Но если для каждого кадра необходимо использовать разные данные или если в следующем кадре используются сгенерированные данные, то обычно вам требуется еще одна копия данного ресурса. Обновление данных требует синхронизации - чтобы избежать ожидания в таких ситуациях, вам необходимо иметь копию ресурса. Таким образом, в случае единообразных буферов, вы обновляете данные в данном буфере и используете их в данном кадре. Вы не можете изменять его содержимое до тех пор, пока кадр не будет завершен - поэтому, чтобы подготовить другой кадр анимации, пока предыдущий еще обрабатывается в графическом процессоре, вам нужно использовать другую копию.
Аналогично, если сгенерированные данные требуются для следующего кадра (например, кадровый буфер, используемый для отражений пространства экрана). Повторное использование одного и того же ресурса приведет к его перезаписи. Вот почему Вам нужна еще одна копия.
Вы можете найти больше информации здесь: https://software.intel.com/en-us/articles/api-without-secrets-the-practical-approach-to-vulkan-part-1