Thanks, this confirms that what I am currently doing in my code is correct.
I traced this back all the way to engine startup:
FEngineLoop::PreInit → RHIInit → PlatformCreateDynamicRHI → LoadDynamicRHIModule
and it’s a complex thing. It sure doesn’t look like it is meant to be modified later on.
I’m pretty sure some games allow swapping DX versions during gameplay without a restart but I can think of quite a few which don’t.
I assume this means I should just implement a user friendly way to notify that the game needs a restart.