Вулкан: В случае буфера с несколькими кадрами, я должен создать несколько VkBuffers для каждой униформы шейдера? - PullRequest
0 голосов
/ 26 сентября 2019

glsl:

#version 450

layout(set = 0, binding = 0) uniform mat4 MyMatrix;

void main() {
}

Если выполняется несколько буферов кадров, несколько буферов кадров могут быть отправлены в очередь одновременно, например:

while(!isClose) {
    ...
    VkSubmitInfo submitInfo = {};
    submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
    std::vector<VkCommandBuffer> cs = {commandBuffers[imageIndex]}; // bind different frame buffer
    ...
    vkQueueSubmit(graphicsQueue, 1, &submitInfo, inFlightFences[currentFrame]);
    ...
    currentFrame = (currentFrame + 1) % MAX_FRAMES_IN_FLIGHT;
    ...
}

MyMatrix needsобновить каждый кадр.Если MyMatrix использует тот же VkBuffer, каждый кадр данных может быть перезаписан?Так я должен создать несколько VkBuffers для MyMatrix?

1 Ответ

0 голосов
/ 27 сентября 2019

Многочисленные буферы, вероятно, излишни - более привычно выделять один большой унифицированный буфер, а затем перераспределять из этого для каждого пакета вызова отрисовки.Затем вы можете просто использовать смещения в этом буфере для каждого отрисовки, вместо того, чтобы каждый раз нуждаться в совершенно новом буфере.

Как правило, смещения дешевле обрабатывать аппаратным обеспечением, чем полностью новые дескрипторы буфера.

...