Skip to content

feat(egfx): add send_uncompressed_frame for V8 clients#1182

Open
Greg Lamberson (glamberson) wants to merge 1 commit intoDevolutions:masterfrom
lamco-admin:feat/egfx-send-uncompressed-frame
Open

feat(egfx): add send_uncompressed_frame for V8 clients#1182
Greg Lamberson (glamberson) wants to merge 1 commit intoDevolutions:masterfrom
lamco-admin:feat/egfx-send-uncompressed-frame

Conversation

@glamberson
Copy link
Copy Markdown
Contributor

Add send_uncompressed_frame() to GraphicsPipelineServer for sending raw pixel data through WireToSurface1 with Codec1Type::Uncompressed.

V8 clients support the EGFX graphics pipeline but not H.264 (AVC420/AVC444). Currently there's no server API to send EGFX frames to these clients. Without this, servers must fall back to legacy FastPath bitmap delivery, losing EGFX benefits: surface management, frame acknowledgment, QoE metrics, and ZGFX compression.

Follows the same pattern as send_avc420_frame and send_avc444_frame: readiness check, backpressure check, surface lookup, then the StartFrame + WireToSurface1 + EndFrame sequence.

Changes:

  • 1 file: crates/ironrdp-egfx/src/server.rs
  • 1 new public method: send_uncompressed_frame()
  • 51 lines added

All xtask checks pass (fmt, lints, tests).

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR expands server-side capabilities in two areas: EGFX frame sending for clients that don’t support H.264, and connection-time credential validation during the acceptor sequence.

Changes:

  • Add GraphicsPipelineServer::send_uncompressed_frame() to send raw pixels via WireToSurface1 with Codec1Type::Uncompressed.
  • Add a new CredentialValidator trait and plumb it into RdpServer to optionally validate client-provided credentials during connection setup.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 6 comments.

File Description
crates/ironrdp-egfx/src/server.rs Adds a new public API to queue an EGFX uncompressed frame via the StartFrame/WireToSurface1/EndFrame sequence.
crates/ironrdp-server/src/server.rs Introduces an optional credential validation hook and applies it during client_accepted.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@glamberson Greg Lamberson (glamberson) force-pushed the feat/egfx-send-uncompressed-frame branch from 5a303b8 to 9279ade Compare March 28, 2026 19:57
Add a method to GraphicsPipelineServer that sends raw pixel data
through WireToSurface1 with Codec1Type::Uncompressed. This enables
EGFX frame delivery to V8 clients that support the graphics pipeline
but not H.264 (AVC420/AVC444).

Follows the same pattern as send_avc420_frame and send_avc444_frame:
readiness check, backpressure check, surface lookup, StartFrame +
WireToSurface1 + EndFrame sequence.

Without this method, servers have no API to send EGFX frames to V8
clients and must fall back to legacy FastPath bitmap delivery, losing
EGFX benefits (surface management, frame acknowledgment, QoE metrics).
@glamberson Greg Lamberson (glamberson) force-pushed the feat/egfx-send-uncompressed-frame branch from 9279ade to 30d0a38 Compare March 28, 2026 20:20
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