mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-06 19:32:25 +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());
|
size_t offset = ptrDiff(ptrToPatch, svmAlloc->getUnderlyingBuffer());
|
||||||
allocSize -= offset;
|
allocSize -= offset;
|
||||||
}
|
}
|
||||||
Buffer::setSurfaceState(&getContext(), surfaceState, allocSize, ptrToPatch, svmAlloc);
|
Buffer::setSurfaceState(&getContext(), surfaceState, allocSize, ptrToPatch, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!kernelArguments[argIndex].isPatched) {
|
if (!kernelArguments[argIndex].isPatched) {
|
||||||
|
|||||||
@@ -202,6 +202,26 @@ HWTEST_F(KernelArgSvmTest, SetKernelArgValidSvmAllocStateful) {
|
|||||||
delete[] svmPtr;
|
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) {
|
TEST_F(KernelArgSvmTest, SetKernelArgImmediateInvalidArgValue) {
|
||||||
auto retVal = pKernel->setArgImmediate(0, 256, nullptr);
|
auto retVal = pKernel->setArgImmediate(0, 256, nullptr);
|
||||||
EXPECT_EQ(CL_INVALID_ARG_VALUE, retVal);
|
EXPECT_EQ(CL_INVALID_ARG_VALUE, retVal);
|
||||||
|
|||||||
Reference in New Issue
Block a user