Dolphin, the GameCube and Wii emulator - Forums

Full Version: OpenGL - Fullscreen Exclusive under-utilizes the GPU
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
For some strange reason GPU usage (and FPS) decreases when engaging Fullscreen Exclusive mode compared to Windowed mode. Observed in Final Fantasy: Crystal Chronicles: My Life as a King with high resolution scaling (6x and 8x). Stand near & looking at the big blue crystal and toggling display mode with Alt-Enter should be sufficient enough to observe the variance.

https://www.youtube.com/watch?v=03GyWry33ws

Edit: It might be that GPU-Z and Task Manager both detect GPU usage the same way and are both wrong for the same reason. MSI Afterburner seems to better detect GPU usage.
Do you have a profile setup for Dolphin in the Nvidia Control Panel? You should set the Power Management Mode to "Prefer maximum performance" (and don't change anything else for Dolphin)
That's already been configured globally, I don't have Dolphin specific app profile.
It's probably vsync/vblank differences, everything is normal here.
I made a video showcasing it: https://www.youtube.com/watch?v=03GyWry33ws
I used Special_K in this recording to show GPU Usage below Dolphin's FPS indicator. I don't normally use Special_K with Dolphin. Original observation of GPU utilization was via Task Manager.

Edit: The issue happens regardless of the load on the GPU, the phenomena is however considerably more severe and more easily demonstrated in high GPU usage scenarios.
Edit 2: Configuration of Dolphin

Code:
[General]
ShowLag = False
ShowFrameCount = False
ISOPaths = 2
RecursiveISOPaths = True
NANDRootPath =
DumpPath =
WirelessMac =
WiiSDCardPath =
ISOPath0 =
ISOPath1 =
LastFilename =
UseGameCovers = True
UseDiscordPresence = False
GDBPort = -1
[Interface]
ConfirmStop = True
UsePanicHandlers = True
OnScreenDisplayMessages = True
HideCursor = False
MainWindowPosX = 173
MainWindowPosY = 316
MainWindowWidth = 776
MainWindowHeight = 600
LanguageCode =
ShowToolbar = True
ShowStatusbar = True
ShowLogWindow = False
ShowLogConfigWindow = False
ExtendedFPSInfo = False
ShowActiveTitle = True
UseBuiltinTitleDatabase = True
ShowDevelopmentWarning = True
ThemeName = Clean
PauseOnFocusLost = False
DisableTooltips = False
AutoHideCursor = False
Language = 0
ThemeName40 = Clean
DebugModeEnabled = False
LockCursor = False
[Display]
FullscreenResolution = 1920x1080
Fullscreen = False
RenderToMain = False
RenderWindowXPos = 929
RenderWindowYPos = 153
RenderWindowWidth = 914
RenderWindowHeight = 727
RenderWindowAutoSize = False
KeepWindowOnTop = False
DisableScreenSaver = True
ForceNTSCJ = False
ProgressiveScan = False
PAL60 = True
FullscreenDisplayRes = Auto
[GameList]
ListDrives = False
ListWad = True
ListElfDol = True
ListWii = True
ListGC = True
ListJap = True
ListPal = True
ListUsa = True
ListAustralia = True
ListFrance = True
ListGermany = True
ListItaly = True
ListKorea = True
ListNetherlands = True
ListRussia = True
ListSpain = True
ListTaiwan = True
ListWorld = True
ListUnknown = True
ListSort = 3
ListSortSecondary = 0
ColumnPlatform = True
ColumnBanner = True
ColumnDescription = False
ColumnTitle = True
ColumnNotes = True
ColumnFileName = False
ColumnID = False
ColumnRegion = True
ColumnSize = True
ColumnState = True
ColorCompressed = True
ColumnTags = False
ColumnFilePath = False
ColumnFileFormat = False
ColumnBlockSize = False
ColumnCompression = False
[Core]
SkipIPL = True
TimingVariance = 40
CPUCore = 1
Fastmem = True
CPUThread = True
DSPHLE = True
SyncOnSkipIdle = True
SyncGPU = True
SyncGpuMaxDistance = 200000
SyncGpuMinDistance = -200000
SyncGpuOverclock = 1.00000000
FPRF = False
AccurateNaNs = False
DefaultISO =
EnableCheats = True
SelectedLanguage = 0
OverrideGCLang = False
DPL2Decoder = False
AudioLatency = 2
AudioStretch = False
AudioStretchMaxLatency = 10
MemcardAPath =
MemcardBPath =
AgpCartAPath =
AgpCartBPath =
SlotA = 1
SlotB = 255
SerialPort1 = 255
BBA_MAC =
SIDevice0 = 6
AdapterRumble0 = True
SimulateKonga0 = False
SIDevice1 = 12
AdapterRumble1 = True
SimulateKonga1 = False
SIDevice2 = 12
AdapterRumble2 = True
SimulateKonga2 = False
SIDevice3 = 12
AdapterRumble3 = True
SimulateKonga3 = False
WiiSDCard = True
WiiKeyboard = True
WiimoteContinuousScanning = False
WiimoteEnableSpeaker = False
RunCompareServer = False
RunCompareClient = False
EmulationSpeed = 1.00000000
FrameSkip = 0x00000000
Overclock = 4.00000000
OverclockEnable = True
GFXBackend = OGL
GPUDeterminismMode = auto
PerfMapDir =
EnableCustomRTC = False
CustomRTCValue = 0x386d4380
EnableSignatureChecks = True
HLE_BS2 = False
SkipIdle = True
DVDRoot =
Apploader =
Latency = 2
AutoDiscChange = True
DPL2Quality = 2
OverrideRegionSettings = False
MMU = False
WiimoteControllerInterface = False
BBA_XLINK_IP = 127.0.0.1
BBA_XLINK_CHAT_OSD = True
FallbackRegion = 1
[Movie]
PauseMovie = False
Author =
DumpFrames = False
DumpFramesSilent = False
ShowInputDisplay = False
ShowRTC = False
[DSP]
EnableJIT = False
DumpAudio = False
DumpAudioSilent = False
DumpUCode = False
Backend = WASAPI (Exclusive Mode)
Volume = 10
CaptureLog = False
WASAPIDevice = default
[Input]
BackgroundInput = True
[FifoPlayer]
LoopReplay = True
[Analytics]
ID =
Enabled = True
PermissionAsked = True
[Network]
SSLDumpRead = False
SSLDumpWrite = False
SSLVerifyCertificates = True
SSLDumpRootCA = False
SSLDumpPeerCert = False
[BluetoothPassthrough]
Enabled = False
VID = -1
PID = -1
LinkKeys =
[USBPassthrough]
Devices =
[AutoUpdate]
UpdateTrack = beta
HashOverride =
[NetPlay]
TraversalChoice = direct
[Debug]
JitOff = False
JitLoadStoreOff = False
JitLoadStoreFloatingOff = False
JitLoadStorePairedOff = False
JitFloatingPointOff = False
JitIntegerOff = False
JitPairedOff = False
JitSystemRegistersOff = False
JitBranchOff = False
JitRegisterCacheOff = False
[GBA]
BIOS =
Rom1 =
Rom2 =
Rom3 =
Rom4 =
SavesInRomPath = False
SavesPath =
Threads = True
So, any other ideas on why Fullscreen Exclusive causes severe FPS drops and reduction of GPU utilization in demanding scenarios? It happens in multiple games, Metroid Prime 2 for example will drop to 55FPS in some niche situations in windowed mode and 40FPS in Fullscreen Exclusive in the same location.

And before you say to play in windowed/borderless fullscreen, I get anomalous frame pacing issues in that mode (visual stutter unrelated to FPS).

Is it really just a difference in how Vsync handles FPS below the refresh rate for OpenGL? Reducing by a flat 3rd as though Triple Buffering was in effect while Windowed mode doesn't do that?
(10-06-2021, 12:14 AM)Franpa Wrote: [ -> ]Is it really just a difference in how Vsync handles FPS below the refresh rate for OpenGL? Reducing by a flat 3rd as though Triple Buffering was in effect while Windowed mode doesn't do that?

If you have a 120 Hz monitor, then yes (120 divided by 3). But if you have a 60 Hz monitor, you should be getting either a flat 60 Hz or a flat 30 Hz with vsync.