mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Fix incorrect pointer programming when offseted SVM pointers are used.
Change-Id: Idf8b6d9c116cf6fb8cfd069158e9eef4d981b272
This commit is contained in:

committed by
sys_ocldev

parent
fa43e42887
commit
e2680d395c
@ -817,7 +817,7 @@ cl_int Kernel::setArgSvmAlloc(uint32_t argIndex, void *svmPtr, GraphicsAllocatio
|
||||
size_t offset = ptrDiff(ptrToPatch, svmAlloc->getUnderlyingBuffer());
|
||||
allocSize -= offset;
|
||||
}
|
||||
Buffer::setSurfaceState(&getContext(), surfaceState, allocSize, ptrToPatch, svmAlloc);
|
||||
Buffer::setSurfaceState(&getContext(), surfaceState, allocSize, ptrToPatch, nullptr);
|
||||
}
|
||||
|
||||
if (!kernelArguments[argIndex].isPatched) {
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user