Skip to content

Commit 0934c3b

Browse files
committed
fix: read budgetprops.heapBudget instead of heap.size when memory budget extension is available
1 parent 6784772 commit 0934c3b

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

ggml/src/ggml-vulkan/ggml-vulkan.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4336,7 +4336,7 @@ static void ggml_vk_instance_init() {
43364336

43374337
bool membudget_supported = false;
43384338
for (const auto & ext : extensionprops) {
4339-
if (std::string(ext.extensionName.data()) == VK_EXT_MEMORY_BUDGET_EXTENSION_NAME) {
4339+
if (strcmp(VK_EXT_MEMORY_BUDGET_EXTENSION_NAME, ext.extensionName) == 0) {
43404340
membudget_supported = true;
43414341
break;
43424342
}
@@ -11457,25 +11457,23 @@ void ggml_backend_vk_get_device_memory(int device, size_t * free, size_t * total
1145711457
GGML_ASSERT(device < (int) vk_instance.device_supports_membudget.size());
1145811458

1145911459
vk::PhysicalDevice vkdev = vk_instance.instance.enumeratePhysicalDevices()[vk_instance.device_indices[device]];
11460-
vk::PhysicalDeviceMemoryProperties memprops = vkdev.getMemoryProperties();
11461-
bool membudget_supported = vk_instance.device_supports_membudget[device];
11462-
1146311460
vk::PhysicalDeviceMemoryBudgetPropertiesEXT budgetprops;
11464-
vk::PhysicalDeviceMemoryProperties2 memprops2 = {};
11465-
11461+
vk::PhysicalDeviceMemoryProperties2 memprops = {};
11462+
bool membudget_supported = vk_instance.device_supports_membudget[device];
11463+
1146611464
if (membudget_supported) {
11467-
memprops2.pNext = &budgetprops;
11468-
vkdev.getMemoryProperties2(&memprops2);
11465+
memprops.pNext = &budgetprops;
1146911466
}
11467+
vkdev.getMemoryProperties2(&memprops);
1147011468

11471-
for (uint32_t i = 0; i < memprops.memoryHeapCount; ++i) {
11472-
const vk::MemoryHeap & heap = memprops.memoryHeaps[i];
11469+
for (uint32_t i = 0; i < memprops.memoryProperties.memoryHeapCount; ++i) {
11470+
const vk::MemoryHeap & heap = memprops.memoryProperties.memoryHeaps[i];
1147311471

1147411472
if (heap.flags & vk::MemoryHeapFlagBits::eDeviceLocal) {
1147511473
*total = heap.size;
1147611474

1147711475
if (membudget_supported && i < budgetprops.heapUsage.size()) {
11478-
*free = *total - budgetprops.heapUsage[i];
11476+
*free = budgetprops.heapBudget[i] - budgetprops.heapUsage[i];
1147911477
} else {
1148011478
*free = heap.size;
1148111479
}

0 commit comments

Comments
 (0)