summaryrefslogtreecommitdiffstats
path: root/src/common/virtual_buffer.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-04-08 23:35:07 +0200
committerbunnei <bunneidev@gmail.com>2020-04-17 06:59:31 +0200
commit4ba2428c86d95fdfe9c580dd62e4a94309a4661c (patch)
tree6f69c0be2baa02bd6d298a4c3dd6ee23cf21b41e /src/common/virtual_buffer.cpp
parentkernel: errors: Add ERR_OUT_OF_RESOURCES. (diff)
downloadyuzu-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 '')
-rw-r--r--src/common/virtual_buffer.cpp52
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