| 804 | } |
| 805 | |
| 806 | DeviceState::~DeviceState() { |
| 807 | // May not be created |
| 808 | if (!exportStreamer) { |
| 809 | return; |
| 810 | } |
| 811 | |
| 812 | // Wait for all pending instrumentation |
| 813 | instrumentationController->WaitForCompletion(); |
| 814 | |
| 815 | // Stop the sync point thread |
| 816 | syncPointActionThread.Stop(); |
| 817 | |
| 818 | // Process all remaining work |
| 819 | exportStreamer->Process(); |
| 820 | |
| 821 | // Wait for all pending submissions |
| 822 | scheduler->WaitForPending(); |
| 823 | |
| 824 | // Manual uninstalls |
| 825 | versioningController->Uninstall(); |
| 826 | metadataController->Uninstall(); |
| 827 | instrumentationController->Uninstall(); |
| 828 | |
| 829 | // Release all features |
| 830 | features.clear(); |
| 831 | } |
| 832 | |
| 833 | bool GlobalDeviceDetour::Install() { |
| 834 | ASSERT(!D3D12GPUOpenFunctionTableNext.next_D3D12CreateDeviceOriginal, "Global device detour re-entry"); |
nothing calls this directly
no test coverage detected