- Renaming GRHIGlobals.CurrentTextureMemorySize to GRHIGlobals.StreamingTextureMemorySizeInKB
- Renaming GRHIGlobals.CurrentRendertargetMemorySize to GRHIGlobals.NonStreamingTextureMemorySizeInKB
- Adding GRHIGlobals.BufferMemorySize and GRHIGlobals.UniformBufferMemorySize
- Deduplicating RHI stat accounting code and changing it to use RHI Descs.
- UE::RHICore::UpdateGlobalTextureStats is for StreamingTextureMemorySizeInKB and NonStreamingTextureMemorySizeInKB. This still allows platforms to control where the memory is counted.
- Adding more Buffer RHI stat accounting code to RHIs that were missing it.
- UE::RHICore::UpdateGlobalBufferStats is for BufferMemorySize and UniformBufferMemorySize.
- FillBaselineTextureMemoryStats initializes and fills the common members of FTextureMemoryStats.
- Adding ETextureCreateFlags::ForceIntoNonStreamingMemoryTracking which will force the texture to be counted in NonStreamingTextureMemorySizeInKB.
- Changing all RenderTargetPool textures to be flagged with ETextureCreateFlags::ForceIntoNonStreamingMemoryTracking so they aren't counted against streaming budgets.
- Adding UAV Texture stats instead of lumping them with regular textures
- Adding Buffer stats for ByteAddressBuffer, DrawIndirect and Misc
#jira UE-188415
#rb mihnea.balta, zach.bethel
[CL 26158700 by christopher waters in 5.3 branch]
* Moved dllexport from type to methods/staticvar in all Engine runtime code. This improves compile times, memory and performance in dll builds
[CL 26082288 by henrik karlsson in 5.3 branch]
* Changed type dllexport to method/staticvar dll export. Various changes for code that upgrade script get wrong
[CL 26082078 by henrik karlsson in 5.3 branch]
- Removed unnecessary virtuals.
- HeadMountedDisplay include paths were public but only needed to be private.
- Core and RHI need to be public dependencies.
- Formatting cleanup.
[CL 25792718 by christopher waters in ue5-main branch]
- FRHIBatchedShaderUnbinds acts like FRHIBatchedShaderParameters but doesn't need to collect pointers.
- The context code can also avoid any attempts to access the resource since we know it's always null.
- This change will let us easily remove Unbinds for RHIs that won't need them in the future, aka after the parameter batching is done once per draw.
- This addresses the bulk of unbind performance regressions but there is still some a minor regression in the single unbind case.
#jira UE-186381
#rb jeannoe.morissette
#preflight 646d3ec9f85111e06c4b696f
[CL 25622480 by christopher waters in ue5-main branch]
When global constant buffers are updated with pending data, only PS and VS were trying to upload to smaller buffers to avoid the overhead of a full copy. This set of smaller buffers was hardcoded which was causing performance regressions when the max constant buffer size was increased.
This change extends the sub buffer allocations to all shader stages and makes it more flexible on the subbuffer count when the max constant buffer size changes.
Increased the Max constant buffer size in D3D11 to 16*4096 from 2*4096.
Changed the D3D11 VSConstantBuffers/PSConstantBuffers/etc from an array of 1 to single pointers.
Removed a number of unnecessary variables from the constant buffer code.
#jira UE-182587
#rb mihnea.balta, stu.mckenna
#preflight 6462ab47cf788a25584d1e3b
[CL 25481457 by christopher waters in ue5-main branch]
Since FRHICommandListImmediate::ImmediateFlush() was calling FlushPendingDeletes() after executing the current list of commands, the lambda enqueued by that function was actually running as part of the next command list. Besides unnecessarily extending resource lifetimes, this also meant that the new command list started by flushing the deferred deletion queue, so anything added directly in there (instead of via another enqueued command) would be deleted before the commands were executed on the GPU. This was very easy to reproduce with -norhithread on DX12, because texture unlock operations add the staging buffer to the deferred deletion queue immediately, instead of enqueuing a command to do it, so the staging buffers were gone by the time the GPU tried to copy from them.
This changelist adds a boolean to RHISubmitCommandLists() which is true when we're flushing the immediate command list with the FlushRHIThreadFlushResources mode, so that the RHI can process the deletion queue internally after submission, instead of doing it in RHIPerFrameRHIFlushComplete(). I didn't want to move RHIPerFrameRHIFlushComplete() itself to another point in the timeline, because old RHIs (D3D11 and OpenGL) use that for other purposes, and it seems unwise to alter their behavior (e.g. D3D11 wants to resolve timing queries in there with a blocking wait, and running that at the end of the current command list would introduce a CPU/GPU sync point).
Also:
* deprecated FRHIResource::FlushPendingDeletes(), since all it does is call FlushPendingDeletes() on the command list being passed in, and code outside of the RHI really shouldn't be doing that.
* made FlushPendingDeleteRHIResources_RenderThread() flush the immediate command list instead of calling FlushPendingDeletes() directly
#jira UE-184426
#rnx
#preflight https://horde.devtools.epicgames.com/job/6455194d023fe5d3ad8faa64
#rb Luke.Thatcher
[CL 25423894 by mihnea balta in ue5-main branch]
Original PR only added functionality for d3d12. This CL includes support in d3d11 and Vulkan, and makes d3d11 and d3d12 use a cvar to store d3ddebug settings, rather than parsing the commandline directly into a bool. This makes debug device settings more consistent across RHIs and lets you enable d3ddebug from an ini file now. Also added GRHIGlobals.IsDebugLayerEnabled to make tracking whether or not we're using a debug device consistent and easy across all RHIs.
#review elizabeth.baumel, christopher.waters
#jira UE-182391
#preflight 644c64129c50ddcc0bff880b
[CL 25249712 by QRare in ue5-main branch]
Example usage added to Windows platform, allowing Windows platform extensions to override the default save system.
```
[PlatformFeatures]
SaveGameSystemModule=MySaveModule
```
#jira UE-143574, UE-179187
#rb Wojciech.Krywult
#preflight 6447ee14864f15ebf5c5bd01
[CL 25181389 by David Harvey in ue5-main branch]