Add allBufferArgsStateful field to Kernel

Change-Id: I885ede725830964374421eff621cf01cecc4b17e
Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
Maciej Dziuban 2019-03-21 12:51:20 +01:00 committed by sys_ocldev
parent c982e8b33f
commit cd62be59e1
6 changed files with 68 additions and 0 deletions

View File

@ -7,6 +7,7 @@
set(RUNTIME_SRCS_KERNEL
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_kernel_info.h
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/get_additional_kernel_info.cpp
${CMAKE_CURRENT_SOURCE_DIR}/grf_config.h
${CMAKE_CURRENT_SOURCE_DIR}/image_transformer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/image_transformer.h

View File

@ -0,0 +1,13 @@
/*
* Copyright (C) 2019 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "runtime/kernel/kernel.h"
namespace OCLRT {
void Kernel::getAdditionalInfo(cl_kernel_info paramName, const void *&paramValue, size_t &paramValueSizeRet) const {
}
} // namespace OCLRT

View File

@ -330,6 +330,7 @@ cl_int Kernel::initialize() {
kernelArgHandlers[i] = &Kernel::setArgBuffer;
kernelArguments[i].type = BUFFER_OBJ;
usingBuffers = true;
allBufferArgsStateful &= static_cast<uint32_t>(argInfo.pureStatefulBufferAccess);
this->auxTranslationRequired |= !kernelInfo.kernelArgInfo[i].pureStatefulBufferAccess &&
HwHelper::renderCompressedBuffersSupported(getDevice().getHardwareInfo());
} else if (argInfo.isImage) {
@ -459,6 +460,7 @@ cl_int Kernel::getInfo(cl_kernel_info paramName, size_t paramValueSize,
break;
default:
getAdditionalInfo(paramName, pSrc, srcSize);
break;
}

View File

@ -131,6 +131,7 @@ class Kernel : public BaseObject<_cl_kernel> {
cl_int getInfo(cl_kernel_info paramName, size_t paramValueSize,
void *paramValue, size_t *paramValueSizeRet) const;
void getAdditionalInfo(cl_kernel_info paramName, const void *&paramValue, size_t &paramValueSizeRet) const;
cl_int getArgInfo(cl_uint argIndx, cl_kernel_arg_info paramName,
size_t paramValueSize, void *paramValue, size_t *paramValueSizeRet) const;
@ -335,6 +336,8 @@ class Kernel : public BaseObject<_cl_kernel> {
std::vector<size_t> slmSizes;
uint32_t allBufferArgsStateful = CL_TRUE;
uint32_t slmTotalSize;
bool isBuiltIn;
const bool isParentKernel;

View File

@ -2444,3 +2444,51 @@ TEST(KernelTest, givenKernelUsesPrivateMemoryWhenDeviceReleasedBeforeKernelThenK
mockKernel.reset(nullptr);
executionEnvironment->decRefInternal();
}
TEST(KernelTest, givenAllArgumentsAreStatefulBuffersWhenInitializingThenAllBufferArgsStatefulIsTrue) {
std::unique_ptr<MockDevice> device(MockDevice::createWithNewExecutionEnvironment<MockDevice>(platformDevices[0]));
std::vector<KernelArgInfo> kernelArgInfo(2);
kernelArgInfo[0].isBuffer = true;
kernelArgInfo[1].isBuffer = true;
kernelArgInfo[0].pureStatefulBufferAccess = true;
kernelArgInfo[1].pureStatefulBufferAccess = true;
MockKernelWithInternals kernel{*device};
kernel.kernelInfo.kernelArgInfo = kernelArgInfo;
kernel.mockKernel->initialize();
EXPECT_TRUE(kernel.mockKernel->allBufferArgsStateful);
}
TEST(KernelTest, givenAllArgumentsAreBuffersButNotAllAreStatefulWhenInitializingThenAllBufferArgsStatefulIsFalse) {
std::unique_ptr<MockDevice> device(MockDevice::createWithNewExecutionEnvironment<MockDevice>(platformDevices[0]));
std::vector<KernelArgInfo> kernelArgInfo(2);
kernelArgInfo[0].isBuffer = true;
kernelArgInfo[1].isBuffer = true;
kernelArgInfo[0].pureStatefulBufferAccess = true;
kernelArgInfo[1].pureStatefulBufferAccess = false;
MockKernelWithInternals kernel{*device};
kernel.kernelInfo.kernelArgInfo = kernelArgInfo;
kernel.mockKernel->initialize();
EXPECT_FALSE(kernel.mockKernel->allBufferArgsStateful);
}
TEST(KernelTest, givenNotAllArgumentsAreBuffersButAllBuffersAreStatefulWhenInitializingThenAllBufferArgsStatefulIsTrue) {
std::unique_ptr<MockDevice> device(MockDevice::createWithNewExecutionEnvironment<MockDevice>(platformDevices[0]));
std::vector<KernelArgInfo> kernelArgInfo(2);
kernelArgInfo[0].isBuffer = true;
kernelArgInfo[1].isBuffer = false;
kernelArgInfo[0].pureStatefulBufferAccess = true;
kernelArgInfo[1].pureStatefulBufferAccess = false;
MockKernelWithInternals kernel{*device};
kernel.kernelInfo.kernelArgInfo = kernelArgInfo;
kernel.mockKernel->initialize();
EXPECT_TRUE(kernel.mockKernel->allBufferArgsStateful);
}

View File

@ -25,6 +25,7 @@ namespace OCLRT {
class MockKernel : public Kernel {
public:
using Kernel::addAllocationToCacheFlushVector;
using Kernel::allBufferArgsStateful;
using Kernel::auxTranslationRequired;
using Kernel::isSchedulerKernel;
using Kernel::kernelArgRequiresCacheFlush;