From d946ba28e3015435140e2326c4f84e09899e5b23 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Tue, 16 Oct 2018 09:04:57 -0400 Subject: [PATCH] Only call vkGetPhysicalDeviceMemoryProperties once --- include/renderer.h | 4 +++- src/renderer.cpp | 11 +++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/include/renderer.h b/include/renderer.h index b493850..7d66552 100644 --- a/include/renderer.h +++ b/include/renderer.h @@ -37,7 +37,7 @@ public: VkShaderModule createShader(const char* path); - uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties); + uint32_t findMemoryType(const uint32_t typeFilter, const VkMemoryPropertyFlags properties); void fillMeshBuffers(Mesh* mesh); void destroyMeshBuffers(Mesh* mesh); @@ -75,6 +75,8 @@ private: #endif VkPhysicalDevice physicalDevice_ = nullptr; + VkPhysicalDeviceMemoryProperties deviceMemoryProperties_ = {}; + VkDevice device_ = nullptr; struct { diff --git a/src/renderer.cpp b/src/renderer.cpp index 4b15513..fdf6589 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -278,12 +278,9 @@ VkShaderModule Renderer::createShader(const char* path) { return shaderModule; } -uint32_t Renderer::findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties) { - VkPhysicalDeviceMemoryProperties memProperties; - vkGetPhysicalDeviceMemoryProperties(physicalDevice_, &memProperties); - - for (uint32_t i = 0; i < memProperties.memoryTypeCount; i++) { - if ((typeFilter & (1 << i)) && (memProperties.memoryTypes[i].propertyFlags & properties) == properties) { +uint32_t Renderer::findMemoryType(const uint32_t typeFilter, const VkMemoryPropertyFlags properties) { + for (uint32_t i = 0; i < deviceMemoryProperties_.memoryTypeCount; i++) { + if ((typeFilter & (1 << i)) && (deviceMemoryProperties_.memoryTypes[i].propertyFlags & properties) == properties) { return i; } } @@ -440,6 +437,8 @@ void Renderer::createLogicalDevice() { delete[] physicalDevices; + vkGetPhysicalDeviceMemoryProperties(physicalDevice_, &deviceMemoryProperties_); + uint32_t queueFamilyPropertiesCount = 0; vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice_, &queueFamilyPropertiesCount, nullptr);