Skip to content
Snippets Groups Projects

Resolve "Image-Klasse"

Merged Ghost User requested to merge 31-image-klasse into develop
2 files
+ 28
20
Compare changes
  • Side-by-side
  • Inline
Files
2
  • 9b6bacff
    [#31] Changed searchMemoryType()-functions to avoid multiple declarations in... · 9b6bacff
    Lars Hoerttrich authored
    [#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
+ 19
18
@@ -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 typeBits
* @param typeBits Bit field for suitable memory types
* @param requirements Property flags that are required
* @return memory type index for Buffer
*/
uint32_t searchMemoryType(const vk::PhysicalDeviceMemoryProperties& physicalMemoryProperties, uint32_t typeBits, vk::MemoryPropertyFlags requirements) {
uint32_t memoryTypeIndex = 0;
for (uint32_t i = 0; i < physicalMemoryProperties.memoryTypeCount; i++)
{
if ((typeBits & 1) &&
((physicalMemoryProperties.memoryTypes[i].propertyFlags & requirements) == requirements))
{
memoryTypeIndex = i;
break;
}
typeBits >>= 1;
uint32_t searchBufferMemoryType(const vk::PhysicalDeviceMemoryProperties& physicalMemoryProperties, uint32_t typeBits, vk::MemoryPropertyFlags requirements) {
const uint32_t memoryCount = physicalMemoryProperties.memoryTypeCount;
for (uint32_t memoryIndex = 0; memoryIndex < memoryCount; ++memoryIndex) {
const uint32_t memoryTypeBits = (1 << memoryIndex);
const bool isRequiredMemoryType = typeBits & memoryTypeBits;
const vk::MemoryPropertyFlags properties =
physicalMemoryProperties.memoryTypes[memoryIndex].propertyFlags;
const bool hasRequiredProperties =
(properties & requirements) == requirements;
if (isRequiredMemoryType && hasRequiredProperties)
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) {
@@ -103,7 +104,7 @@ namespace vkcv {
break;
}
const uint32_t memoryTypeIndex = searchMemoryType(
const uint32_t memoryTypeIndex = searchBufferMemoryType(
physicalDevice.getMemoryProperties(),
requirements.memoryTypeBits,
memoryTypeFlags
Loading