Module: Mesa Branch: main Commit: d3acc73455536191682c38981b25a013332462ec URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3acc73455536191682c38981b25a013332462ec
Author: Chia-I Wu <[email protected]> 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 <[email protected]> Acked-by: Jason Ekstrand <[email protected]> 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, _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
