To increase ENB performance, could you hardcode an option in the base enb binaries to disable ENB's option to keep the original game visual data before ENB injection? As I understand it, since ENB has the original frame cached, it hurts performance; why not just keep the modified frame by itself?
Since with DX11 data is copied twice to save data, wouldn't this optional tweak alone increase performance?
TES Skyrim SE 0.370
Forum rules
new topics are not allowed in this subsection, only replies.
new topics are not allowed in this subsection, only replies.
- Author
- Message
-
Offline
- *blah-blah-blah maniac*
- Posts: 17559
- Joined: 27 Dec 2011, 08:53
- Location: Rather not to say
Re: TES Skyrim SE 0.370
Not sure if i understood. If you mean toggling UseEffect by removing this and forcing always on, it will not help, because cost of performance is very tiny for such thing. Copying of constant buffers occur no matter what, this is how dx11 is done, against wrappers. Or rather to say how bethesda games done, with bottleneck to memory bandwidth. Here is explanation how it works: there is an object which respresent constants buffer, game have many of them and assing them to renderer. They contain data for shaders as arguments of shader function, like lights, colors or anything else. To modify constant buffers, game should call Lock function, do changes to provided buffer, then call Unlock function at the end. The only way to get data from that buffer is to give game fake buffer for writing or to read from written real buffer (but this may be very performance costly cause of no caching, so i dont do it). Game creates big constant buffers and not bother to do optimizations about not changing buffers if data is the same, so memory bandwidth required to apply extra copy is big enough to be visible as performance drop when there are many objects on the screen, like looking at the Riverwood.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
-
Offline
- Posts: 37
- Joined: 04 May 2018, 18:15
Re: TES Skyrim SE 0.370
What do you need decoded from the game engine to support per-weather settings?
-
Offline
- *blah-blah-blah maniac*
- Posts: 17559
- Joined: 27 Dec 2011, 08:53
- Location: Rather not to say
Re: TES Skyrim SE 0.370
Its not decoded, i need current weather id, outgoing weather id and weather transition. This can be retrived by native mod of the game with some weird tricks, but when tested in old skyrim, it often failed cause of how execution of scripts done, so i doubt it worth to bother again. On practice, the easiest way would be skse plugin, cause game update often and i'm not good at such things, but i dont think it worth to bother at all, because so few presets for old skyrim have weather system support.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
-
Offline
- Posts: 37
- Joined: 04 May 2018, 18:15
Re: TES Skyrim SE 0.370
I can write a SKSE plugin for that, but how do you want information passed to ENB?
-
Offline
- Posts: 25
- Joined: 05 Jan 2018, 15:00
Re: TES Skyrim SE 0.370
Is it possible to write an injector ENB for DX11, like how there was one for Oldrim which used DX9?ENBSeries wrote:Not sure if i understood. If you mean toggling UseEffect by removing this and forcing always on, it will not help, because cost of performance is very tiny for such thing. Copying of constant buffers occur no matter what, this is how dx11 is done, against wrappers. Or rather to say how bethesda games done, with bottleneck to memory bandwidth. Here is explanation how it works: there is an object which respresent constants buffer, game have many of them and assing them to renderer. They contain data for shaders as arguments of shader function, like lights, colors or anything else. To modify constant buffers, game should call Lock function, do changes to provided buffer, then call Unlock function at the end. The only way to get data from that buffer is to give game fake buffer for writing or to read from written real buffer (but this may be very performance costly cause of no caching, so i dont do it). Game creates big constant buffers and not bother to do optimizations about not changing buffers if data is the same, so memory bandwidth required to apply extra copy is big enough to be visible as performance drop when there are many objects on the screen, like looking at the Riverwood.
-
Offline
- *blah-blah-blah maniac*
- Posts: 17559
- Joined: 27 Dec 2011, 08:53
- Location: Rather not to say
Re: TES Skyrim SE 0.370
aers
Check PM.
Martimius
Possible, but its not in my plans, too much bother for no reason.
Check PM.
Martimius
Possible, but its not in my plans, too much bother for no reason.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
-
Offline
- Posts: 37
- Joined: 04 May 2018, 18:15
Re: TES Skyrim SE 0.370
Okay, I'll take a look.
BTW:
SkyrimSE.exe + 0x2F283D8 is pointer to Sky singleton object
Sky+0x48 is pointer to current TESWeather
Sky+0x50 is pointer to previous TESWeather during transition
Sky+0x58 is pointer to requested next TESWeather (if you open console and type "sw formID", this will turn to that weather, when it starts transitioning this is copied to current weather ptr)
FormID is UInt32 at TESWeather+0x14
Sky+0x1B8 is float value Transition amount
if 1.0 = no transition
if less than 1.0 = transitioning (this value is returned by GetCurrentWeatherTransition() Papyrus command, its same value)
when transitioning, current weather = new weather, previous weather = old weather
Dunno if you can use this directly.
BTW:
SkyrimSE.exe + 0x2F283D8 is pointer to Sky singleton object
Sky+0x48 is pointer to current TESWeather
Sky+0x50 is pointer to previous TESWeather during transition
Sky+0x58 is pointer to requested next TESWeather (if you open console and type "sw formID", this will turn to that weather, when it starts transitioning this is copied to current weather ptr)
FormID is UInt32 at TESWeather+0x14
Sky+0x1B8 is float value Transition amount
if 1.0 = no transition
if less than 1.0 = transitioning (this value is returned by GetCurrentWeatherTransition() Papyrus command, its same value)
when transitioning, current weather = new weather, previous weather = old weather
Dunno if you can use this directly.
-
Offline
- *blah-blah-blah maniac*
- Posts: 17559
- Joined: 27 Dec 2011, 08:53
- Location: Rather not to say
Re: TES Skyrim SE 0.370
I can't use directly anything, because game updated regulary.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
-
Offline
- Posts: 37
- Joined: 04 May 2018, 18:15
Re: TES Skyrim SE 0.370
Okay
I can release separate SKSE plugin that provides exported functions like GetCurrentWeather, GetOutgoingWeather, etc and you can just check for loaded module and call them if its loaded, would that work? People can just install it if they want those functions. Then I can update it independently if game updates.
I can release separate SKSE plugin that provides exported functions like GetCurrentWeather, GetOutgoingWeather, etc and you can just check for loaded module and call them if its loaded, would that work? People can just install it if they want those functions. Then I can update it independently if game updates.