SWDEV-316824 - Fix P2P compute copy path

Use device memory object for the GPU VA address look-up.

Change-Id: I76bf58b29205f7b3ba1bf68e9fcca69421267203


[ROCm/clr commit: 3fd4a67670]
This commit is contained in:
German Andryeyev
2022-02-15 09:26:46 -05:00
parent 195d0cb246
commit a7be0eb56a
2 changed files with 13 additions and 6 deletions
+2 -2
View File
@@ -2104,9 +2104,9 @@ bool KernelBlitManager::copyBuffer(device::Memory& srcMemory, device::Memory& ds
// Program kernels arguments for the blit operation
cl_mem mem = as_cl<amd::Memory>(srcMemory.owner());
setArgument(kernels_[blitType], 0, sizeof(cl_mem), &mem);
setArgument(kernels_[blitType], 0, sizeof(cl_mem), &mem, 0, &srcMemory);
mem = as_cl<amd::Memory>(dstMemory.owner());
setArgument(kernels_[blitType], 1, sizeof(cl_mem), &mem);
setArgument(kernels_[blitType], 1, sizeof(cl_mem), &mem, 0, &dstMemory);
// Program source origin
uint64_t srcOffset = srcOrigin[0] / CopyBuffAlignment[i];
setArgument(kernels_[blitType], 2, sizeof(srcOffset), &srcOffset);
+11 -4
View File
@@ -447,7 +447,8 @@ class KernelBlitManager : public DmaBlitManager {
void releaseArguments(address args) const;
inline void setArgument(amd::Kernel* kernel, size_t index,
size_t size, const void* value, uint32_t offset = 0) const;
size_t size, const void* value, uint32_t offset = 0,
const device::Memory* dev_mem = nullptr) const;
uint32_t ConstantBufferOffset() const {
// Make sure it can fit at least 128 bytes for OCL memory fill of double16
@@ -490,7 +491,8 @@ static const char* BlitName[KernelBlitManager::BlitTotal] = {
};
inline void KernelBlitManager::setArgument(amd::Kernel* kernel, size_t index,
size_t size, const void* value, uint32_t offset) const {
size_t size, const void* value, uint32_t offset,
const device::Memory* dev_mem) const {
const amd::KernelParameterDescriptor& desc = kernel->signature().at(index);
void* param = kernel->parameters().values() + desc.offset_;
@@ -511,8 +513,13 @@ inline void KernelBlitManager::setArgument(amd::Kernel* kernel, size_t index,
// convert cl_mem to amd::Memory*, return false if invalid.
reinterpret_cast<amd::Memory**>(kernel->parameters().values() +
kernel->parameters().memoryObjOffset())[desc.info_.arrayIndex_] = mem;
LP64_SWITCH(uint32_value, uint64_value) = static_cast<uintptr_t>(
mem->getDeviceMemory(dev())->virtualAddress()) + offset;
if (dev_mem == nullptr) {
LP64_SWITCH(uint32_value, uint64_value) = static_cast<uintptr_t>(
mem->getDeviceMemory(dev())->virtualAddress()) + offset;
} else {
LP64_SWITCH(uint32_value, uint64_value) = static_cast<uintptr_t>(
dev_mem->virtualAddress()) + offset;
}
}
} else if (desc.type_ == T_SAMPLER) {
assert(false && "No sampler support in blit manager! Use internal samplers!");