mirror of
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
synced 2024-11-10 10:41:52 +00:00
Improve internal fetching pointers to Vulkan functions to always use vkGetInstanceProcAddr/vkGetDeviceProcAddr
No longer refers to statically linked Vulkan functions. Removed configuration macro VMA_STATIC_VULKAN_FUNCTIONS. Hopefully will help for #56.
This commit is contained in:
parent
77b55b38f4
commit
954631ac2a
@ -87,7 +87,6 @@ Documentation of all members: vk_mem_alloc.h
|
|||||||
- [Simple patterns](@ref usage_patterns_simple)
|
- [Simple patterns](@ref usage_patterns_simple)
|
||||||
- [Advanced patterns](@ref usage_patterns_advanced)
|
- [Advanced patterns](@ref usage_patterns_advanced)
|
||||||
- \subpage configuration
|
- \subpage configuration
|
||||||
- [Pointers to Vulkan functions](@ref config_Vulkan_functions)
|
|
||||||
- [Custom host memory allocator](@ref custom_memory_allocator)
|
- [Custom host memory allocator](@ref custom_memory_allocator)
|
||||||
- [Device memory allocation callbacks](@ref allocation_callbacks)
|
- [Device memory allocation callbacks](@ref allocation_callbacks)
|
||||||
- [Device heap memory limit](@ref heap_memory_limit)
|
- [Device heap memory limit](@ref heap_memory_limit)
|
||||||
@ -1588,15 +1587,6 @@ custom implementation of the assertion, compatible with your project.
|
|||||||
By default it is defined to standard C `assert(expr)` in `_DEBUG` configuration
|
By default it is defined to standard C `assert(expr)` in `_DEBUG` configuration
|
||||||
and empty otherwise.
|
and empty otherwise.
|
||||||
|
|
||||||
\section config_Vulkan_functions Pointers to Vulkan functions
|
|
||||||
|
|
||||||
The library uses Vulkan functions straight from the `vulkan.h` header by default.
|
|
||||||
If you want to provide your own pointers to these functions, e.g. fetched using
|
|
||||||
`vkGetInstanceProcAddr()` and `vkGetDeviceProcAddr()`:
|
|
||||||
|
|
||||||
-# Define `VMA_STATIC_VULKAN_FUNCTIONS 0`.
|
|
||||||
-# Provide valid pointers through VmaAllocatorCreateInfo::pVulkanFunctions.
|
|
||||||
|
|
||||||
\section custom_memory_allocator Custom host memory allocator
|
\section custom_memory_allocator Custom host memory allocator
|
||||||
|
|
||||||
If you use custom allocator for CPU memory rather than default operator `new`
|
If you use custom allocator for CPU memory rather than default operator `new`
|
||||||
@ -2205,14 +2195,10 @@ typedef struct VmaAllocatorCreateInfo
|
|||||||
VK_AMD_memory_overallocation_behavior extension.
|
VK_AMD_memory_overallocation_behavior extension.
|
||||||
*/
|
*/
|
||||||
const VkDeviceSize* pHeapSizeLimit;
|
const VkDeviceSize* pHeapSizeLimit;
|
||||||
/** \brief Pointers to Vulkan functions. Can be null if you leave define `VMA_STATIC_VULKAN_FUNCTIONS 1`.
|
/** \brief Pointers to Vulkan functions. Can be null.
|
||||||
|
|
||||||
If you leave define `VMA_STATIC_VULKAN_FUNCTIONS 1` in configuration section,
|
|
||||||
you can pass null as this member, because the library will fetch pointers to
|
|
||||||
Vulkan functions internally in a static way, like:
|
|
||||||
|
|
||||||
vulkanFunctions.vkAllocateMemory = &vkAllocateMemory;
|
|
||||||
|
|
||||||
|
You can pass null as this member, because the library will fetch pointers to
|
||||||
|
Vulkan functions internally.
|
||||||
Fill this member if you want to provide your own pointers to Vulkan functions,
|
Fill this member if you want to provide your own pointers to Vulkan functions,
|
||||||
e.g. fetched using `vkGetInstanceProcAddr()` and `vkGetDeviceProcAddr()`.
|
e.g. fetched using `vkGetInstanceProcAddr()` and `vkGetDeviceProcAddr()`.
|
||||||
*/
|
*/
|
||||||
@ -3685,23 +3671,6 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyImage(
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
CONFIGURATION SECTION
|
CONFIGURATION SECTION
|
||||||
|
|
||||||
Define some of these macros before each #include of this header or change them
|
|
||||||
here if you need other then default behavior depending on your environment.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Define this macro to 1 to make the library fetch pointers to Vulkan functions
|
|
||||||
internally, like:
|
|
||||||
|
|
||||||
vulkanFunctions. = &vkAllocateMemory;
|
|
||||||
|
|
||||||
Define to 0 if you are going to provide you own pointers to Vulkan functions via
|
|
||||||
VmaAllocatorCreateInfo::pVulkanFunctions.
|
|
||||||
*/
|
|
||||||
#if !defined(VMA_STATIC_VULKAN_FUNCTIONS) && !defined(VK_NO_PROTOTYPES)
|
|
||||||
#define VMA_STATIC_VULKAN_FUNCTIONS 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Define this macro to 1 to make the library use STL containers instead of its own implementation.
|
// Define this macro to 1 to make the library use STL containers instead of its own implementation.
|
||||||
//#define VMA_USE_STL_CONTAINERS 1
|
//#define VMA_USE_STL_CONTAINERS 1
|
||||||
|
|
||||||
@ -15282,24 +15251,40 @@ VmaAllocator_T::~VmaAllocator_T()
|
|||||||
|
|
||||||
void VmaAllocator_T::ImportVulkanFunctions(const VmaVulkanFunctions* pVulkanFunctions)
|
void VmaAllocator_T::ImportVulkanFunctions(const VmaVulkanFunctions* pVulkanFunctions)
|
||||||
{
|
{
|
||||||
#if VMA_STATIC_VULKAN_FUNCTIONS == 1
|
m_VulkanFunctions.vkGetPhysicalDeviceProperties =
|
||||||
m_VulkanFunctions.vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)vkGetPhysicalDeviceProperties;
|
(PFN_vkGetPhysicalDeviceProperties)vkGetInstanceProcAddr(m_hInstance, "vkGetPhysicalDeviceProperties");
|
||||||
m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)vkGetPhysicalDeviceMemoryProperties;
|
m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties =
|
||||||
m_VulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkAllocateMemory;
|
(PFN_vkGetPhysicalDeviceMemoryProperties)vkGetInstanceProcAddr(m_hInstance, "vkGetPhysicalDeviceMemoryProperties");
|
||||||
m_VulkanFunctions.vkFreeMemory = (PFN_vkFreeMemory)vkFreeMemory;
|
m_VulkanFunctions.vkAllocateMemory =
|
||||||
m_VulkanFunctions.vkMapMemory = (PFN_vkMapMemory)vkMapMemory;
|
(PFN_vkAllocateMemory)vkGetDeviceProcAddr(m_hDevice, "vkAllocateMemory");
|
||||||
m_VulkanFunctions.vkUnmapMemory = (PFN_vkUnmapMemory)vkUnmapMemory;
|
m_VulkanFunctions.vkFreeMemory =
|
||||||
m_VulkanFunctions.vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)vkFlushMappedMemoryRanges;
|
(PFN_vkFreeMemory)vkGetDeviceProcAddr(m_hDevice, "vkFreeMemory");
|
||||||
m_VulkanFunctions.vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)vkInvalidateMappedMemoryRanges;
|
m_VulkanFunctions.vkMapMemory =
|
||||||
m_VulkanFunctions.vkBindBufferMemory = (PFN_vkBindBufferMemory)vkBindBufferMemory;
|
(PFN_vkMapMemory)vkGetDeviceProcAddr(m_hDevice, "vkMapMemory");
|
||||||
m_VulkanFunctions.vkBindImageMemory = (PFN_vkBindImageMemory)vkBindImageMemory;
|
m_VulkanFunctions.vkUnmapMemory =
|
||||||
m_VulkanFunctions.vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)vkGetBufferMemoryRequirements;
|
(PFN_vkUnmapMemory)vkGetDeviceProcAddr(m_hDevice, "vkUnmapMemory");
|
||||||
m_VulkanFunctions.vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)vkGetImageMemoryRequirements;
|
m_VulkanFunctions.vkFlushMappedMemoryRanges =
|
||||||
m_VulkanFunctions.vkCreateBuffer = (PFN_vkCreateBuffer)vkCreateBuffer;
|
(PFN_vkFlushMappedMemoryRanges)vkGetDeviceProcAddr(m_hDevice, "vkFlushMappedMemoryRanges");
|
||||||
m_VulkanFunctions.vkDestroyBuffer = (PFN_vkDestroyBuffer)vkDestroyBuffer;
|
m_VulkanFunctions.vkInvalidateMappedMemoryRanges =
|
||||||
m_VulkanFunctions.vkCreateImage = (PFN_vkCreateImage)vkCreateImage;
|
(PFN_vkInvalidateMappedMemoryRanges)vkGetDeviceProcAddr(m_hDevice, "vkInvalidateMappedMemoryRanges");
|
||||||
m_VulkanFunctions.vkDestroyImage = (PFN_vkDestroyImage)vkDestroyImage;
|
m_VulkanFunctions.vkBindBufferMemory =
|
||||||
m_VulkanFunctions.vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)vkCmdCopyBuffer;
|
(PFN_vkBindBufferMemory)vkGetDeviceProcAddr(m_hDevice, "vkBindBufferMemory");
|
||||||
|
m_VulkanFunctions.vkBindImageMemory =
|
||||||
|
(PFN_vkBindImageMemory)vkGetDeviceProcAddr(m_hDevice, "vkBindImageMemory");
|
||||||
|
m_VulkanFunctions.vkGetBufferMemoryRequirements =
|
||||||
|
(PFN_vkGetBufferMemoryRequirements)vkGetDeviceProcAddr(m_hDevice, "vkGetBufferMemoryRequirements");
|
||||||
|
m_VulkanFunctions.vkGetImageMemoryRequirements =
|
||||||
|
(PFN_vkGetImageMemoryRequirements)vkGetDeviceProcAddr(m_hDevice, "vkGetImageMemoryRequirements");
|
||||||
|
m_VulkanFunctions.vkCreateBuffer =
|
||||||
|
(PFN_vkCreateBuffer)vkGetDeviceProcAddr(m_hDevice, "vkCreateBuffer");
|
||||||
|
m_VulkanFunctions.vkDestroyBuffer =
|
||||||
|
(PFN_vkDestroyBuffer)vkGetDeviceProcAddr(m_hDevice, "vkDestroyBuffer");
|
||||||
|
m_VulkanFunctions.vkCreateImage =
|
||||||
|
(PFN_vkCreateImage)vkGetDeviceProcAddr(m_hDevice, "vkCreateImage");
|
||||||
|
m_VulkanFunctions.vkDestroyImage =
|
||||||
|
(PFN_vkDestroyImage)vkGetDeviceProcAddr(m_hDevice, "vkDestroyImage");
|
||||||
|
m_VulkanFunctions.vkCmdCopyBuffer =
|
||||||
|
(PFN_vkCmdCopyBuffer)vkGetDeviceProcAddr(m_hDevice, "vkCmdCopyBuffer");
|
||||||
#if VMA_VULKAN_VERSION >= 1001000
|
#if VMA_VULKAN_VERSION >= 1001000
|
||||||
if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0))
|
if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0))
|
||||||
{
|
{
|
||||||
@ -15357,7 +15342,6 @@ void VmaAllocator_T::ImportVulkanFunctions(const VmaVulkanFunctions* pVulkanFunc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // #if VMA_MEMORY_BUDGET
|
#endif // #if VMA_MEMORY_BUDGET
|
||||||
#endif // #if VMA_STATIC_VULKAN_FUNCTIONS == 1
|
|
||||||
|
|
||||||
#define VMA_COPY_IF_NOT_NULL(funcName) \
|
#define VMA_COPY_IF_NOT_NULL(funcName) \
|
||||||
if(pVulkanFunctions->funcName != VMA_NULL) m_VulkanFunctions.funcName = pVulkanFunctions->funcName;
|
if(pVulkanFunctions->funcName != VMA_NULL) m_VulkanFunctions.funcName = pVulkanFunctions->funcName;
|
||||||
|
Loading…
Reference in New Issue
Block a user