test: add unit tests for command encoder xe hpg
Related-To: NEO-8187 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
parent
4f4d2979cf
commit
4bd992b108
|
@ -6,13 +6,16 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "shared/source/command_container/command_encoder.h"
|
#include "shared/source/command_container/command_encoder.h"
|
||||||
|
#include "shared/source/helpers/hw_walk_order.h"
|
||||||
#include "shared/source/os_interface/product_helper.h"
|
#include "shared/source/os_interface/product_helper.h"
|
||||||
#include "shared/source/os_interface/product_helper_hw.h"
|
#include "shared/source/os_interface/product_helper_hw.h"
|
||||||
#include "shared/test//common/helpers/raii_product_helper.h"
|
#include "shared/test//common/helpers/raii_product_helper.h"
|
||||||
#include "shared/test/common/helpers/default_hw_info.h"
|
#include "shared/test/common/helpers/default_hw_info.h"
|
||||||
#include "shared/test/common/helpers/variable_backup.h"
|
#include "shared/test/common/helpers/variable_backup.h"
|
||||||
|
#include "shared/test/common/mocks/mock_device.h"
|
||||||
#include "shared/test/common/mocks/mock_execution_environment.h"
|
#include "shared/test/common/mocks/mock_execution_environment.h"
|
||||||
#include "shared/test/common/test_macros/hw_test.h"
|
#include "shared/test/common/test_macros/hw_test.h"
|
||||||
|
#include "shared/test/unit_test/fixtures/command_container_fixture.h"
|
||||||
|
|
||||||
#include "hw_cmds_xe_hpg_core_base.h"
|
#include "hw_cmds_xe_hpg_core_base.h"
|
||||||
|
|
||||||
|
@ -60,3 +63,76 @@ HWTEST2_F(CommandEncodeStatesTestXeHpgCore, givenRequiredWorkGroupOrderAndIsAdju
|
||||||
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, linearOrder, rootDeviceEnvironment);
|
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, linearOrder, rootDeviceEnvironment);
|
||||||
EXPECT_EQ(WALKER_TYPE::DISPATCH_WALK_ORDER::LINERAR_WALKER, walkerCmd.getDispatchWalkOrder());
|
EXPECT_EQ(WALKER_TYPE::DISPATCH_WALK_ORDER::LINERAR_WALKER, walkerCmd.getDispatchWalkOrder());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using EncodeKernelXeHpgCoreTest = Test<CommandEncodeStatesFixture>;
|
||||||
|
|
||||||
|
XE_HPG_CORETEST_F(EncodeKernelXeHpgCoreTest, givenRequiredWorkGroupOrderWhenCallAdjustWalkOrderThenDispatchWalkOrderIsProgrammedCorrectly) {
|
||||||
|
using WALKER_TYPE = typename FamilyType::WALKER_TYPE;
|
||||||
|
|
||||||
|
WALKER_TYPE walkerCmd{};
|
||||||
|
uint32_t yOrder = 2u;
|
||||||
|
|
||||||
|
auto &productHelper = getHelper<ProductHelper>();
|
||||||
|
auto releaseHelper = getReleaseHelper();
|
||||||
|
auto &rootDeviceEnvironment = this->pDevice->getRootDeviceEnvironment();
|
||||||
|
auto isExpectedNewWalkOrderApplied = productHelper.isAdjustWalkOrderAvailable(releaseHelper);
|
||||||
|
|
||||||
|
EXPECT_EQ(HwWalkOrderHelper::compatibleDimensionOrders[yOrder], HwWalkOrderHelper::yOrderWalk);
|
||||||
|
|
||||||
|
auto dispatchWalkOrderBeforeAdjust = walkerCmd.getDispatchWalkOrder();
|
||||||
|
|
||||||
|
uint32_t fakeOrder = 5u;
|
||||||
|
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, fakeOrder, rootDeviceEnvironment);
|
||||||
|
EXPECT_EQ(dispatchWalkOrderBeforeAdjust, walkerCmd.getDispatchWalkOrder()); // no change
|
||||||
|
|
||||||
|
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, yOrder, rootDeviceEnvironment);
|
||||||
|
auto expectedWalkOrder = isExpectedNewWalkOrderApplied ? WALKER_TYPE::DISPATCH_WALK_ORDER::Y_ORDER_WALKER : dispatchWalkOrderBeforeAdjust;
|
||||||
|
EXPECT_EQ(expectedWalkOrder, walkerCmd.getDispatchWalkOrder());
|
||||||
|
|
||||||
|
uint32_t linearOrder = 0u;
|
||||||
|
EXPECT_EQ(HwWalkOrderHelper::compatibleDimensionOrders[linearOrder], HwWalkOrderHelper::linearWalk);
|
||||||
|
|
||||||
|
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, linearOrder, rootDeviceEnvironment);
|
||||||
|
expectedWalkOrder = isExpectedNewWalkOrderApplied ? WALKER_TYPE::DISPATCH_WALK_ORDER::LINERAR_WALKER : dispatchWalkOrderBeforeAdjust;
|
||||||
|
EXPECT_EQ(expectedWalkOrder, walkerCmd.getDispatchWalkOrder());
|
||||||
|
}
|
||||||
|
|
||||||
|
XE_HPG_CORETEST_F(EncodeKernelXeHpgCoreTest, givenRequiredWorkGroupOrderWhenCallEncodeThreadDataThenDispatchWalkOrderIsProgrammedCorrectly) {
|
||||||
|
using WALKER_TYPE = typename FamilyType::WALKER_TYPE;
|
||||||
|
WALKER_TYPE walkerCmd = FamilyType::cmdInitGpgpuWalker;
|
||||||
|
|
||||||
|
uint32_t startWorkGroup[3] = {1, 1, 1};
|
||||||
|
uint32_t numWorkGroups[3] = {1, 1, 1};
|
||||||
|
uint32_t workGroupSizes[3] = {1, 1, 1};
|
||||||
|
|
||||||
|
auto &productHelper = getHelper<ProductHelper>();
|
||||||
|
auto releaseHelper = getReleaseHelper();
|
||||||
|
|
||||||
|
auto isExpectedNewWalkOrderApplied = productHelper.isAdjustWalkOrderAvailable(releaseHelper);
|
||||||
|
auto dispatchWalkOrderBeforeAdjust = walkerCmd.getDispatchWalkOrder();
|
||||||
|
auto &rootDeviceEnvironment = this->pDevice->getRootDeviceEnvironment();
|
||||||
|
|
||||||
|
uint32_t yOrder = 2u;
|
||||||
|
EXPECT_EQ(HwWalkOrderHelper::compatibleDimensionOrders[yOrder], HwWalkOrderHelper::yOrderWalk);
|
||||||
|
|
||||||
|
auto expectedWalkOrder = isExpectedNewWalkOrderApplied ? WALKER_TYPE::DISPATCH_WALK_ORDER::Y_ORDER_WALKER : dispatchWalkOrderBeforeAdjust;
|
||||||
|
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, 0, 3,
|
||||||
|
0, 1, false, false, true, yOrder, rootDeviceEnvironment);
|
||||||
|
EXPECT_EQ(expectedWalkOrder, walkerCmd.getDispatchWalkOrder());
|
||||||
|
|
||||||
|
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, 0, 3,
|
||||||
|
0, 1, true, false, true, yOrder, rootDeviceEnvironment);
|
||||||
|
EXPECT_EQ(expectedWalkOrder, walkerCmd.getDispatchWalkOrder());
|
||||||
|
|
||||||
|
uint32_t linearOrder = 0u;
|
||||||
|
EXPECT_EQ(HwWalkOrderHelper::compatibleDimensionOrders[linearOrder], HwWalkOrderHelper::linearWalk);
|
||||||
|
|
||||||
|
expectedWalkOrder = isExpectedNewWalkOrderApplied ? WALKER_TYPE::DISPATCH_WALK_ORDER::LINERAR_WALKER : dispatchWalkOrderBeforeAdjust;
|
||||||
|
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, 0, 3,
|
||||||
|
0, 1, false, false, true, linearOrder, rootDeviceEnvironment);
|
||||||
|
EXPECT_EQ(expectedWalkOrder, walkerCmd.getDispatchWalkOrder());
|
||||||
|
|
||||||
|
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, 0, 3,
|
||||||
|
0, 1, true, false, true, linearOrder, rootDeviceEnvironment);
|
||||||
|
EXPECT_EQ(expectedWalkOrder, walkerCmd.getDispatchWalkOrder());
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue