org.lwjgl.vulkan.VkAllocationFunctionI Maven / Gradle / Ivy
Show all versions of lwjgl-vulkan Show documentation
/*
* Copyright LWJGL. All rights reserved.
* License terms: https://www.lwjgl.org/license
* MACHINE GENERATED FILE, DO NOT EDIT
*/
package org.lwjgl.vulkan;
import org.lwjgl.system.*;
import org.lwjgl.system.libffi.*;
import static org.lwjgl.system.APIUtil.*;
import static org.lwjgl.system.MemoryUtil.*;
import static org.lwjgl.system.libffi.LibFFI.*;
/**
* Application-defined memory allocation function.
*
* C Specification
*
* The type of {@code pfnAllocation} is:
*
*
* typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
* void* pUserData,
* size_t size,
* size_t alignment,
* VkSystemAllocationScope allocationScope);
*
* Description
*
* If {@code pfnAllocation} is unable to allocate the requested memory, it must return {@code NULL}. If the allocation was successful, it must return a valid pointer to memory allocation containing at least {@code size} bytes, and with the pointer value being a multiple of {@code alignment}.
*
* Note
*
* Correct Vulkan operation cannot be assumed if the application does not follow these rules.
*
* For example, {@code pfnAllocation} (or {@code pfnReallocation}) could cause termination of running Vulkan instance(s) on a failed allocation for debugging purposes, either directly or indirectly. In these circumstances, it cannot be assumed that any part of any affected {@code VkInstance} objects are going to operate correctly (even {@link VK10#vkDestroyInstance DestroyInstance}), and the application must ensure it cleans up properly via other means (e.g. process termination).
*
*
* If {@code pfnAllocation} returns {@code NULL}, and if the implementation is unable to continue correct processing of the current command without the requested allocation, it must treat this as a runtime error, and generate {@link VK10#VK_ERROR_OUT_OF_HOST_MEMORY ERROR_OUT_OF_HOST_MEMORY} at the appropriate time for the command in which the condition was detected, as described in Return Codes.
*
* If the implementation is able to continue correct processing of the current command without the requested allocation, then it may do so, and must not generate {@link VK10#VK_ERROR_OUT_OF_HOST_MEMORY ERROR_OUT_OF_HOST_MEMORY} as a result of this failed allocation.
*
* See Also
*
* {@link VkAllocationCallbacks}
*/
@FunctionalInterface
@NativeType("PFN_vkAllocationFunction")
public interface VkAllocationFunctionI extends CallbackI {
FFICIF CIF = apiCreateCIF(
apiStdcall(),
ffi_type_pointer,
ffi_type_pointer, ffi_type_pointer, ffi_type_pointer, ffi_type_uint32
);
@Override
default FFICIF getCallInterface() { return CIF; }
@Override
default void callback(long ret, long args) {
long __result = invoke(
memGetAddress(memGetAddress(args)),
memGetAddress(memGetAddress(args + POINTER_SIZE)),
memGetAddress(memGetAddress(args + 2 * POINTER_SIZE)),
memGetInt(memGetAddress(args + 3 * POINTER_SIZE))
);
apiClosureRetP(ret, __result);
}
/**
* Application-defined memory allocation function.
*
* @param pUserData the value specified for {@link VkAllocationCallbacks}{@code ::pUserData} in the allocator specified by the application.
* @param size the size in bytes of the requested allocation.
* @param alignment the requested alignment of the allocation in bytes and must be a power of two.
* @param allocationScope a {@code VkSystemAllocationScope} value specifying the allocation scope of the lifetime of the allocation, as described here.
*/
@NativeType("void *") long invoke(@NativeType("void *") long pUserData, @NativeType("size_t") long size, @NativeType("size_t") long alignment, @NativeType("VkSystemAllocationScope") int allocationScope);
}