在Vulkan GLSL中,uniform buffer
、push constants
和specialization constants
是不同的机制,用于向着色器传递数据。下面我们就来简单记录一下每个概念的用法:
uniform buffer、push constants和specialization constants概念总结
1. Uniform Buffer
概念:
Uniform Buffers
是一块存储在GPU上的内存区域,可以在多个着色器(甚至多个着色器阶段)之间共享一致的数据。Uniform Buffers
可以容纳大量数据,可用于传递长生命周期的全局常量数据。
用法:
1.1. 在GLSL中定义Uniform Buffer:
layout(set = 0, binding = 0) uniform UBO {
mat4 modelMatrix;
mat4 viewMatrix;
mat4 projectionMatrix;
} ubo;
1.2. 在Vulkan中创建Uniform Buffer:
VkBufferCreateInfo bufferInfo = {
};
bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
bufferInfo.size = sizeof(UniformBufferObject);
bufferInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT;
bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
VkBuffer uniformBuffer;
vkCreateBuffer(device, &bufferInfo, nullptr, &uniformBuffer);
1.3. 绑定Uniform Buffer到Descriptor Set:
VkDescriptorBufferInfo bufferInfo = {
};
bufferInfo.buffer = uniformBuffer;
bufferInfo.offset = 0;
bufferInfo.range = sizeof(UniformBufferObject);
VkWriteDescriptorSet descriptorWrite = {
};
descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
descriptorWrite.dstSet = d