Module: Mesa
Branch: master
Commit: 8dd54778fa0f2b27f453df56c2f62c17dfadd7e4
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8dd54778fa0f2b27f453df56c2f62c17dfadd7e4

Author: Samuel Iglesias Gonsálvez <[email protected]>
Date:   Wed Jan 13 11:17:54 2021 +0100

turnip: VK_EXT_memory_budget implementation

Signed-off-by: Samuel Iglesias Gonsálvez <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Hyunjun Ko <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8524>

---

 src/freedreno/vulkan/tu_device.c      | 41 +++++++++++++++++++++++++++++++++++
 src/freedreno/vulkan/tu_extensions.py |  1 +
 2 files changed, 42 insertions(+)

diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c
index e41b8bada9a..3fb76786e20 100644
--- a/src/freedreno/vulkan/tu_device.c
+++ b/src/freedreno/vulkan/tu_device.c
@@ -909,6 +909,24 @@ tu_get_system_heap_size()
    return available_ram;
 }
 
+static VkDeviceSize
+tu_get_budget_memory(struct tu_physical_device *physical_device)
+{
+   uint64_t heap_size = physical_device->heap.size;
+   uint64_t heap_used = physical_device->heap.used;
+   uint64_t sys_available;
+   ASSERTED bool has_available_memory =
+      os_get_available_system_memory(&sys_available);
+   assert(has_available_memory);
+
+   /*
+    * Let's not incite the app to starve the system: report at most 90% of
+    * available system memory.
+    */
+   uint64_t heap_available = sys_available * 9 / 10;
+   return MIN2(heap_size, heap_used + heap_available);
+}
+
 void
 tu_GetPhysicalDeviceMemoryProperties2(VkPhysicalDevice pdev,
                                       VkPhysicalDeviceMemoryProperties2 
*props2)
@@ -926,6 +944,29 @@ tu_GetPhysicalDeviceMemoryProperties2(VkPhysicalDevice 
pdev,
       VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
       VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
    props->memoryTypes[0].heapIndex = 0;
+
+   vk_foreach_struct(ext, props2->pNext)
+   {
+      switch (ext->sType) {
+      case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT: {
+         VkPhysicalDeviceMemoryBudgetPropertiesEXT *memory_budget_props =
+            (VkPhysicalDeviceMemoryBudgetPropertiesEXT *) ext;
+         memory_budget_props->heapUsage[0] = physical_device->heap.used;
+         memory_budget_props->heapBudget[0] = 
tu_get_budget_memory(physical_device);
+
+         /* The heapBudget and heapUsage values must be zero for array elements
+          * greater than or equal to 
VkPhysicalDeviceMemoryProperties::memoryHeapCount
+          */
+         for (unsigned i = 1; i < VK_MAX_MEMORY_HEAPS; i++) {
+            memory_budget_props->heapBudget[i] = 0u;
+            memory_budget_props->heapUsage[i] = 0u;
+         }
+         break;
+      }
+      default:
+         break;
+      }
+   }
 }
 
 static VkResult
diff --git a/src/freedreno/vulkan/tu_extensions.py 
b/src/freedreno/vulkan/tu_extensions.py
index d1fd461a532..63cb3b8e38d 100644
--- a/src/freedreno/vulkan/tu_extensions.py
+++ b/src/freedreno/vulkan/tu_extensions.py
@@ -102,6 +102,7 @@ EXTENSIONS = [
     Extension('VK_KHR_image_format_list',                 1, True),
     Extension('VK_KHR_depth_stencil_resolve',             1, True),
     Extension('VK_KHR_performance_query',                 1, 
'device->instance->debug_flags & TU_DEBUG_PERFC'),
+    Extension('VK_EXT_memory_budget',                     1, True),
 ]
 
 MAX_API_VERSION = VkVersion(MAX_API_VERSION)

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to