In Kernel::resolveArgs, use argument's object, not value

Change-Id: I65a1855349707d06172b2e0d4ad97dd9f4554c25
This commit is contained in:
Woloszyn, Wojciech
2018-08-14 16:18:39 +02:00
committed by sys_ocldev
parent 70d5113d6b
commit 404c0cccb9
2 changed files with 27 additions and 5 deletions

View File

@@ -2104,8 +2104,7 @@ void Kernel::resolveArgs() {
bool canTransformImageTo2dArray = true;
for (uint32_t i = 0; i < patchedArgumentsNum; i++) {
if (kernelInfo.kernelArgInfo.at(i).isSampler) {
auto clSamplerObj = *(static_cast<const cl_sampler *>(kernelArguments.at(i).value));
auto sampler = castToObjectOrAbort<Sampler>(clSamplerObj);
auto sampler = castToObject<Sampler>(kernelArguments.at(i).object);
if (sampler->isTransformable()) {
canTransformImageTo2dArray = true;
} else {

View File

@@ -190,6 +190,31 @@ HWTEST_F(SamplerSetArgTest, GivenSamplerObjectWhenSetKernelArgIsCalledThenIncrea
ASSERT_EQ(CL_SUCCESS, retVal);
}
HWTEST_F(SamplerSetArgTest, GivenSamplerObjectWhenSetKernelArgIsCalledThenSamplerObjectSurvivesClReleaseSampler) {
cl_sampler samplerObj = Sampler::create(
context,
CL_TRUE,
CL_ADDRESS_MIRRORED_REPEAT,
CL_FILTER_NEAREST,
retVal);
auto pSampler = castToObject<Sampler>(samplerObj);
auto refCountBefore = pSampler->getRefInternalCount();
retVal = pKernel->setArg(
0,
sizeof(samplerObj),
&samplerObj);
ASSERT_EQ(CL_SUCCESS, retVal);
retVal = clReleaseSampler(samplerObj);
ASSERT_EQ(CL_SUCCESS, retVal);
auto refCountAfter = pSampler->getRefInternalCount();
EXPECT_EQ(refCountBefore, refCountAfter);
}
HWTEST_F(SamplerSetArgTest, GivenSamplerObjectWhenSetKernelArgIsCalledAndKernelIsDeletedThenRefCountIsUnchanged) {
auto myKernel = std::make_unique<MockKernel>(program.get(), *pKernelInfo, *pDevice);
ASSERT_NE(nullptr, myKernel.get());
@@ -234,9 +259,7 @@ HWTEST_F(SamplerSetArgTest, GivenNewSamplerObjectWhensSetKernelArgIsCalledThenDe
CL_FILTER_NEAREST,
retVal);
auto clSamplerObj = *(static_cast<const cl_sampler *>(&samplerObj));
cl_sampler s = clSamplerObj;
auto pSampler = castToObjectOrAbort<Sampler>(s);
auto pSampler = castToObject<Sampler>(samplerObj);
retVal = pKernel->setArg(
0,