1e5c31af7Sopenharmony_ci#ifndef _VKIMAGEWITHMEMORY_HPP 2e5c31af7Sopenharmony_ci#define _VKIMAGEWITHMEMORY_HPP 3e5c31af7Sopenharmony_ci/*------------------------------------------------------------------------- 4e5c31af7Sopenharmony_ci * Vulkan CTS Framework 5e5c31af7Sopenharmony_ci * -------------------- 6e5c31af7Sopenharmony_ci * 7e5c31af7Sopenharmony_ci * Copyright (c) 2016 The Khronos Group Inc. 8e5c31af7Sopenharmony_ci * Copyright (c) 2016 Google Inc. 9e5c31af7Sopenharmony_ci * 10e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 11e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License. 12e5c31af7Sopenharmony_ci * You may obtain a copy of the License at 13e5c31af7Sopenharmony_ci * 14e5c31af7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 15e5c31af7Sopenharmony_ci * 16e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 17e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 18e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and 20e5c31af7Sopenharmony_ci * limitations under the License. 21e5c31af7Sopenharmony_ci * 22e5c31af7Sopenharmony_ci *//*! 23e5c31af7Sopenharmony_ci * \file 24e5c31af7Sopenharmony_ci * \brief Image backed with memory 25e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/ 26e5c31af7Sopenharmony_ci 27e5c31af7Sopenharmony_ci#include "vkDefs.hpp" 28e5c31af7Sopenharmony_ci#include "vkMemUtil.hpp" 29e5c31af7Sopenharmony_ci#include "vkQueryUtil.hpp" 30e5c31af7Sopenharmony_ci#include "vkRef.hpp" 31e5c31af7Sopenharmony_ci#include "vkRefUtil.hpp" 32e5c31af7Sopenharmony_ci 33e5c31af7Sopenharmony_cinamespace vk 34e5c31af7Sopenharmony_ci{ 35e5c31af7Sopenharmony_ciclass ImageWithMemory 36e5c31af7Sopenharmony_ci{ 37e5c31af7Sopenharmony_cipublic: 38e5c31af7Sopenharmony_ci ImageWithMemory (const vk::DeviceInterface& vk, 39e5c31af7Sopenharmony_ci const vk::VkDevice device, 40e5c31af7Sopenharmony_ci vk::Allocator& allocator, 41e5c31af7Sopenharmony_ci const vk::VkImageCreateInfo& imageCreateInfo, 42e5c31af7Sopenharmony_ci const vk::MemoryRequirement memoryRequirement) 43e5c31af7Sopenharmony_ci 44e5c31af7Sopenharmony_ci : m_image (createImage(vk, device, &imageCreateInfo)) 45e5c31af7Sopenharmony_ci , m_allocation (allocator.allocate(getImageMemoryRequirements(vk, device, *m_image), memoryRequirement)) 46e5c31af7Sopenharmony_ci { 47e5c31af7Sopenharmony_ci VK_CHECK(vk.bindImageMemory(device, *m_image, m_allocation->getMemory(), m_allocation->getOffset())); 48e5c31af7Sopenharmony_ci } 49e5c31af7Sopenharmony_ci 50e5c31af7Sopenharmony_ci const vk::VkImage& get (void) const { return *m_image; } 51e5c31af7Sopenharmony_ci const vk::VkImage& operator* (void) const { return get(); } 52e5c31af7Sopenharmony_ci vk::Allocation& getAllocation (void) const { return *m_allocation; } 53e5c31af7Sopenharmony_ci 54e5c31af7Sopenharmony_ciprivate: 55e5c31af7Sopenharmony_ci const vk::Unique<vk::VkImage> m_image; 56e5c31af7Sopenharmony_ci const de::UniquePtr<vk::Allocation> m_allocation; 57e5c31af7Sopenharmony_ci 58e5c31af7Sopenharmony_ci // "deleted" 59e5c31af7Sopenharmony_ci ImageWithMemory (const ImageWithMemory&); 60e5c31af7Sopenharmony_ci ImageWithMemory& operator= (const ImageWithMemory&); 61e5c31af7Sopenharmony_ci}; 62e5c31af7Sopenharmony_ci} // vk 63e5c31af7Sopenharmony_ci 64e5c31af7Sopenharmony_ci#endif // _VKIMAGEWITHMEMORY_HPP 65