Improve support for L0 uncached device allocations (2)
Make sure UNCACHED flags are used in stateful paths. Related-To: NEO-5500 Signed-off-by: Jaime Arteaga <jaime.a.arteaga.molina@intel.com>
This commit is contained in:
parent
d4823a463a
commit
a56b413392
|
@ -496,7 +496,8 @@ ze_result_t KernelImp::setArgBufferWithAlloc(uint32_t argIndex, uintptr_t argVal
|
|||
NEO::patchPointer(ArrayRef<uint8_t>(crossThreadData.get(), crossThreadDataSize), arg, val);
|
||||
if (NEO::isValidOffset(arg.bindful) || NEO::isValidOffset(arg.bindless)) {
|
||||
setBufferSurfaceState(argIndex, reinterpret_cast<void *>(val), allocation);
|
||||
} else {
|
||||
}
|
||||
|
||||
auto allocData = this->module->getDevice()->getDriverHandle()->getSvmAllocsManager()->getSVMAlloc(reinterpret_cast<void *>(allocation->getGpuAddress()));
|
||||
if (allocData) {
|
||||
bool argWasUncacheable = isArgUncached[argIndex];
|
||||
|
@ -508,7 +509,7 @@ ze_result_t KernelImp::setArgBufferWithAlloc(uint32_t argIndex, uintptr_t argVal
|
|||
}
|
||||
this->setKernelArgUncached(argIndex, argIsUncacheable);
|
||||
}
|
||||
}
|
||||
|
||||
residencyContainer[argIndex] = allocation;
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
|
|
|
@ -141,6 +141,10 @@ HWTEST2_F(ModuleTest, givenNonPatchedTokenThenSurfaceBaseAddressIsCorrectlySet,
|
|||
|
||||
using ModuleUncachedBufferTest = Test<ModuleFixture>;
|
||||
|
||||
struct KernelImpUncachedTest : public KernelImp {
|
||||
using KernelImp::kernelRequiresUncachedMocsCount;
|
||||
};
|
||||
|
||||
HWTEST2_F(ModuleUncachedBufferTest,
|
||||
givenKernelWithNonUncachedArgumentAndPreviouslyNotSetUncachedThenUncachedMocsNotSet, ModuleTestSupport) {
|
||||
ze_kernel_handle_t kernelHandle;
|
||||
|
@ -186,7 +190,7 @@ HWTEST2_F(ModuleUncachedBufferTest,
|
|||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||
|
||||
auto kernelImp = reinterpret_cast<L0::KernelImp *>(L0::Kernel::fromHandle(kernelHandle));
|
||||
auto kernelImp = reinterpret_cast<KernelImpUncachedTest *>(L0::Kernel::fromHandle(kernelHandle));
|
||||
|
||||
void *devicePtr = nullptr;
|
||||
ze_device_mem_alloc_desc_t deviceDesc = {};
|
||||
|
@ -202,6 +206,7 @@ HWTEST2_F(ModuleUncachedBufferTest,
|
|||
|
||||
uint32_t argIndex = 0u;
|
||||
kernelImp->setKernelArgUncached(argIndex, true);
|
||||
kernelImp->kernelRequiresUncachedMocsCount++;
|
||||
kernelImp->setArgBufferWithAlloc(argIndex, reinterpret_cast<uintptr_t>(devicePtr), gpuAlloc);
|
||||
EXPECT_FALSE(kernelImp->getKernelRequiresUncachedMocs());
|
||||
|
||||
|
@ -238,7 +243,7 @@ HWTEST2_F(ModuleUncachedBufferTest,
|
|||
|
||||
uint32_t argIndex = 0u;
|
||||
kernelImp->setArgBufferWithAlloc(argIndex, reinterpret_cast<uintptr_t>(devicePtr), gpuAlloc);
|
||||
EXPECT_FALSE(kernelImp->getKernelRequiresUncachedMocs());
|
||||
EXPECT_TRUE(kernelImp->getKernelRequiresUncachedMocs());
|
||||
|
||||
Kernel::fromHandle(kernelHandle)->destroy();
|
||||
|
||||
|
@ -257,7 +262,7 @@ HWTEST2_F(ModuleUncachedBufferTest,
|
|||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||
|
||||
auto kernelImp = reinterpret_cast<L0::KernelImp *>(L0::Kernel::fromHandle(kernelHandle));
|
||||
auto kernelImp = reinterpret_cast<KernelImpUncachedTest *>(L0::Kernel::fromHandle(kernelHandle));
|
||||
|
||||
void *devicePtr = nullptr;
|
||||
ze_device_mem_alloc_desc_t deviceDesc = {};
|
||||
|
@ -274,8 +279,9 @@ HWTEST2_F(ModuleUncachedBufferTest,
|
|||
|
||||
uint32_t argIndex = 0u;
|
||||
kernelImp->setKernelArgUncached(argIndex, true);
|
||||
kernelImp->kernelRequiresUncachedMocsCount++;
|
||||
kernelImp->setArgBufferWithAlloc(argIndex, reinterpret_cast<uintptr_t>(devicePtr), gpuAlloc);
|
||||
EXPECT_FALSE(kernelImp->getKernelRequiresUncachedMocs());
|
||||
EXPECT_TRUE(kernelImp->getKernelRequiresUncachedMocs());
|
||||
|
||||
auto argInfo = kernelImp->getImmutableData()->getDescriptor().payloadMappings.explicitArgs[argIndex].as<NEO::ArgDescPointer>();
|
||||
auto surfaceStateAddressRaw = ptrOffset(kernelImp->getSurfaceStateHeapData(), argInfo.bindful);
|
||||
|
|
Loading…
Reference in New Issue