Skip to content
Snippets Groups Projects
Commit 9b6bacff authored by Lars Hoerttrich's avatar Lars Hoerttrich
Browse files

[#31] Changed searchMemoryType()-functions to avoid multiple declarations in...

[#31] Changed searchMemoryType()-functions to avoid multiple declarations in ImageManager and BufferManager. Now using the exact function  given in the vulkan specs to search for memory types to avoid licensing issues
parent 16d6d04a
No related branches found
No related tags found
1 merge request!32Resolve "Image-Klasse"
Pipeline #25267 passed
...@@ -28,28 +28,29 @@ namespace vkcv { ...@@ -28,28 +28,29 @@ namespace vkcv {
} }
/** /**
* @brief searches memory type index for buffer allocation, inspired by vulkan tutorial and "https://github.com/KhronosGroup/Vulkan-Hpp/blob/master/samples/utils/utils.hpp" * @brief searches memory type index for buffer allocation, combines requirements of buffer and application
* @param physicalMemoryProperties Memory Properties of physical device * @param physicalMemoryProperties Memory Properties of physical device
* @param typeBits * @param typeBits Bit field for suitable memory types
* @param requirements Property flags that are required * @param requirements Property flags that are required
* @return memory type index for Buffer * @return memory type index for Buffer
*/ */
uint32_t searchMemoryType(const vk::PhysicalDeviceMemoryProperties& physicalMemoryProperties, uint32_t typeBits, vk::MemoryPropertyFlags requirements) { uint32_t searchBufferMemoryType(const vk::PhysicalDeviceMemoryProperties& physicalMemoryProperties, uint32_t typeBits, vk::MemoryPropertyFlags requirements) {
uint32_t memoryTypeIndex = 0; const uint32_t memoryCount = physicalMemoryProperties.memoryTypeCount;
for (uint32_t memoryIndex = 0; memoryIndex < memoryCount; ++memoryIndex) {
for (uint32_t i = 0; i < physicalMemoryProperties.memoryTypeCount; i++) const uint32_t memoryTypeBits = (1 << memoryIndex);
{ const bool isRequiredMemoryType = typeBits & memoryTypeBits;
if ((typeBits & 1) &&
((physicalMemoryProperties.memoryTypes[i].propertyFlags & requirements) == requirements)) const vk::MemoryPropertyFlags properties =
{ physicalMemoryProperties.memoryTypes[memoryIndex].propertyFlags;
memoryTypeIndex = i; const bool hasRequiredProperties =
break; (properties & requirements) == requirements;
}
if (isRequiredMemoryType && hasRequiredProperties)
typeBits >>= 1; return static_cast<int32_t>(memoryIndex);
} }
return memoryTypeIndex; // failed to find memory type
return -1;
} }
uint64_t BufferManager::createBuffer(BufferType type, size_t size, BufferMemoryType memoryType) { uint64_t BufferManager::createBuffer(BufferType type, size_t size, BufferMemoryType memoryType) {
...@@ -103,7 +104,7 @@ namespace vkcv { ...@@ -103,7 +104,7 @@ namespace vkcv {
break; break;
} }
const uint32_t memoryTypeIndex = searchMemoryType( const uint32_t memoryTypeIndex = searchBufferMemoryType(
physicalDevice.getMemoryProperties(), physicalDevice.getMemoryProperties(),
requirements.memoryTypeBits, requirements.memoryTypeBits,
memoryTypeFlags memoryTypeFlags
......
...@@ -8,7 +8,14 @@ ...@@ -8,7 +8,14 @@
namespace vkcv { namespace vkcv {
uint32_t searchMemoryType(const vk::PhysicalDeviceMemoryProperties& physicalMemoryProperties, uint32_t typeBits, vk::MemoryPropertyFlags requirements) { /**
* @brief searches memory type index for image allocation, combines requirements of image and application
* @param physicalMemoryProperties Memory Properties of physical device
* @param typeBits Bit field for suitable memory types
* @param requirements Property flags that are required
* @return memory type index for image
*/
uint32_t searchImageMemoryType(const vk::PhysicalDeviceMemoryProperties& physicalMemoryProperties, uint32_t typeBits, vk::MemoryPropertyFlags requirements) {
const uint32_t memoryCount = physicalMemoryProperties.memoryTypeCount; const uint32_t memoryCount = physicalMemoryProperties.memoryTypeCount;
for (uint32_t memoryIndex = 0; memoryIndex < memoryCount; ++memoryIndex) { for (uint32_t memoryIndex = 0; memoryIndex < memoryCount; ++memoryIndex) {
const uint32_t memoryTypeBits = (1 << memoryIndex); const uint32_t memoryTypeBits = (1 << memoryIndex);
...@@ -75,7 +82,7 @@ namespace vkcv { ...@@ -75,7 +82,7 @@ namespace vkcv {
vk::MemoryPropertyFlags memoryTypeFlags = vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent; vk::MemoryPropertyFlags memoryTypeFlags = vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent;
bool mappable = false; bool mappable = false;
const uint32_t memoryTypeIndex = searchMemoryType( const uint32_t memoryTypeIndex = searchImageMemoryType(
physicalDevice.getMemoryProperties(), physicalDevice.getMemoryProperties(),
requirements.memoryTypeBits, requirements.memoryTypeBits,
memoryTypeFlags memoryTypeFlags
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment