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);
|
NEO::patchPointer(ArrayRef<uint8_t>(crossThreadData.get(), crossThreadDataSize), arg, val);
|
||||||
if (NEO::isValidOffset(arg.bindful) || NEO::isValidOffset(arg.bindless)) {
|
if (NEO::isValidOffset(arg.bindful) || NEO::isValidOffset(arg.bindless)) {
|
||||||
setBufferSurfaceState(argIndex, reinterpret_cast<void *>(val), allocation);
|
setBufferSurfaceState(argIndex, reinterpret_cast<void *>(val), allocation);
|
||||||
} else {
|
}
|
||||||
|
|
||||||
auto allocData = this->module->getDevice()->getDriverHandle()->getSvmAllocsManager()->getSVMAlloc(reinterpret_cast<void *>(allocation->getGpuAddress()));
|
auto allocData = this->module->getDevice()->getDriverHandle()->getSvmAllocsManager()->getSVMAlloc(reinterpret_cast<void *>(allocation->getGpuAddress()));
|
||||||
if (allocData) {
|
if (allocData) {
|
||||||
bool argWasUncacheable = isArgUncached[argIndex];
|
bool argWasUncacheable = isArgUncached[argIndex];
|
||||||
|
@ -508,7 +509,7 @@ ze_result_t KernelImp::setArgBufferWithAlloc(uint32_t argIndex, uintptr_t argVal
|
||||||
}
|
}
|
||||||
this->setKernelArgUncached(argIndex, argIsUncacheable);
|
this->setKernelArgUncached(argIndex, argIsUncacheable);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
residencyContainer[argIndex] = allocation;
|
residencyContainer[argIndex] = allocation;
|
||||||
|
|
||||||
return ZE_RESULT_SUCCESS;
|
return ZE_RESULT_SUCCESS;
|
||||||
|
|
|
@ -141,6 +141,10 @@ HWTEST2_F(ModuleTest, givenNonPatchedTokenThenSurfaceBaseAddressIsCorrectlySet,
|
||||||
|
|
||||||
using ModuleUncachedBufferTest = Test<ModuleFixture>;
|
using ModuleUncachedBufferTest = Test<ModuleFixture>;
|
||||||
|
|
||||||
|
struct KernelImpUncachedTest : public KernelImp {
|
||||||
|
using KernelImp::kernelRequiresUncachedMocsCount;
|
||||||
|
};
|
||||||
|
|
||||||
HWTEST2_F(ModuleUncachedBufferTest,
|
HWTEST2_F(ModuleUncachedBufferTest,
|
||||||
givenKernelWithNonUncachedArgumentAndPreviouslyNotSetUncachedThenUncachedMocsNotSet, ModuleTestSupport) {
|
givenKernelWithNonUncachedArgumentAndPreviouslyNotSetUncachedThenUncachedMocsNotSet, ModuleTestSupport) {
|
||||||
ze_kernel_handle_t kernelHandle;
|
ze_kernel_handle_t kernelHandle;
|
||||||
|
@ -186,7 +190,7 @@ HWTEST2_F(ModuleUncachedBufferTest,
|
||||||
|
|
||||||
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
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;
|
void *devicePtr = nullptr;
|
||||||
ze_device_mem_alloc_desc_t deviceDesc = {};
|
ze_device_mem_alloc_desc_t deviceDesc = {};
|
||||||
|
@ -202,6 +206,7 @@ HWTEST2_F(ModuleUncachedBufferTest,
|
||||||
|
|
||||||
uint32_t argIndex = 0u;
|
uint32_t argIndex = 0u;
|
||||||
kernelImp->setKernelArgUncached(argIndex, true);
|
kernelImp->setKernelArgUncached(argIndex, true);
|
||||||
|
kernelImp->kernelRequiresUncachedMocsCount++;
|
||||||
kernelImp->setArgBufferWithAlloc(argIndex, reinterpret_cast<uintptr_t>(devicePtr), gpuAlloc);
|
kernelImp->setArgBufferWithAlloc(argIndex, reinterpret_cast<uintptr_t>(devicePtr), gpuAlloc);
|
||||||
EXPECT_FALSE(kernelImp->getKernelRequiresUncachedMocs());
|
EXPECT_FALSE(kernelImp->getKernelRequiresUncachedMocs());
|
||||||
|
|
||||||
|
@ -238,7 +243,7 @@ HWTEST2_F(ModuleUncachedBufferTest,
|
||||||
|
|
||||||
uint32_t argIndex = 0u;
|
uint32_t argIndex = 0u;
|
||||||
kernelImp->setArgBufferWithAlloc(argIndex, reinterpret_cast<uintptr_t>(devicePtr), gpuAlloc);
|
kernelImp->setArgBufferWithAlloc(argIndex, reinterpret_cast<uintptr_t>(devicePtr), gpuAlloc);
|
||||||
EXPECT_FALSE(kernelImp->getKernelRequiresUncachedMocs());
|
EXPECT_TRUE(kernelImp->getKernelRequiresUncachedMocs());
|
||||||
|
|
||||||
Kernel::fromHandle(kernelHandle)->destroy();
|
Kernel::fromHandle(kernelHandle)->destroy();
|
||||||
|
|
||||||
|
@ -257,7 +262,7 @@ HWTEST2_F(ModuleUncachedBufferTest,
|
||||||
|
|
||||||
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
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;
|
void *devicePtr = nullptr;
|
||||||
ze_device_mem_alloc_desc_t deviceDesc = {};
|
ze_device_mem_alloc_desc_t deviceDesc = {};
|
||||||
|
@ -274,8 +279,9 @@ HWTEST2_F(ModuleUncachedBufferTest,
|
||||||
|
|
||||||
uint32_t argIndex = 0u;
|
uint32_t argIndex = 0u;
|
||||||
kernelImp->setKernelArgUncached(argIndex, true);
|
kernelImp->setKernelArgUncached(argIndex, true);
|
||||||
|
kernelImp->kernelRequiresUncachedMocsCount++;
|
||||||
kernelImp->setArgBufferWithAlloc(argIndex, reinterpret_cast<uintptr_t>(devicePtr), gpuAlloc);
|
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 argInfo = kernelImp->getImmutableData()->getDescriptor().payloadMappings.explicitArgs[argIndex].as<NEO::ArgDescPointer>();
|
||||||
auto surfaceStateAddressRaw = ptrOffset(kernelImp->getSurfaceStateHeapData(), argInfo.bindful);
|
auto surfaceStateAddressRaw = ptrOffset(kernelImp->getSurfaceStateHeapData(), argInfo.bindful);
|
||||||
|
|
Loading…
Reference in New Issue