summaryrefslogtreecommitdiffstats
path: root/src/gui/rhi
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2022-10-17 13:49:49 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2022-10-20 16:05:25 +0200
commit8f985af8b11b6c5d96ceabb3668077f3ee6ca39d (patch)
treefdbb7bea0c1951a83a127a67b3786eda1c8a062d /src/gui/rhi
parent8cf4f9c449e03c4138b14222e4a950c139ba16de (diff)
rhi: vk: Switch to cheaper VMA statistics API
Now that we upgraded to 3.0.1 vmaCalculateStatistics can be replaced with a less-expensive call. Change-Id: Icb444354ce9e091cf69f82aff2e2f828b8302072 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/gui/rhi')
-rw-r--r--src/gui/rhi/qrhi.cpp3
-rw-r--r--src/gui/rhi/qrhivulkan.cpp19
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;
}