Skip to content

feat(graphics,egfx): add progressive RFX server encode and mixed-codec frames#1198

Open
Greg Lamberson (glamberson) wants to merge 3 commits intoDevolutions:masterfrom
lamco-admin:feat/progressive-rfx-encode
Open

feat(graphics,egfx): add progressive RFX server encode and mixed-codec frames#1198
Greg Lamberson (glamberson) wants to merge 3 commits intoDevolutions:masterfrom
lamco-admin:feat/progressive-rfx-encode

Conversation

@glamberson
Copy link
Copy Markdown
Contributor

Depends on #1197.
Part of the multi-codec EGFX implementation described in #1158 (Section 4).

Summary

Add server-side progressive encode pipeline and multi-codec frame support.

ironrdp-graphics: Progressive RFX encoder producing first-pass and upgrade-pass tile data via forward DWT + SRL quantization. Quality level control for adaptive bandwidth usage.

ironrdp-egfx: send_remotefx_progressive_frame() for WireToSurface2 progressive transmission. MixedTilePayload enum and send_mixed_frame() for combining ClearCodec + Progressive RFX tiles in a single StartFrame/EndFrame pair.

Changes

2 files, 510 lines.

Test plan

  • All 5 xtask gates pass
  • Encode pipeline has inline unit tests

Add progressive RemoteFX decode pipeline and wire it into the EGFX
client and server:

ironrdp-graphics: Progressive decode algorithms (first-pass and
upgrade-pass coefficient reconstruction via SRL + inverse DWT),
tile state tracking for multi-pass refinement, surface-level tile
management with automatic quality progression.

ironrdp-egfx: WireToSurface2 dispatch for progressive codec in
GraphicsPipelineClient. Progressive surface state stored on the
server for multi-pass frame scheduling.
@glamberson Greg Lamberson (glamberson) force-pushed the feat/progressive-rfx-encode branch 2 times, most recently from cdd7b0d to 0a78aa2 Compare April 6, 2026 05:01
The merged progressive primitives PR (Devolutions#1196) added validation that
a ProgressiveRegion must contain at least one rectangle. The test
used an empty rects vec which now fails decoding.
…c frames

Add server-side progressive encode pipeline and multi-codec frame
support:

ironrdp-graphics: Progressive RFX encoder producing first-pass and
upgrade-pass tile data via forward DWT + SRL quantization. Quality
level control for adaptive bandwidth usage.

ironrdp-egfx: send_remotefx_progressive_frame() for WireToSurface2
progressive transmission. MixedTilePayload enum and send_mixed_frame()
for combining ClearCodec + Progressive RFX tiles in a single
StartFrame/EndFrame pair.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants