diff --git a/projects/clr/rocclr/device/pal/paldevice.cpp b/projects/clr/rocclr/device/pal/paldevice.cpp index b1af3dcc5b..defb0f9785 100644 --- a/projects/clr/rocclr/device/pal/paldevice.cpp +++ b/projects/clr/rocclr/device/pal/paldevice.cpp @@ -902,27 +902,24 @@ bool Device::create(Pal::IDevice* device) { return false; } + const auto& computeProp = properties().engineProperties[Pal::EngineTypeCompute]; // Find the number of available engines - for (uint i = 0; i < properties().engineProperties[Pal::EngineTypeCompute].engineCount; ++i) { - if (properties().engineProperties[Pal::EngineTypeCompute].capabilities[i].flags.exclusive) { - if ((properties() - .engineProperties[Pal::EngineTypeCompute] - .capabilities[i] - .queuePrioritySupport == Pal::SupportQueuePriorityRealtime) && - (properties().engineProperties[Pal::EngineTypeCompute].maxNumDedicatedCu > 0)) { - if (exclusiveComputeEnginesId_.find(ExclusiveQueueType::RealTime0) != - exclusiveComputeEnginesId_.end()) { - exclusiveComputeEnginesId_.insert({ExclusiveQueueType::RealTime1, i}); - } else { - exclusiveComputeEnginesId_.insert({ExclusiveQueueType::RealTime0, i}); - } - } else if (properties() - .engineProperties[Pal::EngineTypeCompute] - .capabilities[i] - .queuePrioritySupport == Pal::SupportQueuePriorityMedium) { - exclusiveComputeEnginesId_.insert({ExclusiveQueueType::Medium, i}); + for (uint i = 0; i < computeProp.engineCount; ++i) { + const auto& computeCaps = computeProp.capabilities[i]; + if ((computeCaps.queuePrioritySupport & Pal::SupportQueuePriorityRealtime) && + (computeProp.maxNumDedicatedCu > 0)) { + if (exclusiveComputeEnginesId_.find(ExclusiveQueueType::RealTime0) != + exclusiveComputeEnginesId_.end()) { + exclusiveComputeEnginesId_.insert({ExclusiveQueueType::RealTime1, i}); + } else { + exclusiveComputeEnginesId_.insert({ExclusiveQueueType::RealTime0, i}); } - } else { + } + if (computeCaps.queuePrioritySupport & Pal::SupportQueuePriorityMedium) { + exclusiveComputeEnginesId_.insert({ExclusiveQueueType::Medium, i}); + } + + if (computeCaps.queuePrioritySupport & Pal::SupportQueuePriorityNormal) { computeEnginesId_.push_back(i); } } diff --git a/projects/clr/rocclr/device/pal/paldevice.hpp b/projects/clr/rocclr/device/pal/paldevice.hpp index d1c21353b9..dcac1a16ec 100644 --- a/projects/clr/rocclr/device/pal/paldevice.hpp +++ b/projects/clr/rocclr/device/pal/paldevice.hpp @@ -425,7 +425,10 @@ class Device : public NullDevice { } //! Returns the number of available compute rings - uint numExclusiveComputeEngines() const { return exclusiveComputeEnginesId_.size(); } + uint numExclusiveComputeEngines() const { + return exclusiveComputeEnginesId_.size() + + ((exclusiveComputeEnginesId().find(ExclusiveQueueType::RealTime1) == + exclusiveComputeEnginesId().end()) ? 1 : 0); } //! Returns the map of available exclusive compute rings with the engine index const std::map& exclusiveComputeEnginesId() const { diff --git a/projects/clr/rocclr/device/pal/palvirtual.cpp b/projects/clr/rocclr/device/pal/palvirtual.cpp index 706d02b53e..7bc564ebb8 100644 --- a/projects/clr/rocclr/device/pal/palvirtual.cpp +++ b/projects/clr/rocclr/device/pal/palvirtual.cpp @@ -86,7 +86,11 @@ VirtualGPU::Queue* VirtualGPU::Queue::Create(const VirtualGPU& gpu, Pal::QueueTy qCreateInfo.priority = Pal::QueuePriority::Medium; } else if (amd::CommandQueue::RealTimeDisabled != rtCU) { qCreateInfo.numReservedCu = rtCU; - if (priority == amd::CommandQueue::Priority::Medium) { + if ((priority == amd::CommandQueue::Priority::Medium) && + // If Windows HWS is enabled, then the both real time queues are allocated + // on the same engine + (gpu.dev().exclusiveComputeEnginesId().find(ExclusiveQueueType::RealTime1) != + gpu.dev().exclusiveComputeEnginesId().end())) { it = gpu.dev().exclusiveComputeEnginesId().find(ExclusiveQueueType::RealTime1); } else { it = gpu.dev().exclusiveComputeEnginesId().find(ExclusiveQueueType::RealTime0);