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