| // Copyright 2016 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_VK_BUFFER_H_ |
| #define SRC_UI_LIB_ESCHER_VK_BUFFER_H_ |
| |
| #include "src/ui/lib/escher/forward_declarations.h" |
| #include "src/ui/lib/escher/resources/resource.h" |
| #include "src/ui/lib/escher/vk/gpu_mem.h" |
| |
| namespace escher { |
| |
| class Buffer; |
| typedef fxl::RefPtr<Buffer> BufferPtr; |
| |
| // Escher's standard interface to Vulkan buffer objects. Other than subclassing |
| // Resource, this class only holds onto the various pieces of state. Particular |
| // subclasses may have custom deletion logic. |
| class Buffer : public Resource { |
| public: |
| static const ResourceTypeInfo kTypeInfo; |
| const ResourceTypeInfo& type_info() const override { return kTypeInfo; } |
| |
| // Return the underlying Vulkan buffer object. |
| vk::Buffer vk() { return buffer_; } |
| |
| // Return the exact size of the Vulkan buffer. |
| vk::DeviceSize size() const { return size_; } |
| |
| // If the buffer is host-accessible, then this returns a direct pointer to |
| // cache-coherent device memory. Otherwise, returns nullptr. |
| uint8_t* host_ptr() const { return host_ptr_; } |
| |
| protected: |
| Buffer(ResourceManager* manager, vk::Buffer buffer, vk::DeviceSize size, uint8_t* host_ptr); |
| |
| private: |
| // Underlying Vulkan buffer object. |
| const vk::Buffer buffer_; |
| |
| // Size of the Vulkan buffer. |
| const vk::DeviceSize size_; |
| uint8_t* const host_ptr_; |
| }; |
| |
| } // namespace escher |
| |
| #endif // SRC_UI_LIB_ESCHER_VK_BUFFER_H_ |