Vulkan StagingBuffer 对齐

问题描述 投票:0回答:1

假设我有不同类型的数据,例如顶点、索引......并且我想仅使用一个暂存缓冲区来传输它们。缓冲区对齐是否会导致问题,我是否必须检查它们的对齐要求是否匹配,或者分配内存的总大小并映射它们就可以了吗?

例如;

const s3DVertex vertices[4] = {
    {{-0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}},
    {{0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}},
    {{0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}},
    {{-0.5f, 0.5f}, {1.0f, 1.0f, 1.0f}}
};

const uint16_t indices[6] = { 0, 1, 2, 2, 3, 0 };

void* data;
vkMapMemory(logicalDevice, stagingBufferMemory, 0, VK_WHOLE_SIZE, 0, &data);
memcpy(data, vertices, (size_t)(sizeof(s3DVertex) * 4));
memcpy(reinterpret_cast<void*>(reinterpret_cast<s3DVertex*>(data) + 4), indices, (size_t)(sizeof(uint16_t) * 6));
vkUnmapMemory(logicalDevice, stagingBufferMemory);

在这个例子中,它工作正常,但我不确定它是否在所有条件下都有效?

alignment buffer vulkan staging
1个回答
0
投票

用于在设备内存之间执行传输的各种队列可能对此类传输操作有特定的对齐限制。因此,您需要确保检查您正在使用的队列系列中的那些。

除此之外,设备缓冲区复制操作源的内存对齐并不重要。因此,只需确保您遵循队列的对齐要求即可。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.