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_);
}