Release notes
On this page
Changelog
Version 1.66.0
Released 02 May 2025
API | Removed developer option for using deprecated em behavior |
API | Changed layout of constant buffer data for pixel shaders |
APIUnreal Engine | Added support for the incremental garbage collection in Unreal Engine 5. Projects leveraging Unreal Engine 4.27 will have the plugin files modified during project generation |
FeatureUnreal Engine | Added support for incremental garbage collection for Unreal Engine 5 |
Enhancement | Added Compositor and Surface Partitioning support for DirectX 12 in the Player application |
Enhancement | Added an example blur filtering of a texture using a compute shader |
Enhancement | Added a log message notifying that StylePropertyMap is not supported for SVG elements |
Enhancement | Added DirectX 12 support to the default samples solution |
Enhancement | Fixed unclosed profiling markers when using the default profiling backend on PC platforms |
EnhancementUnreal Engine | Simplify view initialization when using UMG widgets |
EnhancementUnreal Engine | Ensure virtual keyboard will not use the view or the InputProxy after InputBlur to prevent possible crashes |
Fix | Fixed a layout regression with incorrect handling of undefined dimensions |
Fix | Fixed crashes when data-bind-for iterator value is used in a single expression with other models |
Fix | Fixed crashes with null pointer parents during style solving when using the IInputProxy API |
Fix | Fixed hover and active pseudo-classes inside slotted and host brackets |
Fix | Fixed stale styling when adding an element that creates a complex selector match |
Fix | Fixed caret positioning in input and textarea elements when setting the value from JavaScript |
FixUnity | Fixed accumulation of C# implementations of public interfaces until the library is unloaded |
Fix | Fixed localization sample for Nintendo Switch |
FixUnity | Fixed input issues in the MadRabbits sample |
Fix | Fixed a resource leak of in the DirectX 11 backend |
Fix | Fixed performance regression in text rendering |
Fix | Fixed SVG border image rendering regression when SVG has no width and height |
Fix | Fixed SVG mask size when using relative units |
Fix | Fixed the calculation of em and rem units for inline SVG root element |
Fix | Fixed updating of inline SVG styles when the root font style changes |
FixUnreal Engine | Updated Player starting scripts to list the available options |
FixUnreal Engine | Fix possible unpainted frames when using UMG widgets and destroying the scene |
FixUnreal Engine | Fix backdrop-filter on Mobile devices when MobileHDR is enabled |
FixUnreal Engine | Fix assert when using shared render target textures and UMG on Sony platforms |
FixUnreal Engine | Add missing lock in FCohTextureCollector::FindTexture |
FixUnreal Engine | Invalidate the IME Manager after deactivating and unregistering the Text Input Method Context, resolving a crash |
FixUnreal Engine | Fixed issues with EnsureMeshData when running with OpenGL |
FixUnreal Engine | Fixed selection issues when entering text with virtual keyboard |
FixUnreal Engine | Fixed deleting the last character of the input field when using virtual keyboard |
FixUnreal Engine | Fixed possible crash in FCohRenoirBackend::ReadTexture |
Migration guide
Pixel Shader Changes
Changes to the Data_PS
constant buffer data layout
With the new release, our Pixel Shader (PS) Constant Buffer Data_PS
has had its data layout altered to accommodate more flexible per command data storage. All custom shaders accessing elements from the CB will have to be modified to use the correct elements.
Previous Layout | Current Layout |
---|---|
|
|
|
|
Previous constant buffer offsets usage example:
int vs, ps, shaderType;
decode(input.VaryingData, vs, ps, shaderType);
// ps will point to the color that should be used for this pixel
// ps + 1 will point to a float4 that contains other per command data
float4 inColor = Data_PS[ps];
float4 perCommandData = Data_PS[++ps];
// perCommandData.w is the index of data used by several batched commands. The format
// of this shared data is custom for every command type.
int sharedCBOffset = int(perCommandData.w);
Current constant buffer offsets usage example:
int vs, ps, shaderType;
decode(input.VaryingData, vs, ps, shaderType);
// ps will point to a float4 that contains the shared CB offset and some per command user data
// ps + 1 will point to the color that should be used for this pixel
float4 perCommandData = Data_PS[ps];
float4 inColor = Data_PS[++ps];
// perCommandData.x is the index of data used by several batched commands. The format
// of this shared data is custom for every command type.
int sharedCBOffset = int(perCommandData.x);
Below is a table, mapping the Pixel Shader CB elements' previous and new location inside the Data_PS
CB along with their usage:
Before | Now | Usage |
---|---|---|
Data_PS[ps] | Data_PS[ps + 1] | inColor / Other custom per command data |
Data_PS[ps + 1].x | Data_PS[ps].y | userData |
Data_PS[ps + 1].y | Data_PS[sharedCBOffset + SHARED_PS_DATA_OFFSET].y | additionalFlags |
Data_PS[ps + 1].z | Data_PS[sharedCBOffset + SHARED_PS_DATA_OFFSET].x | shouldClip |
Data_PS[ps + 1].w | Data_PS[ps].x | sharedCBOffset |
Data_PS[sharedCBOffset] | Data_PS[sharedCBOffset] | Custom per batch data |
Data_PS[sharedCBOffset + SHARED_PS_DATA_OFFSET] | Data_PS[sharedCBOffset + SHARED_PS_AA_CLIPPING_DATA_OFFSET] | AA clipping data (optional, if shouldClip is true) |
Data_PS[ps].z | userData (unused for now) | |
Data_PS[ps].w | userData (unused for now) | |
Data_PS[sharedCBOffset + SHARED_PS_DATA_OFFSET].z | Color matrix offset (-1 if none or not needed) | |
Data_PS[sharedCBOffset + SHARED_PS_DATA_OFFSET].w | Padding (unused for now) |
The SHARED_PS_DATA_OFFSET
, which was used to calculate the offset of the AA Clipping data, will now be used to find the initial per batch data(containing the shouldClip
, additional flags and the color matrix offset), while a new offset called SHARED_PS_AA_CLIPPING_DATA_OFFSET
will be used for the original purpose.
Before:
/* CohClipMasking.ihlsl */
#define SHARED_PS_DATA_OFFSET -1
Now:
/* CohCommonPS.ihlsl */
#define SHARED_PS_DATA_OFFSET -1
#define SHARED_PS_AA_CLIPPING_DATA_OFFSET -2