| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef LIB_ESCHER_RENDERER_UNIFORM_BINDING_H_ |
| #define LIB_ESCHER_RENDERER_UNIFORM_BINDING_H_ |
| |
| #include "lib/escher/vk/command_buffer.h" |
| |
| namespace escher { |
| |
| // Struct that describes where to bind a range of uniform data. UniformBinding |
| // is often used as per-frame data in a RenderQueue. In such cases, it is |
| // common to allocate the struct itself via Frame::Allocate<UniformBinding>(), |
| // and to allocate the uniform data to bind via Frame::AllocateUniform(). |
| struct UniformBinding { |
| uint32_t descriptor_set_index = 0; |
| uint32_t binding_index = 0; |
| // Holds a Buffer* instead of a vk::Buffer because the CommandBuffer needs |
| // the buffer UID to look up cached descriptor sets. |
| Buffer* buffer = nullptr; |
| vk::DeviceSize offset = 0; |
| vk::DeviceSize size = 0; |
| |
| void Bind(CommandBuffer* cb) const { |
| cb->BindUniformBuffer(descriptor_set_index, binding_index, buffer, offset, |
| size); |
| } |
| }; |
| |
| } // namespace escher |
| |
| #endif // LIB_ESCHER_RENDERER_UNIFORM_BINDING_H_ |