@@ -573,6 +573,10 @@ namespace dxvk::hud {
573573 void HudMemoryStatsItem::update (dxvk::high_resolution_clock::time_point time) {
574574 for (uint32_t i = 0 ; i < m_memory.memoryHeapCount ; i++)
575575 m_heaps[i] = m_device->getMemoryStats (i);
576+
577+ // NV-DXVK start: report driver-side VRAM usage
578+ m_driverMemInfo = m_device->adapter ()->getMemoryHeapInfo ();
579+ // NV-DXVK end
576580 }
577581
578582
@@ -618,6 +622,30 @@ namespace dxvk::hud {
618622 position.y += 4 .0f ;
619623 }
620624
625+ // NV-DXVK start: report driver-side VRAM usage alongside DXVK's own allocator stats
626+ // "Vidmem heap" only counts memory that DXVK's own suballocator, this includes everything
627+ // the driver attributes to this process.
628+ const DxvkAdapterMemoryHeapInfo& driverHeap = m_driverMemInfo.heaps [i];
629+ VkDeviceSize driverUsedMib = driverHeap.memoryAllocated >> 20 ;
630+ VkDeviceSize driverBudgetMib = driverHeap.memoryBudget >> 20 ;
631+ uint64_t driverPercentage = driverBudgetMib ? (100 * driverUsedMib) / driverBudgetMib : 0 ;
632+
633+ std::string driverLabel = " Total VRAM:" ;
634+ std::string driverText = str::format (std::setfill (' ' ), std::setw (5 ),
635+ driverUsedMib, " / " , driverBudgetMib, " MB(" , driverPercentage, " %)" );
636+
637+ position.y += 20 .0f ;
638+ renderer.drawText (16 .0f ,
639+ { position.x , position.y },
640+ { 0 .6f , 1 .0f , 1 .0f , 1 .0f },
641+ driverLabel);
642+
643+ renderer.drawText (16 .0f ,
644+ { position.x + 168 .0f , position.y },
645+ { 1 .0f , 1 .0f , 1 .0f , 1 .0f },
646+ driverText);
647+ // NV-DXVK end
648+
621649 position.y += 16 .0f ;
622650 }
623651 }
0 commit comments