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;