Skip to content

Conversation

niklasb-ms
Copy link
Contributor

Description

This enables the text rendering in the DrawingIslands sample to properly recover when the D3D device is lost.

The DeviceLostHelper class listens for device-lost events on the specified DXGI device. This code is adapted from https://learn.microsoft.com/en-us/windows/uwp/composition/composition-native-interop.

The DrawingIsland class now includes an instance of DeviceLostHelper and uses it to listen for events on the device associated with the TextRenderer object. On device lost, the DrawingIsland::OnDirect3DDeviceLost method is called and does the following:

  1. Tells the TextRenderer to recreate its device
  2. Re-renders all the text items
  3. Starts watching the new device

The TextRenderer class has new code to recreate its device. It also catches and ignores the exception in the unlikely event that a DXGI_ERROR_DEVICE_REMOVED error occurs during TextRenderer::Render.

I tested this by triggering multiple device losses using dxcap -forceTDR.

@niklasb-ms niklasb-ms requested a review from jeffstall May 9, 2024 18:29
Copy link
Contributor

@jeffstall jeffstall left a comment

Choose a reason for hiding this comment

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

:shipit:

@jeffstall
Copy link
Contributor

Thanks! Right now, this introduces multi-threading in, which gets us unblocked. I'll refactor this around later to use a DispatcherQueue to post back to the UI thread.

@jeffstall jeffstall merged commit 3ed8ed4 into user/jeffstall/drawingisland May 9, 2024
@jeffstall jeffstall deleted the user/niklasb/drawingisland_device_lost branch May 9, 2024 21:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants