SWDEV-352197 - Destroy virtual device in thread destructor

Windows kills threads on exit without any notification. However,
runtime can still destroy VirtualGPU object from the host thread with
HostQueue destruction.
This change also forces RGP trace transfer on the last capture without
any delays.

Change-Id: I768e87e99e1d23a021e63c12f36e450817743759
This commit is contained in:
German authored and German Andryeyev committed 2023-01-31 10:53:48 -05:00
1 parent 054ab2d4ae
commit ad33a021cb
4 files changed
+28 -10

No files matched your search

+9 -5
View File
@@ -162,15 +162,21 @@ class HostQueue : public CommandQueue {
Thread()
: amd::Thread("Command Queue Thread", CQ_THREAD_STACK_SIZE, !AMD_DIRECT_DISPATCH),
acceptingCommands_(false),
virtualDevice_(NULL) {}
virtualDevice_(nullptr) {}
virtual ~Thread() {
if (virtualDevice_ != nullptr) {
delete virtualDevice_;
virtualDevice_ = nullptr;
}
}
//! The command queue thread entry point.
void run(void* data) {
HostQueue* queue = static_cast<HostQueue*>(data);
virtualDevice_ = queue->device().createVirtualDevice(queue);
if (virtualDevice_ != NULL) {
if (virtualDevice_ != nullptr) {
queue->loop(virtualDevice_);
Release();
} else {
acceptingCommands_ = false;
queue->flush();
@@ -184,8 +190,6 @@ class HostQueue : public CommandQueue {
}
}
void Release() const { delete virtualDevice_; }
//! Get virtual device for the current thread
device::VirtualDevice* vdev() const { return virtualDevice_; }