diff options
author | bunnei <bunneidev@gmail.com> | 2020-04-08 23:35:07 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2020-04-17 06:59:31 +0200 |
commit | 4ba2428c86d95fdfe9c580dd62e4a94309a4661c (patch) | |
tree | 6f69c0be2baa02bd6d298a4c3dd6ee23cf21b41e /src/common/virtual_buffer.cpp | |
parent | kernel: errors: Add ERR_OUT_OF_RESOURCES. (diff) | |
download | yuzu-4ba2428c86d95fdfe9c580dd62e4a94309a4661c.tar yuzu-4ba2428c86d95fdfe9c580dd62e4a94309a4661c.tar.gz yuzu-4ba2428c86d95fdfe9c580dd62e4a94309a4661c.tar.bz2 yuzu-4ba2428c86d95fdfe9c580dd62e4a94309a4661c.tar.lz yuzu-4ba2428c86d95fdfe9c580dd62e4a94309a4661c.tar.xz yuzu-4ba2428c86d95fdfe9c580dd62e4a94309a4661c.tar.zst yuzu-4ba2428c86d95fdfe9c580dd62e4a94309a4661c.zip |
Diffstat (limited to 'src/common/virtual_buffer.cpp')
-rw-r--r-- | src/common/virtual_buffer.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/common/virtual_buffer.cpp b/src/common/virtual_buffer.cpp new file mode 100644 index 000000000..b426f4747 --- /dev/null +++ b/src/common/virtual_buffer.cpp @@ -0,0 +1,52 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#ifdef _WIN32 +#include <windows.h> +#else +#include <stdio.h> +#include <sys/mman.h> +#include <sys/types.h> +#if defined __APPLE__ || defined __FreeBSD__ || defined __OpenBSD__ +#include <sys/sysctl.h> +#elif defined __HAIKU__ +#include <OS.h> +#else +#include <sys/sysinfo.h> +#endif +#endif + +#include "common/assert.h" +#include "common/virtual_buffer.h" + +namespace Common { + +void* AllocateMemoryPages(std::size_t size) { +#ifdef _WIN32 + void* base{VirtualAlloc(nullptr, size, MEM_COMMIT, PAGE_READWRITE)}; +#else + void* base{mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0)}; + + if (base == MAP_FAILED) { + base = nullptr; + } +#endif + + ASSERT(base); + + return base; +} + +void FreeMemoryPages(void* base, std::size_t size) { + if (!base) { + return; + } +#ifdef _WIN32 + ASSERT(VirtualFree(base, 0, MEM_RELEASE)); +#else + ASSERT(munmap(base, size) == 0); +#endif +} + +} // namespace Common |