Fix incorrect pointer programming when offseted SVM pointers are used.

Change-Id: Idf8b6d9c116cf6fb8cfd069158e9eef4d981b272
This commit is contained in:
Mrozek, Michal
2018-01-17 18:14:27 +01:00
committed by sys_ocldev
parent fa43e42887
commit e2680d395c
2 changed files with 21 additions and 1 deletions

View File

@ -202,6 +202,26 @@ HWTEST_F(KernelArgSvmTest, SetKernelArgValidSvmAllocStateful) {
delete[] svmPtr;
}
HWTEST_F(KernelArgSvmTest, givenOffsetedSvmPointerWhenSetArgSvmAllocIsCalledThenProperSvmAddressIsPatched) {
std::unique_ptr<char[]> svmPtr(new char[256]);
auto offsetedPtr = svmPtr.get() + 4;
GraphicsAllocation svmAlloc(svmPtr.get(), 256);
pKernelInfo->usesSsh = true;
pKernelInfo->requiresSshForBuffers = true;
pKernel->setArgSvmAlloc(0, offsetedPtr, &svmAlloc);
typedef typename FamilyType::RENDER_SURFACE_STATE RENDER_SURFACE_STATE;
auto surfaceState = reinterpret_cast<const RENDER_SURFACE_STATE *>(
ptrOffset(pKernel->getSurfaceStateHeap(),
pKernelInfo->kernelArgInfo[0].offsetHeap));
void *surfaceAddress = reinterpret_cast<void *>(surfaceState->getSurfaceBaseAddress());
EXPECT_EQ(offsetedPtr, surfaceAddress);
}
TEST_F(KernelArgSvmTest, SetKernelArgImmediateInvalidArgValue) {
auto retVal = pKernel->setArgImmediate(0, 256, nullptr);
EXPECT_EQ(CL_INVALID_ARG_VALUE, retVal);