Mesa (main): vulkan/util: add vk_default_allocator
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jun 3 09:11:35 UTC 2021
Module: Mesa
Branch: main
Commit: d3acc73455536191682c38981b25a013332462ec
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3acc73455536191682c38981b25a013332462ec
Author: Chia-I Wu <olvaffe at gmail.com>
Date: Tue Jun 1 09:30:04 2021 -0700
vulkan/util: add vk_default_allocator
We cannot use os_{malloc,free,realloc}_aligned because
os_realloc_aligned needs the old size (for memcpy).
v2: no max_align_t on MSVC
Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
Acked-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11117>
---
src/vulkan/util/meson.build | 1 +
src/vulkan/util/vk_alloc.c | 55 +++++++++++++++++++++++++++++++++++++++++++++
src/vulkan/util/vk_alloc.h | 4 ++++
3 files changed, 60 insertions(+)
diff --git a/src/vulkan/util/meson.build b/src/vulkan/util/meson.build
index 1a3723990bc..3865d68f6c0 100644
--- a/src/vulkan/util/meson.build
+++ b/src/vulkan/util/meson.build
@@ -40,6 +40,7 @@ vk_extensions_gen = files('vk_extensions_gen.py')
vk_icd_gen = files('vk_icd_gen.py')
files_vulkan_util = files(
+ 'vk_alloc.c',
'vk_alloc.h',
'vk_cmd_copy.c',
'vk_debug_report.c',
diff --git a/src/vulkan/util/vk_alloc.c b/src/vulkan/util/vk_alloc.c
new file mode 100644
index 00000000000..c687f92ae30
--- /dev/null
+++ b/src/vulkan/util/vk_alloc.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2021 Google LLC
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "vk_alloc.h"
+
+#include <stdlib.h>
+
+#if __STDC_VERSION__ >= 201112L && !defined(_MSC_VER)
+#include <stddef.h>
+#define MAX_ALIGN alignof(max_align_t)
+#else
+/* long double might be 128-bit, but our callers do not need that anyway(?) */
+#include <stdint.h>
+#define MAX_ALIGN alignof(uint64_t)
+#endif
+
+static VKAPI_ATTR void * VKAPI_CALL
+vk_default_alloc(void *pUserData,
+ size_t size,
+ size_t alignment,
+ VkSystemAllocationScope allocationScope)
+{
+ assert(MAX_ALIGN % alignment == 0);
+ return malloc(size);
+}
+
+static VKAPI_ATTR void * VKAPI_CALL
+vk_default_realloc(void *pUserData,
+ void *pOriginal,
+ size_t size,
+ size_t alignment,
+ VkSystemAllocationScope allocationScope)
+{
+ assert(MAX_ALIGN % alignment == 0);
+ return realloc(pOriginal, size);
+}
+
+static VKAPI_ATTR void VKAPI_CALL
+vk_default_free(void *pUserData, void *pMemory)
+{
+ free(pMemory);
+}
+
+const VkAllocationCallbacks *
+vk_default_allocator(void)
+{
+ static const VkAllocationCallbacks allocator = {
+ .pfnAllocation = vk_default_alloc,
+ .pfnReallocation = vk_default_realloc,
+ .pfnFree = vk_default_free,
+ };
+ return &allocator;
+}
diff --git a/src/vulkan/util/vk_alloc.h b/src/vulkan/util/vk_alloc.h
index e9842efa928..da8b14cdcf1 100644
--- a/src/vulkan/util/vk_alloc.h
+++ b/src/vulkan/util/vk_alloc.h
@@ -31,6 +31,10 @@
#include "util/u_math.h"
#include "util/macros.h"
+
+const VkAllocationCallbacks *
+vk_default_allocator(void);
+
static inline void *
vk_alloc(const VkAllocationCallbacks *alloc,
size_t size, size_t align,
More information about the mesa-commit
mailing list