Release notes

Changelog

Version 1.66.0


Released 02 May 2025
APIRemoved developer option for using deprecated em behavior
APIChanged layout of constant buffer data for pixel shaders
APIUnreal EngineAdded 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 EngineAdded support for incremental garbage collection for Unreal Engine 5
EnhancementAdded Compositor and Surface Partitioning support for DirectX 12 in the Player application
EnhancementAdded an example blur filtering of a texture using a compute shader
EnhancementAdded a log message notifying that StylePropertyMap is not supported for SVG elements
EnhancementAdded DirectX 12 support to the default samples solution
EnhancementFixed unclosed profiling markers when using the default profiling backend on PC platforms
EnhancementUnreal EngineSimplify view initialization when using UMG widgets
EnhancementUnreal EngineEnsure virtual keyboard will not use the view or the InputProxy after InputBlur to prevent possible crashes
FixFixed a layout regression with incorrect handling of undefined dimensions
FixFixed crashes when data-bind-for iterator value is used in a single expression with other models
FixFixed crashes with null pointer parents during style solving when using the IInputProxy API
FixFixed hover and active pseudo-classes inside slotted and host brackets
FixFixed stale styling when adding an element that creates a complex selector match
FixFixed caret positioning in input and textarea elements when setting the value from JavaScript
FixUnityFixed accumulation of C# implementations of public interfaces until the library is unloaded
FixFixed localization sample for Nintendo Switch
FixUnityFixed input issues in the MadRabbits sample
FixFixed a resource leak of in the DirectX 11 backend
FixFixed performance regression in text rendering
FixFixed SVG border image rendering regression when SVG has no width and height
FixFixed SVG mask size when using relative units
FixFixed the calculation of em and rem units for inline SVG root element
FixFixed updating of inline SVG styles when the root font style changes
FixUnreal EngineUpdated Player starting scripts to list the available options
FixUnreal EngineFix possible unpainted frames when using UMG widgets and destroying the scene
FixUnreal EngineFix backdrop-filter on Mobile devices when MobileHDR is enabled
FixUnreal EngineFix assert when using shared render target textures and UMG on Sony platforms
FixUnreal EngineAdd missing lock in FCohTextureCollector::FindTexture
FixUnreal EngineInvalidate the IME Manager after deactivating and unregistering the Text Input Method Context, resolving a crash
FixUnreal EngineFixed issues with EnsureMeshData when running with OpenGL
FixUnreal EngineFixed selection issues when entering text with virtual keyboard
FixUnreal EngineFixed deleting the last character of the input field when using virtual keyboard
FixUnreal EngineFixed 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 LayoutCurrent Layout
  • Per Batch Data
    • float4 (optional, if shouldClip is true)
      • AA clipping data
    • float4s
      • Custom per batch data
  • Per Batch Data
    • float4 (optional, if shouldClip is true)
      • AA clipping data
    • float4
      • shouldClip
      • additionalFlags
      • Color matrix offset (-1 if there is no color matrix or one is not needed)
      • Padding
    • float4s
      • Custom per batch data
  • Per Command Data
    • float4
      • inColor / Custom per command data
    • float4
      • userData
      • additionalFlags
      • shouldClip
      • sharedCBOffset
  • Per Command Data
    • float4
      • sharedCBOffset
      • userData[3]
    • float4s
      • inColor / Custom per command data

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:

BeforeNowUsage
Data_PS[ps]Data_PS[ps + 1]inColor / Other custom per command data
Data_PS[ps + 1].xData_PS[ps].yuserData
Data_PS[ps + 1].yData_PS[sharedCBOffset + SHARED_PS_DATA_OFFSET].yadditionalFlags
Data_PS[ps + 1].zData_PS[sharedCBOffset + SHARED_PS_DATA_OFFSET].xshouldClip
Data_PS[ps + 1].wData_PS[ps].xsharedCBOffset
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].zuserData (unused for now)
Data_PS[ps].wuserData (unused for now)
Data_PS[sharedCBOffset + SHARED_PS_DATA_OFFSET].zColor matrix offset (-1 if none or not needed)
Data_PS[sharedCBOffset + SHARED_PS_DATA_OFFSET].wPadding (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