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