From 8bb5fba24310aacfbd87388e697f82cf72d6f8fc Mon Sep 17 00:00:00 2001 From: foreman Date: Thu, 9 Mar 2017 19:33:44 -0500 Subject: [PATCH] P4 to Git Change 1383787 by skeely@skeely_HSA_linux on 2017/03/09 19:08:12 SWDEV-3 - Fix createView for interop images. Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocmemory.cpp#13 edit [ROCm/clr commit: 4a7edb21648c3d7a80556dbfa580d93e10314f53] --- .../rocclr/runtime/device/rocm/rocmemory.cpp | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp b/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp index 3d7e9986a8..8be4d80b8b 100644 --- a/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp +++ b/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp @@ -1044,20 +1044,18 @@ Image::createView(const Memory &parent) ? deviceMemory_ : static_cast(parent).originalDeviceMemory_; - amd::Memory* oldestParent = parent.owner(); - while (oldestParent->parent() != nullptr) { - oldestParent = oldestParent->parent(); + //Detect image view from buffer to distinguish linear paths from tiled. + amd::Memory* ancestor = parent.owner(); + while ((ancestor->asBuffer() == nullptr) && (ancestor->parent() != nullptr)) { + ancestor = ancestor->parent(); } + bool linearLayout = (ancestor->asBuffer() != nullptr); kind_ = parent.getKind(); version_ = parent.version(); hsa_status_t status; - if (kind_ == MEMORY_KIND_INTEROP) { - status = hsa_amd_image_create(dev().getBackendDevice(), &imageDescriptor_, - amdImageDesc_, deviceMemory_, permission_, &hsaImageObject_); - } - else if (oldestParent->asBuffer()) { + if (linearLayout) { size_t rowPitch; amd::Image& ownerImage = *owner()->asImage(); size_t elementSize = ownerImage.getImageFormat().getElementSize(); @@ -1077,8 +1075,11 @@ Image::createView(const Memory &parent) &imageDescriptor_, deviceMemory_, permission_, HSA_EXT_IMAGE_DATA_LAYOUT_LINEAR, rowPitch, 0, &hsaImageObject_); - } - else { + } else if (kind_ == MEMORY_KIND_INTEROP) { + amdImageDesc_ = static_cast(parent.owner()->getDeviceMemory(dev()))->amdImageDesc_; + status = hsa_amd_image_create(dev().getBackendDevice(), &imageDescriptor_, + amdImageDesc_, deviceMemory_, permission_, &hsaImageObject_); + } else { status= hsa_ext_image_create(dev().getBackendDevice(), &imageDescriptor_, deviceMemory_, permission_, &hsaImageObject_); }