Skip to content

Commit 0a8b473

Browse files
Add resolves for stateless compression with shared buffer
Related-To: NEO-5107 Signed-off-by: Milczarek, Slawomir <slawomir.milczarek@intel.com>
1 parent c73f10c commit 0a8b473

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

opencl/source/kernel/kernel.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2530,6 +2530,19 @@ void Kernel::fillWithKernelObjsForAuxTranslation(KernelObjsForAuxTranslation &ke
25302530
}
25312531
}
25322532

2533+
bool Kernel::hasDirectStatelessAccessToSharedBuffer() const {
2534+
for (uint32_t i = 0; i < getKernelArgsNumber(); i++) {
2535+
const auto &arg = kernelInfo.kernelDescriptor.payloadMappings.explicitArgs[i];
2536+
if (BUFFER_OBJ == kernelArguments.at(i).type && !arg.as<ArgDescPointer>().isPureStateful()) {
2537+
auto buffer = castToObject<Buffer>(getKernelArg(i));
2538+
if (buffer && buffer->getMultiGraphicsAllocation().getAllocationType() == GraphicsAllocation::AllocationType::SHARED_BUFFER) {
2539+
return true;
2540+
}
2541+
}
2542+
}
2543+
return false;
2544+
}
2545+
25332546
bool Kernel::hasDirectStatelessAccessToHostMemory() const {
25342547
for (uint32_t i = 0; i < getKernelArgsNumber(); i++) {
25352548
const auto &arg = kernelInfo.kernelDescriptor.payloadMappings.explicitArgs[i];
@@ -2848,7 +2861,9 @@ bool Kernel::requiresLimitedWorkgroupSize() const {
28482861
void Kernel::updateAuxTranslationRequired() {
28492862
const auto &hwInfoConfig = *HwInfoConfig::get(getDevice().getHardwareInfo().platform.eProductFamily);
28502863
if (hwInfoConfig.allowStatelessCompression(getDevice().getHardwareInfo())) {
2851-
if (hasDirectStatelessAccessToHostMemory() || hasIndirectStatelessAccessToHostMemory()) {
2864+
if (hasDirectStatelessAccessToHostMemory() ||
2865+
hasIndirectStatelessAccessToHostMemory() ||
2866+
hasDirectStatelessAccessToSharedBuffer()) {
28522867
setAuxTranslationRequired(true);
28532868
}
28542869
}

opencl/source/kernel/kernel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,7 @@ class Kernel : public ReferenceTrackedObject<Kernel> {
514514
void resolveArgs();
515515

516516
void reconfigureKernel();
517+
bool hasDirectStatelessAccessToSharedBuffer() const;
517518
bool hasDirectStatelessAccessToHostMemory() const;
518519
bool hasIndirectStatelessAccessToHostMemory() const;
519520

opencl/test/unit_test/kernel/kernel_arg_buffer_tests.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,23 @@ TEST_F(KernelArgBufferTest, givenBufferWhenHasDirectStatelessAccessToHostMemoryI
333333
}
334334
}
335335

336+
TEST_F(KernelArgBufferTest, givenSharedBufferWhenHasDirectStatelessAccessToSharedBufferIsCalledThenReturnCorrectValue) {
337+
MockBuffer buffer;
338+
buffer.getGraphicsAllocation(mockRootDeviceIndex)->setAllocationType(GraphicsAllocation::AllocationType::SHARED_BUFFER);
339+
340+
auto val = (cl_mem)&buffer;
341+
auto pVal = &val;
342+
343+
for (auto pureStatefulBufferAccess : {false, true}) {
344+
pKernelInfo->setBufferStateful(0, pureStatefulBufferAccess);
345+
346+
auto retVal = pKernel->setArg(0, sizeof(cl_mem *), pVal);
347+
EXPECT_EQ(CL_SUCCESS, retVal);
348+
349+
EXPECT_EQ(!pureStatefulBufferAccess, pKernel->hasDirectStatelessAccessToSharedBuffer());
350+
}
351+
}
352+
336353
TEST_F(KernelArgBufferTest, givenBufferInHostMemoryWhenHasDirectStatelessAccessToHostMemoryIsCalledThenReturnCorrectValue) {
337354
MockBuffer buffer;
338355
buffer.getGraphicsAllocation(mockRootDeviceIndex)->setAllocationType(GraphicsAllocation::AllocationType::BUFFER_HOST_MEMORY);
@@ -462,6 +479,28 @@ TEST_F(KernelArgBufferTest, whenSettingAuxTranslationRequiredThenIsAuxTranslatio
462479
}
463480
}
464481

482+
TEST_F(KernelArgBufferTest, givenSetArgBufferOnKernelWithDirectStatelessAccessToSharedBufferWhenUpdateAuxTranslationRequiredIsCalledThenIsAuxTranslationRequiredShouldReturnTrue) {
483+
DebugManagerStateRestore debugRestorer;
484+
DebugManager.flags.EnableStatelessCompression.set(1);
485+
486+
MockBuffer buffer;
487+
buffer.getGraphicsAllocation(mockRootDeviceIndex)->setAllocationType(GraphicsAllocation::AllocationType::SHARED_BUFFER);
488+
489+
auto val = (cl_mem)&buffer;
490+
auto pVal = &val;
491+
492+
auto retVal = pKernel->setArg(0, sizeof(cl_mem *), pVal);
493+
EXPECT_EQ(CL_SUCCESS, retVal);
494+
495+
EXPECT_TRUE(pKernel->hasDirectStatelessAccessToSharedBuffer());
496+
497+
EXPECT_FALSE(pKernel->isAuxTranslationRequired());
498+
499+
pKernel->updateAuxTranslationRequired();
500+
501+
EXPECT_TRUE(pKernel->isAuxTranslationRequired());
502+
}
503+
465504
TEST_F(KernelArgBufferTest, givenSetArgBufferOnKernelWithDirectStatelessAccessToHostMemoryWhenUpdateAuxTranslationRequiredIsCalledThenIsAuxTranslationRequiredShouldReturnTrue) {
466505
DebugManagerStateRestore debugRestorer;
467506
DebugManager.flags.EnableStatelessCompression.set(1);

opencl/test/unit_test/mocks/mock_kernel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ class MockKernel : public Kernel {
107107
using Kernel::getDevice;
108108
using Kernel::getHardwareInfo;
109109
using Kernel::hasDirectStatelessAccessToHostMemory;
110+
using Kernel::hasDirectStatelessAccessToSharedBuffer;
110111
using Kernel::hasIndirectStatelessAccessToHostMemory;
111112
using Kernel::isSchedulerKernel;
112113
using Kernel::kernelArgHandlers;

0 commit comments

Comments
 (0)