From bb3678a080299f28dae4d5d33be970ddabef89b3 Mon Sep 17 00:00:00 2001
From: foreman
Date: Tue, 31 May 2016 17:46:13 -0400
Subject: [PATCH] P4 to Git Change 1274956 by gandryey@gera-w8 on 2016/05/31
17:12:40
SWDEV-86035 - Add PAL backend to OpenCL
- Fix imagebuffer and SRGB failures in Conformance 2.0. The new PAL is required for all imagebuffer formats.
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevice.cpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palresource.cpp#5 edit
---
rocclr/runtime/device/pal/paldevice.cpp | 5 +--
rocclr/runtime/device/pal/palresource.cpp | 41 ++++++++++++++---------
2 files changed, 29 insertions(+), 17 deletions(-)
diff --git a/rocclr/runtime/device/pal/paldevice.cpp b/rocclr/runtime/device/pal/paldevice.cpp
index faa245d9f4..47a20ebbd9 100644
--- a/rocclr/runtime/device/pal/paldevice.cpp
+++ b/rocclr/runtime/device/pal/paldevice.cpp
@@ -367,9 +367,10 @@ void NullDevice::fillDeviceInfo(
info_.deviceTopology_.pcie.bus = (calAttr.pciTopologyInformation&(0xFF<<8))>>8;
info_.deviceTopology_.pcie.device = (calAttr.pciTopologyInformation&(0x1F<<3))>>3;
info_.deviceTopology_.pcie.function = (calAttr.pciTopologyInformation&0x07);
-
- ::strncpy(info_.boardName_, calAttr.boardName, sizeof(info_.boardName_));
*/
+ ::strncpy(info_.boardName_, palProp.gpuName,
+ ::strnlen(palProp.gpuName, sizeof(info_.boardName_)));
+
// OpenCL1.2 device info fields
info_.builtInKernels_ = "";
info_.imageMaxBufferSize_ = MaxImageBufferSize;
diff --git a/rocclr/runtime/device/pal/palresource.cpp b/rocclr/runtime/device/pal/palresource.cpp
index 487ea8be41..54e56454b2 100644
--- a/rocclr/runtime/device/pal/palresource.cpp
+++ b/rocclr/runtime/device/pal/palresource.cpp
@@ -697,21 +697,30 @@ Resource::create(MemoryType memType, CreateParams* params)
if (!desc_.buffer_) {
if (desc().topology_ == CL_MEM_OBJECT_IMAGE1D_BUFFER) {
- Pal::GpuMemoryCreateInfo createInfo = {};
- createInfo.size = desc().width_ * elementSize();
- // @todo 64K alignment is too big
- createInfo.size = amd::alignUp(createInfo.size, MaxGpuAlignment);
- createInfo.alignment = MaxGpuAlignment;
- createInfo.vaRange = Pal::VaRange::Default;
- createInfo.priority = Pal::GpuMemPriority::Normal;
- memTypeToHeap(&createInfo);
- // createInfo.priority;
- memRef_ = dev().resourceCache().findGpuMemory(&desc_, createInfo.size, createInfo.alignment);
- if (nullptr == memRef_) {
- memRef_ = GpuMemoryReference::Create(dev(), createInfo);
+ if (memoryType() == ImageBuffer) {
+ ImageBufferParams* imageBuffer = reinterpret_cast(params);
+ viewOwner_ = imageBuffer->resource_;
+ memRef_ = viewOwner_->memRef_;
+ memRef_->retain();
+ desc_.cardMemory_ = viewOwner_->desc().cardMemory_;
+ }
+ else {
+ Pal::GpuMemoryCreateInfo createInfo = {};
+ createInfo.size = desc().width_ * elementSize();
+ // @todo 64K alignment is too big
+ createInfo.size = amd::alignUp(createInfo.size, MaxGpuAlignment);
+ createInfo.alignment = MaxGpuAlignment;
+ createInfo.vaRange = Pal::VaRange::Default;
+ createInfo.priority = Pal::GpuMemPriority::Normal;
+ memTypeToHeap(&createInfo);
+ // createInfo.priority;
+ memRef_ = dev().resourceCache().findGpuMemory(&desc_, createInfo.size, createInfo.alignment);
if (nullptr == memRef_) {
- LogError("Failed PAL memory allocation!");
- return false;
+ memRef_ = GpuMemoryReference::Create(dev(), createInfo);
+ if (nullptr == memRef_) {
+ LogError("Failed PAL memory allocation!");
+ return false;
+ }
}
}
Pal::BufferViewInfo viewInfo = {};
@@ -719,6 +728,7 @@ Resource::create(MemoryType memType, CreateParams* params)
viewInfo.range = memRef_->iMem()->Desc().size;
viewInfo.stride = elementSize();
viewInfo.format = format;
+ //viewInfo.channels = channels;
hwSrd_ = dev().srds().allocSrdSlot(reinterpret_cast(&hwState_));
if ((0 == hwSrd_) && (memoryType() != ImageView)) {
return false;
@@ -782,7 +792,8 @@ Resource::create(MemoryType memType, CreateParams* params)
(elementSize() != viewOwner_->elementSize())) {
imgCreateInfo.flags.formatChangeSrd = true;
imgCreateInfo.usageFlags.shaderRead = true;
- imgCreateInfo.usageFlags.shaderWrite = true;
+ imgCreateInfo.usageFlags.shaderWrite =
+ (format.numFmt == Pal::NumFmt::Srgb) ? false : true;
imgCreateInfo.format = format;
imgCreateInfo.mipLevels = (desc_.mipLevels_) ? desc_.mipLevels_ : 1;
imgCreateInfo.samples = 1;