2016-02-26 13:39:01 +11:00
|
|
|
/*
|
2018-08-04 15:24:36 +10:00
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
2016-02-26 13:39:01 +11:00
|
|
|
*
|
|
|
|
* Copyright:
|
2017-09-13 23:26:15 +10:00
|
|
|
* 2016-2017, Danny Robson <danny@nerdcruft.net>
|
2016-02-26 13:39:01 +11:00
|
|
|
*/
|
|
|
|
|
2017-05-26 16:30:48 +10:00
|
|
|
#ifndef CRUFT_VK_DEVICE_MEMORY_HPP
|
|
|
|
#define CRUFT_VK_DEVICE_MEMORY_HPP
|
2016-02-24 11:11:41 +11:00
|
|
|
|
|
|
|
#include "./object.hpp"
|
|
|
|
#include "./fwd.hpp"
|
|
|
|
|
2017-09-14 01:39:38 +10:00
|
|
|
#include <cruft/util/view.hpp>
|
|
|
|
|
|
|
|
#include <cstddef>
|
|
|
|
|
|
|
|
|
2017-05-26 16:30:48 +10:00
|
|
|
namespace cruft::vk {
|
2017-09-14 01:39:38 +10:00
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
struct map_t : public util::view<std::byte*> {
|
|
|
|
public:
|
|
|
|
using view::view;
|
|
|
|
|
2018-01-16 15:12:54 +11:00
|
|
|
map_t (const map_t&) = delete;
|
2017-09-14 01:39:38 +10:00
|
|
|
~map_t ();
|
|
|
|
|
2018-01-16 15:12:54 +11:00
|
|
|
map_t& operator= (const map_t&) = delete;
|
|
|
|
map_t& operator= (std::nullptr_t);
|
|
|
|
|
2017-09-14 01:39:38 +10:00
|
|
|
void destroy (device&, device_memory&);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
map_t map (device&, device_memory&, int len);
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
struct owned_map_t : public map_t {
|
|
|
|
owned_map_t (owned_ptr<device_memory>&, std::byte *first, std::byte *last);
|
|
|
|
~owned_map_t ();
|
|
|
|
|
|
|
|
void destroy (void);
|
|
|
|
|
|
|
|
private:
|
|
|
|
owned_ptr<device_memory> &m_memory;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
owned_map_t map (owned_ptr<device_memory>&, int len);
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
2016-02-24 11:11:41 +11:00
|
|
|
struct device_memory : public owned<device_memory,device> {
|
2017-09-10 13:54:27 +10:00
|
|
|
using owned::owned;
|
|
|
|
|
2016-02-24 11:11:41 +11:00
|
|
|
void unmap (const device&);
|
|
|
|
|
|
|
|
VkDeviceSize commitment (const device&) const;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|