From 5b4f04ab51539d788b8a2f46c749bf049499e81b Mon Sep 17 00:00:00 2001
From: foreman
Date: Thu, 1 Dec 2016 17:17:58 -0500
Subject: [PATCH] P4 to Git Change 1348415 by gandryey@gera-w8 on 2016/12/01
17:11:27
SWDEV-98415 - [CQE OCL][OpenCL on PAL] Failures/Crash is observed with multiple modules of ocltst
- Fix OCLImage2DFromBuffer test. Recalculate the original pitch if a view was created on the top of another ImageBuffer.
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palresource.cpp#19 edit
[ROCm/clr commit: 33de5b1e09b6816eadc2e8df84f26a3ee1c9f1df]
---
.../rocclr/runtime/device/pal/palresource.cpp | 22 +++++++++++++------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/projects/clr/rocclr/runtime/device/pal/palresource.cpp b/projects/clr/rocclr/runtime/device/pal/palresource.cpp
index 442ec6ed06..8c87427e50 100644
--- a/projects/clr/rocclr/runtime/device/pal/palresource.cpp
+++ b/projects/clr/rocclr/runtime/device/pal/palresource.cpp
@@ -850,6 +850,7 @@ Resource::create(MemoryType memType, CreateParams* params)
imgCreateInfo.samples = 1;
imgCreateInfo.fragments = 1;
Pal::ImageTiling tiling = Pal::ImageTiling::Optimal;
+ uint32_t rowPitch = 0;
if (((memoryType() == Persistent) &&
dev().settings().linearPersistentImage_) ||
@@ -858,10 +859,12 @@ Resource::create(MemoryType memType, CreateParams* params)
}
else if (memoryType() == ImageView) {
tiling = viewOwner_->image_->GetImageCreateInfo().tiling;
+ // Find the new pitch in pixels for the new format
+ rowPitch = viewOwner_->desc().pitch_ *
+ viewOwner_->elementSize() / elementSize();
}
if (memoryType() == ImageBuffer) {
- uint32_t rowPitch;
if ((params->owner_ != NULL) && params->owner_->asImage() &&
(params->owner_->asImage()->getRowPitch() != 0)) {
rowPitch = params->owner_->asImage()->getRowPitch() / elementSize();
@@ -869,11 +872,12 @@ Resource::create(MemoryType memType, CreateParams* params)
else {
rowPitch = desc().width_;
}
- // Make sure the row pitch is aligned to pixels
- imgCreateInfo.rowPitch = elementSize() *
- amd::alignUp(rowPitch, dev().info().imagePitchAlignment_);
- imgCreateInfo.depthPitch = imgCreateInfo.rowPitch * desc().height_;
}
+ desc_.pitch_ = rowPitch;
+ // Make sure the row pitch is aligned to pixels
+ imgCreateInfo.rowPitch = elementSize() *
+ amd::alignUp(rowPitch, dev().info().imagePitchAlignment_);
+ imgCreateInfo.depthPitch = imgCreateInfo.rowPitch * desc().height_;
imgCreateInfo.tiling = tiling;
size_t imageSize = dev().iDev()->GetImageSize(imgCreateInfo, &result);
@@ -950,8 +954,7 @@ Resource::create(MemoryType memType, CreateParams* params)
if (nullptr != view->resource_) {
viewOwner_ = view->resource_;
offset_ += viewOwner_->offset();
-
- if (viewOwner_->isMemoryType(Pinned)) {
+ if (viewOwner_->data() != nullptr) {
address_ = viewOwner_->data() + view->offset_;
}
pinOffset_ = viewOwner_->pinOffset();
@@ -1025,15 +1028,19 @@ Resource::create(MemoryType memType, CreateParams* params)
return true;
}
+
if ((nullptr != params) &&
(nullptr != params->owner_) &&
(nullptr != params->owner_->getSvmPtr())) {
+ Pal::gpusize svmPtr = reinterpret_cast(params->owner_->getSvmPtr());
+ svmPtr = (svmPtr == 1) ? 0 : svmPtr;
// @todo 64K alignment is too big
uint allocSize = amd::alignUp(desc().width_ * elementSize_, MaxGpuAlignment);
if (memoryType() == Remote) {
Pal::SvmGpuMemoryCreateInfo createInfo = {};
createInfo.size = allocSize;
createInfo.alignment = MaxGpuAlignment;
+ //createInfo.gpuVirtAddr = svmPtr;
memRef_ = GpuMemoryReference::Create(dev(), createInfo);
}
else {
@@ -1042,6 +1049,7 @@ Resource::create(MemoryType memType, CreateParams* params)
createInfo.alignment = MaxGpuAlignment;
createInfo.vaRange = Pal::VaRange::Svm;
createInfo.priority = Pal::GpuMemPriority::Normal;
+ //createInfo.gpuVirtAddr = svmPtr;
memTypeToHeap(&createInfo);
memRef_ = GpuMemoryReference::Create(dev(), createInfo);
}