Vulkan: Uniform Buffer #107334
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
#include "vk_uniform_buffer.hh"
|
#include "vk_uniform_buffer.hh"
|
||||||
#include "vk_context.hh"
|
#include "vk_context.hh"
|
||||||
|
#include "vk_shader.hh"
|
||||||
|
#include "vk_shader_interface.hh"
|
||||||
|
|
||||||
namespace blender::gpu {
|
namespace blender::gpu {
|
||||||
|
|
||||||
|
@ -22,13 +24,42 @@ void VKUniformBuffer::update(const void *data)
|
||||||
void VKUniformBuffer::allocate(VKContext &context)
|
void VKUniformBuffer::allocate(VKContext &context)
|
||||||
{
|
{
|
||||||
buffer_.create(context, size_in_bytes_, GPU_USAGE_STATIC, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
|
buffer_.create(context, size_in_bytes_, GPU_USAGE_STATIC, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
|
||||||
|
debug::object_label(&context, buffer_.vk_handle(), name_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VKUniformBuffer::clear_to_zero() {}
|
void VKUniformBuffer::clear_to_zero()
|
||||||
|
{
|
||||||
|
VKContext &context = *VKContext::get();
|
||||||
|
if (!buffer_.is_allocated()) {
|
||||||
|
allocate(context);
|
||||||
|
}
|
||||||
|
buffer_.clear(context, 0);
|
||||||
|
}
|
||||||
|
|
||||||
void VKUniformBuffer::bind(int /*slot*/) {}
|
void VKUniformBuffer::bind(int slot, shader::ShaderCreateInfo::Resource::BindType bind_type)
|
||||||
|
{
|
||||||
|
VKContext &context = *VKContext::get();
|
||||||
|
if (!buffer_.is_allocated()) {
|
||||||
|
allocate(context);
|
||||||
|
}
|
||||||
|
|
||||||
void VKUniformBuffer::bind_as_ssbo(int /*slot*/) {}
|
VKShader *shader = static_cast<VKShader *>(context.shader);
|
||||||
|
const VKShaderInterface &shader_interface = shader->interface_get();
|
||||||
|
const VKDescriptorSet::Location location = shader_interface.descriptor_set_location(bind_type,
|
||||||
|
slot);
|
||||||
|
VKDescriptorSetTracker &descriptor_set = shader->pipeline_get().descriptor_set_get();
|
||||||
|
descriptor_set.bind(*this, location);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VKUniformBuffer::bind(int slot)
|
||||||
|
{
|
||||||
|
bind(slot, shader::ShaderCreateInfo::Resource::BindType::UNIFORM_BUFFER);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VKUniformBuffer::bind_as_ssbo(int slot)
|
||||||
|
{
|
||||||
|
bind(slot, shader::ShaderCreateInfo::Resource::BindType::STORAGE_BUFFER);
|
||||||
|
}
|
||||||
|
|
||||||
void VKUniformBuffer::unbind() {}
|
void VKUniformBuffer::unbind() {}
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ class VKUniformBuffer : public UniformBuf, NonCopyable {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void allocate(VKContext &context);
|
void allocate(VKContext &context);
|
||||||
|
void bind(int slot, shader::ShaderCreateInfo::Resource::BindType bind_type);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace blender::gpu
|
} // namespace blender::gpu
|
||||||
|
|
Loading…
Reference in New Issue