diff --git a/Dalamud/Interface/Internal/DalamudInterface.cs b/Dalamud/Interface/Internal/DalamudInterface.cs index 9c55b6452..68393bfa5 100644 --- a/Dalamud/Interface/Internal/DalamudInterface.cs +++ b/Dalamud/Interface/Internal/DalamudInterface.cs @@ -849,7 +849,12 @@ internal class DalamudInterface : IDisposable, IServiceType ImGui.BeginMenu(Util.GetGitHash(), false); ImGui.BeginMenu(this.FrameCount.ToString("000000"), false); ImGui.BeginMenu(ImGui.GetIO().Framerate.ToString("000"), false); - ImGui.BeginMenu($"{Util.FormatBytes(GC.GetTotalMemory(false))}", false); + ImGui.BeginMenu($"W:{Util.FormatBytes(GC.GetTotalMemory(false))}", false); + + var videoMem = Service.Get().GetD3dMemoryInfo(); + ImGui.BeginMenu( + !videoMem.HasValue ? $"V:???" : $"V:{Util.FormatBytes(videoMem.Value.Used)}", + false); ImGui.PopFont(); } diff --git a/Dalamud/Interface/Internal/InterfaceManager.cs b/Dalamud/Interface/Internal/InterfaceManager.cs index 41bd8e9c7..650b1e00b 100644 --- a/Dalamud/Interface/Internal/InterfaceManager.cs +++ b/Dalamud/Interface/Internal/InterfaceManager.cs @@ -26,7 +26,6 @@ using ImGuiNET; using ImGuiScene; using PInvoke; using Serilog; -using SharpDX.Direct3D11; // general dev notes, here because it's easiest @@ -147,7 +146,7 @@ internal class InterfaceManager : IDisposable, IServiceType /// /// Gets the D3D11 device instance. /// - public Device? Device => this.scene?.Device; + public SharpDX.Direct3D11.Device? Device => this.scene?.Device; /// /// Gets the address handle to the main process window. @@ -409,6 +408,24 @@ internal class InterfaceManager : IDisposable, IServiceType this.deferredDisposeTextures.Add(wrap); } + /// + /// Get video memory information. + /// + /// The currently used video memory, or null if not available. + public (long Used, long Available)? GetD3dMemoryInfo() + { + if (this.Device == null) + return null; + + var dxgiDev = this.Device.QueryInterface(); + var dxgiAdapter = dxgiDev.Adapter.QueryInterfaceOrNull(); + if (dxgiAdapter == null) + return null; + + var memInfo = dxgiAdapter.QueryVideoMemoryInfo(0, SharpDX.DXGI.MemorySegmentGroup.Local); + return (memInfo.CurrentUsage, memInfo.CurrentReservation); + } + private static void ShowFontError(string path) { Util.Fatal($"One or more files required by XIVLauncher were not found.\nPlease restart and report this error if it occurs again.\n\n{path}", "Error");