* Added BP functions to create all types of UTexture from their UTextureRenderTarget counterpart (except UTextureRenderTargetCubeArray, since we don't have much of anything available to produce these ATM, but there's no reason it shouldn't work)
* Fixed crash when trying to create a UTexture out of a UTextureRenderTarget with a non-supported format. The error is also appropriately reported to the user via blueprint message log, instead of a message box in the past
Misc:
* UTextureRenderTarget have to implement CanConvertToTexture to indicate if they are currently able to be converted to a texture (e.g. valid size, supported format, etc.)
* There's now a generic UpdateTexture and ConstructTexture function on UTextureRenderTarget that can be used to update an existing texture or create a new one
* D3D11 and D3D12's RHIReadSurfaceData now support reading from (cube) texture arrays
* Added R8G8 to FColor conversion (the missing .BA channels are filled with 0 and 255, respectively)
* Deprecated all redundant ReadPixels / ReadFloat16Pixels from child classes of FRenderTarget (FTextureResource, FTextureRenderTargetVolumeResource, FTextureRenderTarget2DArrayResource). Note that ReadPixels / ReadFloat16Pixels / ReadLinearColorPixels are now virtual to avoid this situation and yet allow FTextureRenderTargetVolumeResource to implement them in its own way (unlike all other implementations, it uses Read3DSurfaceFloatData internally)
* Fixed typo in FTextureRenderTargetVolumeResource::GetDisplayGamma(), which didn't take PF_R32_FORMAT into account
* Added FTextureSourceFormatInfo and GTextureSourceFormats, which provides information about the various supported formats in ETextureSourceFormat (similar to EPixelFormat and GPixelFormats)
#jira UE-194364
#rb jon.cain
#tests editor
[CL 28494190 by jonathan bard in ue5-main branch]
- It was generating UniformBuffer_BindlessResource_Member instead of BindlessResource_UniformBuffer_Member.
- The prefix needs to be applied to the full symbol name for correctly mapping the index against its resource in reflection.
#jira UE-195102
#rb jeannoe.morissette
[CL 28438928 by christopher waters in ue5-main branch]
- Removed old vertex-attribute centered buffers & useless translation code & replace with GPU-scene centric data
- Made the instance data persistent over scene proxy re-creates.
- Tracks per-instance data changes in the ISM & implement delta updates, remove need to call "MarkRenderStateDirty" for most instance updates
- Added preliminary ID-based interface for ISM such that users can forego needing to match the internals (e.g., remove swap, required when using indices).
- Unified the instance data use in the renderer (removed mix of old & new buffers and processing sites) - all code now sees orthogonalized transforms, the same as is in GPU-Scene.
- Added FInstanceSceneDataBuffers and moved instance data buffer arrays to that from the Primitive proxy
- Added FISMInstanceDataManager, which is responsible for tracking changes & dispatching updates. The ISMC owns one of these.
- Instance data update tasks are async and waits are only done when needed, e.g., for GPU-scene update moving this off RT and later in the frame.
- Added FInstanceDataSceneProxy, which is the owner of the scene data buffers and is updated by the manager by way if a shared reference with the primitive proxy.
- Removed FPerInstanceRenderData, ISMC::PerInstanceRenderData
- Removed FInstanceUpdateCmdBuffer
- Lumen, GPUScene, SceneCulling, RT, DF all now retrieve data from FInstanceSceneDataBuffers rather than a mix of previous buffers. All now use the primitive-relative space.
- Geometry Collection & Spline Mesh now manage FInstanceSceneDataBuffers, since they manipulate instance data in one way or another.
- Mass: contained re-implementations of significant internals of ISMC, converted to ID-based interface
- PCG: minor changes to avoid touching ISM internals.
#jira UE-191955,PLAY-11918
#rb jamie.hayes,jeremy.moore,jonathan.bard,krzysztof.narkowicz,mieszko.zielinski,julien.lheureux,zach.bethel,aleksander.netzel,yuriy.odonnell
[CL 28371398 by ola olsson in ue5-main branch]
- fix preprocess time stat - this was not accounting for time spent preprocessing jobs which subsequently hit in DDC or the job cache; required some rework to how stats are recorded (now all jobs will register with the shader compiler stats object, instead of only those that actually ran compilation)
- add option to skip dumping debug info for cache hits. having it enabled results in a deterministic set of debug information between runs, while having it disabled means only shaders which actually compile will output debug information (this is useful when used in conjunction with the shaderanalyzer tool)
#rb Jason.Nadro
[CL 28237563 by dan elksnitis in ue5-main branch]
[FYI] christopher.waters
Original CL Desc
-----------------------------------------------------------------
Instead of assuming the RootUniformBuffer is assigned to a specific slot, we should force it at code generation time.
#rb guillaume.abadie
[CL 28229982 by christopher waters in ue5-main branch]
* Inline array memory allocation added to low level preprocessor for output and various temporary buffers to reduce dynamic memory allocation and reallocation overhead. Saved 4.6%.
* FShaderPreprocessOutput::StripCode optimized to write to FString as TCHAR array, rather than using AppendChar (over 4x speedup). Saved 2.9%
* Shader source file cache now also stores stripped and ANSI converted source, to avoid need to convert and strip the source, plus allocating a copy is avoided. Saved 4.3%
* Uniform buffer structure declarations stored as ANSI converted source, avoiding convert and copy. Saved 4.9%
#rnx
#rb dan.elksnitis jason.nadro
[CL 28219741 by jason hoerner in ue5-main branch]