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 }