Support VK_KHR_buffer_device_address but not VK_EXT_buffer_device_address

To avoid mess in the code. They are not identical! "EXT" version lacks flag VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT* flag.

Refers to #56
This commit is contained in:
Adam Sawicki 2020-03-25 10:34:05 +01:00
parent 204a810449
commit 3d1ce4ebb8
2 changed files with 15 additions and 15 deletions

View File

@ -50,7 +50,7 @@ Additional features:
- VK_EXT_memory_budget: Used internally if available to query for current usage and budget. If not available, it falls back to an estimation based on memory heap sizes. - VK_EXT_memory_budget: Used internally if available to query for current usage and budget. If not available, it falls back to an estimation based on memory heap sizes.
- VK_KHR_dedicated_allocation: Just enable it and it will be used automatically by the library. - VK_KHR_dedicated_allocation: Just enable it and it will be used automatically by the library.
- VK_AMD_device_coherent_memory - VK_AMD_device_coherent_memory
- VK_EXT_buffer_device_address / VK_KHR_buffer_device_address - VK_KHR_buffer_device_address
- Defragmentation of GPU and CPU memory: Let the library move data around to free some memory blocks and make your allocations better compacted. - Defragmentation of GPU and CPU memory: Let the library move data around to free some memory blocks and make your allocations better compacted.
- Lost allocations: Allocate memory with appropriate flags and let the library remove allocations that are not used for many frames to make room for new ones. - Lost allocations: Allocate memory with appropriate flags and let the library remove allocations that are not used for many frames to make room for new ones.
- Statistics: Obtain detailed statistics about the amount of memory used, unused, number of allocated blocks, number of allocations etc. - globally, per memory heap, and per memory type. - Statistics: Obtain detailed statistics about the amount of memory used, unused, number of allocated blocks, number of allocations etc. - globally, per memory heap, and per memory type.

View File

