rocr: Refactor SDMA object creation (#2629)

Refactor SDMA object creation and add comment to clarify why GCR is not
needed on DXG.
Цей коміт міститься в:
David Yat Sin
2026-01-21 21:09:56 -05:00
зафіксовано GitHub
джерело d902429f1f
коміт 5267cd334b
+9 -7
Переглянути файл
@@ -717,7 +717,13 @@ core::Queue* GpuAgent::CreateInterceptibleQueue(void (*callback)(hsa_status_t st
core::Blit* GpuAgent::CreateBlitSdma(bool use_xgmi, int rec_eng) {
AMD::BlitSdmaBase* sdma;
size_t copy_size_override = 0;
const size_t copy_size_overrides[2] = {0x3fffff, 0x3fffffff};
constexpr size_t copy_size_overrides[2] = {0x3fffff, 0x3fffffff};
/*
* On DXG SDMA packets placed in the queue are wrapped inside GCR packets by
* underlying driver and submitted into another queue. So GCR is not needed.
*/
auto isDXG = core::Runtime::runtime_singleton_->thunkLoader()->IsDXG();
switch (isa_->GetMajorVersion()) {
case 9:
@@ -726,17 +732,13 @@ core::Blit* GpuAgent::CreateBlitSdma(bool use_xgmi, int rec_eng) {
copy_size_overrides[1] : copy_size_overrides[0];
break;
case 10:
sdma = new BlitSdmaV5();
sdma = (isDXG ? static_cast<BlitSdmaBase*>(new BlitSdmaV4()) : static_cast<BlitSdmaBase*>(new BlitSdmaV5()));
copy_size_override = isa_->GetMinorVersion() < 3 ? copy_size_overrides[0] :
copy_size_overrides[1];
break;
case 11:
case 12:
if (core::Runtime::runtime_singleton_->thunkLoader()->IsDXG()) {
sdma = new BlitSdmaV4();
} else {
sdma = new BlitSdmaV5();
}
sdma = (isDXG ? static_cast<BlitSdmaBase*>(new BlitSdmaV4()) : static_cast<BlitSdmaBase*>(new BlitSdmaV5()));
copy_size_override = copy_size_overrides[1];
break;
default: