|  | // 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 SRC_UI_LIB_ESCHER_RENDERER_UNIFORM_ALLOCATION_H_ | 
|  | #define SRC_UI_LIB_ESCHER_RENDERER_UNIFORM_ALLOCATION_H_ | 
|  |  | 
|  | #include "src/ui/lib/escher/forward_declarations.h" | 
|  |  | 
|  | #include <vulkan/vulkan.hpp> | 
|  |  | 
|  | namespace escher { | 
|  |  | 
|  | // Represents a sub-allocation from within a Vulkan uniform buffer.  The valid | 
|  | // lifetime of this allocation is defined by the allocator that this is obtained | 
|  | // from. | 
|  | struct UniformAllocation { | 
|  | Buffer* buffer = nullptr; | 
|  | vk::DeviceSize offset = 0; | 
|  | vk::DeviceSize size = 0; | 
|  | // Host-accessible pointer to offset region of the buffer's memory. | 
|  | void* host_ptr = nullptr; | 
|  |  | 
|  | // Convenient way to refer to the host-accessible memory as a typed reference. | 
|  | template <typename T> | 
|  | T& as_ref() { | 
|  | FX_DCHECK(size >= sizeof(T)); | 
|  | return *static_cast<T*>(host_ptr); | 
|  | } | 
|  | // Convenient way to refer to the host-accessible memory as a typed pointer. | 
|  | template <typename T> | 
|  | T* as_ptr() { | 
|  | FX_DCHECK(size >= sizeof(T)); | 
|  | return static_cast<T*>(host_ptr); | 
|  | } | 
|  | }; | 
|  |  | 
|  | }  // namespace escher | 
|  |  | 
|  | #endif  // SRC_UI_LIB_ESCHER_RENDERER_UNIFORM_ALLOCATION_H_ |