@ -1729,24 +1729,24 @@ accompanying this library.
\page enabling_buffer_device_address Enabling buffer device address \page enabling_buffer_device_address Enabling buffer device address
Device extensions VK_EXT_buffer_device_address / VK_KHR_buffer_device_address Device extension VK_KHR_buffer_device_address
allow to fetch raw GPU pointer to a buffer and pass it for usage in a shader code. allow to fetch raw GPU pointer to a buffer and pass it for usage in a shader code.
They are promoted to core Vulkan 1.2. It is promoted to core Vulkan 1.2.
If you want to use this feature in connection with VMA, follow these steps: If you want to use this feature in connection with VMA, follow these steps:
\section enabling_buffer_device_address_initialization Initialization \section enabling_buffer_device_address_initialization Initialization
1) (For Vulkan version < 1.2) Call `vkEnumerateDeviceExtensionProperties` for the physical device. 1) (For Vulkan version < 1.2) Call `vkEnumerateDeviceExtensionProperties` for the physical device.
Check if the extension is supported - if returned array of `VkExtensionProperties` contains "VK_EXT_buffer_device_address" Check if the extension is supported - if returned array of `VkExtensionProperties` contains
or "VK_KHR_buffer_device_address". "VK_KHR_buffer_device_address".
2) Call `vkGetPhysicalDeviceFeatures2` for the physical device instead of old `vkGetPhysicalDeviceFeatures`. 2) Call `vkGetPhysicalDeviceFeatures2` for the physical device instead of old `vkGetPhysicalDeviceFeatures`.
Attach additional structure `VkPhysicalDeviceBufferDeviceAddressFeatures*` to `VkPhysicalDeviceFeatures2::pNext` to be returned. Attach additional structure `VkPhysicalDeviceBufferDeviceAddressFeatures*` to `VkPhysicalDeviceFeatures2::pNext` to be returned.
Check if the device feature is really supported - check if `VkPhysicalDeviceBufferDeviceAddressFeatures*::bufferDeviceAddress` is true. Check if the device feature is really supported - check if `VkPhysicalDeviceBufferDeviceAddressFeatures*::bufferDeviceAddress` is true.
3) (For Vulkan version < 1.2) While creating device with `vkCreateDevice`, enable this extension - add "VK_EXT_buffer_device_address" 3) (For Vulkan version < 1.2) While creating device with `vkCreateDevice`, enable this extension - add
or "VK_KHR_buffer_device_address" to the list passed as `VkDeviceCreateInfo::ppEnabledExtensionNames`. "VK_KHR_buffer_device_address" to the list passed as `VkDeviceCreateInfo::ppEnabledExtensionNames`.
4) While creating the device, also don't set `VkDeviceCreateInfo::pEnabledFeatures`. 4) While creating the device, also don't set `VkDeviceCreateInfo::pEnabledFeatures`.
Fill in `VkPhysicalDeviceFeatures2` structure instead and pass it as `VkDeviceCreateInfo::pNext`. Fill in `VkPhysicalDeviceFeatures2` structure instead and pass it as `VkDeviceCreateInfo::pNext`.
@ -1759,11 +1759,11 @@ to VmaAllocatorCreateInfo::flags.
\section enabling_buffer_device_address_usage Usage \section enabling_buffer_device_address_usage Usage
After following steps described above, you can create buffers with `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT` using VMA. After following steps described above, you can create buffers with `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT*` using VMA.
The library automatically adds `VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR` to The library automatically adds `VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT*` to
allocated memory blocks wherever it might be needed. allocated memory blocks wherever it might be needed.
Please note that the library supports only `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT`. Please note that the library supports only `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT*`.
The second part of this functionality related to "capture and replay" is not supported, The second part of this functionality related to "capture and replay" is not supported,
as it is intended for usage in debugging tools like RenderDoc, not in everyday Vulkan usage. as it is intended for usage in debugging tools like RenderDoc, not in everyday Vulkan usage.
@ -1916,7 +1916,7 @@ available through VmaAllocatorCreateInfo::pRecordSettings.
// Defined to 1 when VK_KHR_buffer_device_address device extension or equivalent core Vulkan 1.2 feature is defined in its headers. // Defined to 1 when VK_KHR_buffer_device_address device extension or equivalent core Vulkan 1.2 feature is defined in its headers.
#if !defined(VMA_BUFFER_DEVICE_ADDRESS) #if !defined(VMA_BUFFER_DEVICE_ADDRESS)
#if VK_KHR_buffer_device_address || VK_EXT_buffer_device_address || VMA_VULKAN_VERSION >= 1002000 #if VK_KHR_buffer_device_address || VMA_VULKAN_VERSION >= 1002000
#define VMA_BUFFER_DEVICE_ADDRESS 1 #define VMA_BUFFER_DEVICE_ADDRESS 1
#else #else
#define VMA_BUFFER_DEVICE_ADDRESS 0 #define VMA_BUFFER_DEVICE_ADDRESS 0
@ -2061,12 +2061,12 @@ typedef enum VmaAllocatorCreateFlagBits {
You may set this flag only if you: You may set this flag only if you:
1. (For Vulkan version < 1.2) Found as available and enabled device extension 1. (For Vulkan version < 1.2) Found as available and enabled device extension
VK_EXT_buffer_device_address or VK_KHR_buffer_device_address. VK_KHR_buffer_device_address.
Those extensions are promoted to core Vulkan 1.2. This extension is promoted to core Vulkan 1.2.
2. Found as available and enabled device feature `VkPhysicalDeviceBufferDeviceAddressFeatures*::bufferDeviceAddress`. 2. Found as available and enabled device feature `VkPhysicalDeviceBufferDeviceAddressFeatures*::bufferDeviceAddress`.
When this flag is set, you can create buffers with `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT` using VMA. When this flag is set, you can create buffers with `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT*` using VMA.
The library automatically adds `VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR` to The library automatically adds `VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT*` to
allocated memory blocks wherever it might be needed. allocated memory blocks wherever it might be needed.
For more information, see documentation chapter \ref enabling_buffer_device_address. For more information, see documentation chapter \ref enabling_buffer_device_address.