1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright 2021 Google LLC
3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker */
5*61046927SAndroid Build Coastguard Worker
6*61046927SAndroid Build Coastguard Worker #include "vk_alloc.h"
7*61046927SAndroid Build Coastguard Worker
8*61046927SAndroid Build Coastguard Worker #include <stdlib.h>
9*61046927SAndroid Build Coastguard Worker
10*61046927SAndroid Build Coastguard Worker #ifndef _MSC_VER
11*61046927SAndroid Build Coastguard Worker #include <stddef.h>
12*61046927SAndroid Build Coastguard Worker #define MAX_ALIGN alignof(max_align_t)
13*61046927SAndroid Build Coastguard Worker #else
14*61046927SAndroid Build Coastguard Worker /* long double might be 128-bit, but our callers do not need that anyway(?) */
15*61046927SAndroid Build Coastguard Worker #include <stdint.h>
16*61046927SAndroid Build Coastguard Worker #define MAX_ALIGN alignof(uint64_t)
17*61046927SAndroid Build Coastguard Worker #endif
18*61046927SAndroid Build Coastguard Worker
19*61046927SAndroid Build Coastguard Worker static VKAPI_ATTR void * VKAPI_CALL
vk_default_alloc(void * pUserData,size_t size,size_t alignment,VkSystemAllocationScope allocationScope)20*61046927SAndroid Build Coastguard Worker vk_default_alloc(void *pUserData,
21*61046927SAndroid Build Coastguard Worker size_t size,
22*61046927SAndroid Build Coastguard Worker size_t alignment,
23*61046927SAndroid Build Coastguard Worker VkSystemAllocationScope allocationScope)
24*61046927SAndroid Build Coastguard Worker {
25*61046927SAndroid Build Coastguard Worker assert(MAX_ALIGN % alignment == 0);
26*61046927SAndroid Build Coastguard Worker return malloc(size);
27*61046927SAndroid Build Coastguard Worker }
28*61046927SAndroid Build Coastguard Worker
29*61046927SAndroid Build Coastguard Worker static VKAPI_ATTR void * VKAPI_CALL
vk_default_realloc(void * pUserData,void * pOriginal,size_t size,size_t alignment,VkSystemAllocationScope allocationScope)30*61046927SAndroid Build Coastguard Worker vk_default_realloc(void *pUserData,
31*61046927SAndroid Build Coastguard Worker void *pOriginal,
32*61046927SAndroid Build Coastguard Worker size_t size,
33*61046927SAndroid Build Coastguard Worker size_t alignment,
34*61046927SAndroid Build Coastguard Worker VkSystemAllocationScope allocationScope)
35*61046927SAndroid Build Coastguard Worker {
36*61046927SAndroid Build Coastguard Worker assert(MAX_ALIGN % alignment == 0);
37*61046927SAndroid Build Coastguard Worker return realloc(pOriginal, size);
38*61046927SAndroid Build Coastguard Worker }
39*61046927SAndroid Build Coastguard Worker
40*61046927SAndroid Build Coastguard Worker static VKAPI_ATTR void VKAPI_CALL
vk_default_free(void * pUserData,void * pMemory)41*61046927SAndroid Build Coastguard Worker vk_default_free(void *pUserData, void *pMemory)
42*61046927SAndroid Build Coastguard Worker {
43*61046927SAndroid Build Coastguard Worker free(pMemory);
44*61046927SAndroid Build Coastguard Worker }
45*61046927SAndroid Build Coastguard Worker
46*61046927SAndroid Build Coastguard Worker const VkAllocationCallbacks *
vk_default_allocator(void)47*61046927SAndroid Build Coastguard Worker vk_default_allocator(void)
48*61046927SAndroid Build Coastguard Worker {
49*61046927SAndroid Build Coastguard Worker static const VkAllocationCallbacks allocator = {
50*61046927SAndroid Build Coastguard Worker .pfnAllocation = vk_default_alloc,
51*61046927SAndroid Build Coastguard Worker .pfnReallocation = vk_default_realloc,
52*61046927SAndroid Build Coastguard Worker .pfnFree = vk_default_free,
53*61046927SAndroid Build Coastguard Worker };
54*61046927SAndroid Build Coastguard Worker return &allocator;
55*61046927SAndroid Build Coastguard Worker }
56