【发布时间】:2017-10-06 18:10:12
【问题描述】:
我想把这个问题分成三部分:-
limits.minUniformBufferOffsetAlignment的概念是什么,为什么我们需要使用它来获得所需的对齐并从中得出缓冲区的偏移量? Vulkan 不能自动区分不同的数据类型和它们各自的对齐方式吗?
-
在 Sascha Willems 示例中,他计算了一个 4X4 矩阵的动态对齐方式,如下所示
size_t uboAlignment = vulkanDevice->properties.limits.minUniformBufferOffsetAlignment dynamicAlignment = (sizeof(glm::mat4) / uboAlignment) * uboAlignment + ((sizeof(glm::mat4) % uboAlignment) > 0 ? uboAlignment : 0);一个 4X4 矩阵是 64 字节,允许的最小对齐大小是 256 字节,但据我所知,他的 dynamicAlignment 计算结果为(64+256 = 320 //我认为 vulkan 中不允许)我不太明白这个dynamicAlignment计算是如何工作的
-
这个 dynamicAlignment 变量如何反映到
VkBufferCreateInfo bufferInfo = {}; bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; bufferInfo.size = size;和内存映射类似
void * data; vkMapMemory(device, uniformStagingBufferMemory, 0, sizeof(matrix), 0, &data); memcpy(data, &matrix, sizeof(matrix)); vkUnmapMemory(device, uniformStagingBufferMemory); copyBuffer(uniformStagingBuffer, uniformBuffer, sizeof(matrix));
【问题讨论】:
标签: c++ game-engine game-physics vulkan