17ec681f3Smrg/* 27ec681f3Smrg * Copyright 2021 Google LLC 37ec681f3Smrg * SPDX-License-Identifier: MIT 47ec681f3Smrg */ 57ec681f3Smrg 67ec681f3Smrg#include "vk_alloc.h" 77ec681f3Smrg 87ec681f3Smrg#include <stdlib.h> 97ec681f3Smrg 107ec681f3Smrg#if __STDC_VERSION__ >= 201112L && !defined(_MSC_VER) 117ec681f3Smrg#include <stddef.h> 127ec681f3Smrg#define MAX_ALIGN alignof(max_align_t) 137ec681f3Smrg#else 147ec681f3Smrg/* long double might be 128-bit, but our callers do not need that anyway(?) */ 157ec681f3Smrg#include <stdint.h> 167ec681f3Smrg#define MAX_ALIGN alignof(uint64_t) 177ec681f3Smrg#endif 187ec681f3Smrg 197ec681f3Smrgstatic VKAPI_ATTR void * VKAPI_CALL 207ec681f3Smrgvk_default_alloc(void *pUserData, 217ec681f3Smrg size_t size, 227ec681f3Smrg size_t alignment, 237ec681f3Smrg VkSystemAllocationScope allocationScope) 247ec681f3Smrg{ 257ec681f3Smrg assert(MAX_ALIGN % alignment == 0); 267ec681f3Smrg return malloc(size); 277ec681f3Smrg} 287ec681f3Smrg 297ec681f3Smrgstatic VKAPI_ATTR void * VKAPI_CALL 307ec681f3Smrgvk_default_realloc(void *pUserData, 317ec681f3Smrg void *pOriginal, 327ec681f3Smrg size_t size, 337ec681f3Smrg size_t alignment, 347ec681f3Smrg VkSystemAllocationScope allocationScope) 357ec681f3Smrg{ 367ec681f3Smrg assert(MAX_ALIGN % alignment == 0); 377ec681f3Smrg return realloc(pOriginal, size); 387ec681f3Smrg} 397ec681f3Smrg 407ec681f3Smrgstatic VKAPI_ATTR void VKAPI_CALL 417ec681f3Smrgvk_default_free(void *pUserData, void *pMemory) 427ec681f3Smrg{ 437ec681f3Smrg free(pMemory); 447ec681f3Smrg} 457ec681f3Smrg 467ec681f3Smrgconst VkAllocationCallbacks * 477ec681f3Smrgvk_default_allocator(void) 487ec681f3Smrg{ 497ec681f3Smrg static const VkAllocationCallbacks allocator = { 507ec681f3Smrg .pfnAllocation = vk_default_alloc, 517ec681f3Smrg .pfnReallocation = vk_default_realloc, 527ec681f3Smrg .pfnFree = vk_default_free, 537ec681f3Smrg }; 547ec681f3Smrg return &allocator; 557ec681f3Smrg} 56