SWDEV-79445
Add MS HWS support. PAL reports just one compute engine
in that mode and runtime needs extra logic to detect RT queues.
Change-Id: I011f1f1b18dec6a7195a4f1fe939f8029bc269ae
[ROCm/clr commit: 622c714165]
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<ExclusiveQueueType, uint32_t>& exclusiveComputeEnginesId() const {
|
||||
|
||||
@@ -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);
|
||||
|
||||
مرجع در شماره جدید
Block a user