1 /*
2 * Copyright (C) 2021 Intel Corporation
3 *
4 * SPDX-License-Identifier: MIT
5 *
6 */
7
8 #include "shared/source/command_stream/stream_properties.h"
9 #include "shared/source/debug_settings/debug_settings_manager.h"
10 #include "shared/test/common/helpers/debug_manager_state_restore.h"
11 #include "shared/test/common/test_macros/test.h"
12 #include "shared/test/unit_test/preamble/preamble_fixture.h"
13
14 #include "opencl/source/helpers/hardware_commands_helper.h"
15
16 using namespace NEO;
17
18 using PreambleCfeState = PreambleFixture;
HWTEST2_F(PreambleCfeState,givenXehpAndFlagCFEWeightedDispatchModeDisableSetFalseWhenCallingProgramVFEStateThenFieldWeightedDispatchModeDisableAreNotSet,IsXEHP)19 HWTEST2_F(PreambleCfeState, givenXehpAndFlagCFEWeightedDispatchModeDisableSetFalseWhenCallingProgramVFEStateThenFieldWeightedDispatchModeDisableAreNotSet, IsXEHP) {
20 using CFE_STATE = typename FamilyType::CFE_STATE;
21 DebugManagerStateRestore dbgRestore;
22 DebugManager.flags.CFEWeightedDispatchModeDisable.set(false);
23
24 auto pVfeCmd = PreambleHelper<FamilyType>::getSpaceForVfeState(&linearStream, *defaultHwInfo, EngineGroupType::RenderCompute);
25 StreamProperties streamProperties{};
26 streamProperties.frontEndState.setProperties(false, false, false, *defaultHwInfo);
27 PreambleHelper<FamilyType>::programVfeState(pVfeCmd, *defaultHwInfo, 0u, 0, 0, streamProperties);
28 parseCommands<FamilyType>(linearStream);
29 auto cfeStateIt = find<CFE_STATE *>(cmdList.begin(), cmdList.end());
30 ASSERT_NE(cmdList.end(), cfeStateIt);
31 auto cfeState = reinterpret_cast<CFE_STATE *>(*cfeStateIt);
32
33 EXPECT_FALSE(cfeState->getWeightedDispatchModeDisable());
34 }
HWTEST2_F(PreambleCfeState,givenXehpAndFlagCFEWeightedDispatchModeDisableSetTrueWhenCallingProgramVFEStateThenFieldWeightedDispatchModeDisableAreSet,IsXEHP)35 HWTEST2_F(PreambleCfeState, givenXehpAndFlagCFEWeightedDispatchModeDisableSetTrueWhenCallingProgramVFEStateThenFieldWeightedDispatchModeDisableAreSet, IsXEHP) {
36 using CFE_STATE = typename FamilyType::CFE_STATE;
37 DebugManagerStateRestore dbgRestore;
38 DebugManager.flags.CFEWeightedDispatchModeDisable.set(true);
39
40 auto pVfeCmd = PreambleHelper<FamilyType>::getSpaceForVfeState(&linearStream, *defaultHwInfo, EngineGroupType::RenderCompute);
41 StreamProperties streamProperties{};
42 streamProperties.frontEndState.setProperties(false, false, false, *defaultHwInfo);
43 PreambleHelper<FamilyType>::programVfeState(pVfeCmd, *defaultHwInfo, 0u, 0, 0, streamProperties);
44 parseCommands<FamilyType>(linearStream);
45 auto cfeStateIt = find<CFE_STATE *>(cmdList.begin(), cmdList.end());
46 ASSERT_NE(cmdList.end(), cfeStateIt);
47 auto cfeState = reinterpret_cast<CFE_STATE *>(*cfeStateIt);
48
49 EXPECT_TRUE(cfeState->getWeightedDispatchModeDisable());
50 }
51
HWTEST2_F(PreambleCfeState,givenXehpAndFlagCFEComputeOverdispatchDisableSetFalseWhenCallingProgramVFEStateThenFieldComputeOverdispatchDisableAreNotSet,IsXEHP)52 HWTEST2_F(PreambleCfeState, givenXehpAndFlagCFEComputeOverdispatchDisableSetFalseWhenCallingProgramVFEStateThenFieldComputeOverdispatchDisableAreNotSet, IsXEHP) {
53 using CFE_STATE = typename FamilyType::CFE_STATE;
54 DebugManagerStateRestore dbgRestore;
55 DebugManager.flags.CFEComputeOverdispatchDisable.set(false);
56
57 auto pVfeCmd = PreambleHelper<FamilyType>::getSpaceForVfeState(&linearStream, *defaultHwInfo, EngineGroupType::RenderCompute);
58 StreamProperties streamProperties{};
59 streamProperties.frontEndState.setProperties(false, false, false, *defaultHwInfo);
60 PreambleHelper<FamilyType>::programVfeState(pVfeCmd, *defaultHwInfo, 0u, 0, 0, streamProperties);
61 parseCommands<FamilyType>(linearStream);
62 auto cfeStateIt = find<CFE_STATE *>(cmdList.begin(), cmdList.end());
63 ASSERT_NE(cmdList.end(), cfeStateIt);
64 auto cfeState = reinterpret_cast<CFE_STATE *>(*cfeStateIt);
65
66 EXPECT_FALSE(cfeState->getComputeOverdispatchDisable());
67 }
HWTEST2_F(PreambleCfeState,givenXehpAndFlagCFEComputeOverdispatchDisableSetTrueWhenCallingProgramVFEStateThenFieldComputeOverdispatchDisableAreSet,IsXEHP)68 HWTEST2_F(PreambleCfeState, givenXehpAndFlagCFEComputeOverdispatchDisableSetTrueWhenCallingProgramVFEStateThenFieldComputeOverdispatchDisableAreSet, IsXEHP) {
69 using CFE_STATE = typename FamilyType::CFE_STATE;
70 DebugManagerStateRestore dbgRestore;
71 DebugManager.flags.CFEComputeOverdispatchDisable.set(true);
72
73 auto pVfeCmd = PreambleHelper<FamilyType>::getSpaceForVfeState(&linearStream, *defaultHwInfo, EngineGroupType::RenderCompute);
74 StreamProperties streamProperties{};
75 streamProperties.frontEndState.setProperties(false, false, false, *defaultHwInfo);
76 PreambleHelper<FamilyType>::programVfeState(pVfeCmd, *defaultHwInfo, 0u, 0, 0, streamProperties);
77 parseCommands<FamilyType>(linearStream);
78 auto cfeStateIt = find<CFE_STATE *>(cmdList.begin(), cmdList.end());
79 ASSERT_NE(cmdList.end(), cfeStateIt);
80 auto cfeState = reinterpret_cast<CFE_STATE *>(*cfeStateIt);
81
82 EXPECT_TRUE(cfeState->getComputeOverdispatchDisable());
83 }
84
HWTEST2_F(PreambleCfeState,givenXehpAndDisabledFusedEuWhenCfeStateProgrammedThenFusedEuDispatchSetToTrue,IsXEHP)85 HWTEST2_F(PreambleCfeState, givenXehpAndDisabledFusedEuWhenCfeStateProgrammedThenFusedEuDispatchSetToTrue, IsXEHP) {
86 using CFE_STATE = typename FamilyType::CFE_STATE;
87
88 auto hwInfo = *defaultHwInfo;
89 hwInfo.capabilityTable.fusedEuEnabled = false;
90
91 auto pVfeCmd = PreambleHelper<FamilyType>::getSpaceForVfeState(&linearStream, hwInfo, EngineGroupType::RenderCompute);
92 StreamProperties streamProperties{};
93 streamProperties.frontEndState.setProperties(false, false, false, hwInfo);
94 PreambleHelper<FamilyType>::programVfeState(pVfeCmd, hwInfo, 0u, 0, 0, streamProperties);
95 parseCommands<FamilyType>(linearStream);
96 auto cfeStateIt = find<CFE_STATE *>(cmdList.begin(), cmdList.end());
97 ASSERT_NE(cmdList.end(), cfeStateIt);
98 auto cfeState = reinterpret_cast<CFE_STATE *>(*cfeStateIt);
99
100 EXPECT_TRUE(cfeState->getFusedEuDispatch());
101 }
102
HWTEST2_F(PreambleCfeState,givenXehpAndEnabledFusedEuWhenCfeStateProgrammedThenFusedEuDispatchSetToFalse,IsXEHP)103 HWTEST2_F(PreambleCfeState, givenXehpAndEnabledFusedEuWhenCfeStateProgrammedThenFusedEuDispatchSetToFalse, IsXEHP) {
104 using CFE_STATE = typename FamilyType::CFE_STATE;
105
106 auto hwInfo = *defaultHwInfo;
107 hwInfo.capabilityTable.fusedEuEnabled = true;
108
109 auto pVfeCmd = PreambleHelper<FamilyType>::getSpaceForVfeState(&linearStream, hwInfo, EngineGroupType::RenderCompute);
110 StreamProperties streamProperties{};
111 streamProperties.frontEndState.setProperties(false, false, false, hwInfo);
112 PreambleHelper<FamilyType>::programVfeState(pVfeCmd, hwInfo, 0u, 0, 0, streamProperties);
113 parseCommands<FamilyType>(linearStream);
114 auto cfeStateIt = find<CFE_STATE *>(cmdList.begin(), cmdList.end());
115 ASSERT_NE(cmdList.end(), cfeStateIt);
116 auto cfeState = reinterpret_cast<CFE_STATE *>(*cfeStateIt);
117
118 EXPECT_FALSE(cfeState->getFusedEuDispatch());
119 }