diff --git a/projects/clr/rocclr/device/pal/palkernel.cpp b/projects/clr/rocclr/device/pal/palkernel.cpp index 84d4040fb1..e71c334718 100644 --- a/projects/clr/rocclr/device/pal/palkernel.cpp +++ b/projects/clr/rocclr/device/pal/palkernel.cpp @@ -552,6 +552,12 @@ bool LightningKernel::postLoad() { if (workGroupInfo_.size_ == 0) { return false; } + if ((workGroupInfo_.usedStackSize_ & 0x1) == 0x1) { + workGroupInfo_.scratchRegs_ = + std::max(device().StackSize(), workGroupInfo_.scratchRegs_ * sizeof(uint32_t)) ; + workGroupInfo_.scratchRegs_ = amd::alignUp(workGroupInfo_.scratchRegs_, 16) / sizeof(uint32_t); + workGroupInfo_.privateMemSize_ = workGroupInfo_.scratchRegs_ * sizeof(uint32_t); + } // handle the printf metadata if any std::vector printfStr; diff --git a/projects/clr/rocclr/device/pal/palvirtual.cpp b/projects/clr/rocclr/device/pal/palvirtual.cpp index e57de246b2..c7ae5f79e9 100644 --- a/projects/clr/rocclr/device/pal/palvirtual.cpp +++ b/projects/clr/rocclr/device/pal/palvirtual.cpp @@ -2678,13 +2678,6 @@ bool VirtualGPU::submitKernelInternal(const amd::NDRangeContainer& sizes, const dispatchParam.scratchSize = scratch->size_; dispatchParam.scratchOffset = scratch->offset_; dispatchParam.workitemPrivateSegmentSize = hsaKernel.spillSegSize(); - if ((hsaKernel.workGroupInfo()->usedStackSize_ & 0x1) == 0x1) { - dispatchParam.workitemPrivateSegmentSize = - std::max(dev().StackSize(), dispatchParam.workitemPrivateSegmentSize); - if (dispatchParam.workitemPrivateSegmentSize > 16 * Ki) { - dispatchParam.workitemPrivateSegmentSize = 16 * Ki; - } - } } dispatchParam.pCpuAqlCode = hsaKernel.cpuAqlCode(); dispatchParam.hsaQueueVa = hsaQueueMem_->vmAddress();