Skip to content

Commit 404c0cc

Browse files
In Kernel::resolveArgs, use argument's object, not value
Change-Id: I65a1855349707d06172b2e0d4ad97dd9f4554c25
1 parent 70d5113 commit 404c0cc

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

runtime/kernel/kernel.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2104,8 +2104,7 @@ void Kernel::resolveArgs() {
21042104
bool canTransformImageTo2dArray = true;
21052105
for (uint32_t i = 0; i < patchedArgumentsNum; i++) {
21062106
if (kernelInfo.kernelArgInfo.at(i).isSampler) {
2107-
auto clSamplerObj = *(static_cast<const cl_sampler *>(kernelArguments.at(i).value));
2108-
auto sampler = castToObjectOrAbort<Sampler>(clSamplerObj);
2107+
auto sampler = castToObject<Sampler>(kernelArguments.at(i).object);
21092108
if (sampler->isTransformable()) {
21102109
canTransformImageTo2dArray = true;
21112110
} else {

unit_tests/sampler/sampler_set_arg_tests.cpp

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,31 @@ HWTEST_F(SamplerSetArgTest, GivenSamplerObjectWhenSetKernelArgIsCalledThenIncrea
190190
ASSERT_EQ(CL_SUCCESS, retVal);
191191
}
192192

193+
HWTEST_F(SamplerSetArgTest, GivenSamplerObjectWhenSetKernelArgIsCalledThenSamplerObjectSurvivesClReleaseSampler) {
194+
cl_sampler samplerObj = Sampler::create(
195+
context,
196+
CL_TRUE,
197+
CL_ADDRESS_MIRRORED_REPEAT,
198+
CL_FILTER_NEAREST,
199+
retVal);
200+
201+
auto pSampler = castToObject<Sampler>(samplerObj);
202+
auto refCountBefore = pSampler->getRefInternalCount();
203+
204+
retVal = pKernel->setArg(
205+
0,
206+
sizeof(samplerObj),
207+
&samplerObj);
208+
ASSERT_EQ(CL_SUCCESS, retVal);
209+
210+
retVal = clReleaseSampler(samplerObj);
211+
ASSERT_EQ(CL_SUCCESS, retVal);
212+
213+
auto refCountAfter = pSampler->getRefInternalCount();
214+
215+
EXPECT_EQ(refCountBefore, refCountAfter);
216+
}
217+
193218
HWTEST_F(SamplerSetArgTest, GivenSamplerObjectWhenSetKernelArgIsCalledAndKernelIsDeletedThenRefCountIsUnchanged) {
194219
auto myKernel = std::make_unique<MockKernel>(program.get(), *pKernelInfo, *pDevice);
195220
ASSERT_NE(nullptr, myKernel.get());
@@ -234,9 +259,7 @@ HWTEST_F(SamplerSetArgTest, GivenNewSamplerObjectWhensSetKernelArgIsCalledThenDe
234259
CL_FILTER_NEAREST,
235260
retVal);
236261

237-
auto clSamplerObj = *(static_cast<const cl_sampler *>(&samplerObj));
238-
cl_sampler s = clSamplerObj;
239-
auto pSampler = castToObjectOrAbort<Sampler>(s);
262+
auto pSampler = castToObject<Sampler>(samplerObj);
240263

241264
retVal = pKernel->setArg(
242265
0,

0 commit comments

Comments
 (0)