diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/rhi/qrhi.cpp | 3 | ||||
-rw-r--r-- | src/gui/rhi/qrhivulkan.cpp | 19 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/gui/rhi/qrhi.cpp b/src/gui/rhi/qrhi.cpp index a52b953a37..701cecb3d1 100644 --- a/src/gui/rhi/qrhi.cpp +++ b/src/gui/rhi/qrhi.cpp @@ -7156,9 +7156,6 @@ QDebug operator<<(QDebug dbg, const QRhiStats &info) from the underlying memory allocator library. This gives an insight into the memory requirements of the active buffers and textures. - \warning Gathering some of the data may be an expensive operation, and - therefore the function must not be called at a high frequency. - Additional data, such as the total time in milliseconds spent in graphics and compute pipeline creation (which usually involves shader compilation or cache lookups, and potentially expensive processing) is available with most diff --git a/src/gui/rhi/qrhivulkan.cpp b/src/gui/rhi/qrhivulkan.cpp index 8a2982fbb8..01c0b40294 100644 --- a/src/gui/rhi/qrhivulkan.cpp +++ b/src/gui/rhi/qrhivulkan.cpp @@ -4312,15 +4312,20 @@ QRhiDriverInfo QRhiVulkan::driverInfo() const QRhiStats QRhiVulkan::statistics() { - VmaTotalStatistics stats; - vmaCalculateStatistics(toVmaAllocator(allocator), &stats); - QRhiStats result; result.totalPipelineCreationTime = totalPipelineCreationTime(); - result.blockCount = stats.total.statistics.blockCount; - result.allocCount = stats.total.statistics.allocationCount; - result.usedBytes = stats.total.statistics.allocationBytes; - result.unusedBytes = stats.total.statistics.blockBytes - stats.total.statistics.allocationBytes; + + VmaBudget budgets[VK_MAX_MEMORY_HEAPS]; + vmaGetHeapBudgets(toVmaAllocator(allocator), budgets); + + uint32_t count = toVmaAllocator(allocator)->GetMemoryHeapCount(); + for (uint32_t i = 0; i < count; ++i) { + const VmaStatistics &stats(budgets[i].statistics); + result.blockCount += stats.blockCount; + result.allocCount += stats.allocationCount; + result.usedBytes += stats.allocationBytes; + result.unusedBytes += stats.blockBytes - stats.allocationBytes; + } return result; } |