test: adjust fillBuffer builtIn type for heapless

Related-To: NEO-10641
Signed-off-by: Kamil Kopryk <kamil.kopryk@intel.com>
This commit is contained in:
Kamil Kopryk 2024-07-29 14:48:48 +00:00 committed by Compute-Runtime-Automation
parent 796edfeeb5
commit 6796f41c77
1 changed files with 24 additions and 7 deletions

View File

@ -5,6 +5,7 @@
*
*/
#include "shared/source/helpers/compiler_product_helper.h"
#include "shared/source/memory_manager/internal_allocation_storage.h"
#include "shared/source/memory_manager/unified_memory_manager.h"
#include "shared/test/common/mocks/mock_builtins.h"
@ -37,6 +38,9 @@ struct BaseEnqueueSvmMemFillFixture : public ClDeviceFixture,
ASSERT_NE(nullptr, svmData);
svmAlloc = svmData->gpuAllocations.getGraphicsAllocation(pDevice->getRootDeviceIndex());
ASSERT_NE(nullptr, svmAlloc);
auto &compilerProductHelper = pDevice->getCompilerProductHelper();
this->useHeapless = compilerProductHelper.isHeaplessModeEnabled();
}
void tearDown() {
@ -51,6 +55,15 @@ struct BaseEnqueueSvmMemFillFixture : public ClDeviceFixture,
const uint64_t pattern[16] = {0x0011223344556677, 0x8899AABBCCDDEEFF, 0xFFEEDDCCBBAA9988, 0x7766554433221100,
0xFFEEDDCCBBAA9988, 0x7766554433221100, 0x0011223344556677, 0x8899AABBCCDDEEFF};
size_t patternSize = 0x10;
EBuiltInOps::Type getAdjustedFillBufferBuiltIn() {
if (useHeapless) {
return EBuiltInOps::fillBufferStatelessHeapless;
}
return EBuiltInOps::fillBuffer;
}
bool useHeapless = false;
};
using BaseEnqueueSvmMemFillTest = Test<BaseEnqueueSvmMemFillFixture>;
@ -65,18 +78,20 @@ HWTEST_F(BaseEnqueueSvmMemFillTest, givenEnqueueSVMMemFillWhenUsingFillBufferBui
size_t patternSize;
};
auto builtIn = getAdjustedFillBufferBuiltIn();
auto builtIns = new MockBuiltins();
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
auto &origBuilder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(
EBuiltInOps::fillBuffer,
builtIn,
pCmdQ->getClDevice());
ASSERT_NE(nullptr, &origBuilder);
// note that we need to store the returned value, as it is an unique pointer storing original builder, which will be later invoked
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
EBuiltInOps::fillBuffer,
builtIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockFillBufferBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder, pattern, patternSize)));
size_t patternSize = 0x10u;
@ -102,7 +117,7 @@ HWTEST_F(BaseEnqueueSvmMemFillTest, givenEnqueueSVMMemFillWhenUsingFillBufferBui
// return mock builder
auto &newBuilder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(
EBuiltInOps::fillBuffer,
builtIn,
pCmdQ->getClDevice());
ASSERT_NE(nullptr, &origBuilder);
@ -147,19 +162,21 @@ HWTEST_P(EnqueueSvmMemFillTest, givenEnqueueSVMMemFillWhenUsingFillBufferBuilder
size_t patternSize;
};
auto builtIn = getAdjustedFillBufferBuiltIn();
auto builtIns = new MockBuiltins();
MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns);
// retrieve original builder
auto &origBuilder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(
EBuiltInOps::fillBuffer,
builtIn,
pCmdQ->getClDevice());
ASSERT_NE(nullptr, &origBuilder);
// substitute original builder with mock builder
auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
EBuiltInOps::fillBuffer,
builtIn,
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockFillBufferBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder, pattern, patternSize)));
EXPECT_EQ(&origBuilder, oldBuilder.get());
@ -178,13 +195,13 @@ HWTEST_P(EnqueueSvmMemFillTest, givenEnqueueSVMMemFillWhenUsingFillBufferBuilder
// restore original builder and retrieve mock builder
auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder(
rootDeviceIndex,
EBuiltInOps::fillBuffer,
builtIn,
std::move(oldBuilder));
EXPECT_NE(nullptr, newBuilder);
// check if original builder is restored correctly
auto &restoredBuilder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(
EBuiltInOps::fillBuffer,
builtIn,
pCmdQ->getClDevice());
EXPECT_EQ(&origBuilder, &restoredBuilder);