1 /*
2  * Copyright (C) 2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #include "shared/source/command_stream/csr_definitions.h"
9 #include "shared/source/command_stream/linear_stream.h"
10 #include "shared/source/helpers/pipeline_select_helper.h"
11 #include "shared/source/helpers/preamble.h"
12 #include "shared/test/common/helpers/dispatch_flags_helper.h"
13 #include "shared/test/common/test_macros/test.h"
14 
15 using namespace NEO;
16 
17 using PreambleHelperTestsAdlp = ::testing::Test;
18 
ADLPTEST_F(PreambleHelperTestsAdlp,givenSpecialPipelineSelectModeDisabledWhenProgrammingPipelineSelectThenDisableSystolicMode)19 ADLPTEST_F(PreambleHelperTestsAdlp, givenSpecialPipelineSelectModeDisabledWhenProgrammingPipelineSelectThenDisableSystolicMode) {
20     using PIPELINE_SELECT = typename FamilyType::PIPELINE_SELECT;
21     constexpr static auto bufferSize = sizeof(PIPELINE_SELECT);
22 
23     char streamBuffer[bufferSize];
24     LinearStream stream{streamBuffer, sizeof(bufferSize)};
25 
26     DispatchFlags flags = DispatchFlagsHelper::createDefaultDispatchFlags();
27     flags.pipelineSelectArgs.specialPipelineSelectMode = false;
28 
29     auto *pCmd = static_cast<PIPELINE_SELECT *>(stream.getSpace(0));
30     PreambleHelper<FamilyType>::programPipelineSelect(&stream, flags.pipelineSelectArgs, ADLP::hwInfo);
31 
32     const auto expectedMask = pipelineSelectEnablePipelineSelectMaskBits | pipelineSelectMediaSamplerDopClockGateMaskBits | pipelineSelectSystolicModeEnableMaskBits;
33     EXPECT_FALSE(pCmd->getSpecialModeEnable());
34     EXPECT_EQ(expectedMask, pCmd->getMaskBits());
35     EXPECT_EQ(PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU, pCmd->getPipelineSelection());
36 }
37 
ADLPTEST_F(PreambleHelperTestsAdlp,givenSpecialPipelineSelectModeEnabledWhenProgrammingPipelineSelectThenEnableSystolicMode)38 ADLPTEST_F(PreambleHelperTestsAdlp, givenSpecialPipelineSelectModeEnabledWhenProgrammingPipelineSelectThenEnableSystolicMode) {
39     using PIPELINE_SELECT = typename FamilyType::PIPELINE_SELECT;
40     constexpr static auto bufferSize = sizeof(PIPELINE_SELECT);
41 
42     char streamBuffer[bufferSize];
43     LinearStream stream{streamBuffer, sizeof(bufferSize)};
44 
45     DispatchFlags flags = DispatchFlagsHelper::createDefaultDispatchFlags();
46     flags.pipelineSelectArgs.specialPipelineSelectMode = true;
47 
48     auto *pCmd = static_cast<PIPELINE_SELECT *>(stream.getSpace(0));
49     PreambleHelper<FamilyType>::programPipelineSelect(&stream, flags.pipelineSelectArgs, ADLP::hwInfo);
50 
51     const auto expectedMask = pipelineSelectEnablePipelineSelectMaskBits | pipelineSelectMediaSamplerDopClockGateMaskBits | pipelineSelectSystolicModeEnableMaskBits;
52     EXPECT_TRUE(pCmd->getSpecialModeEnable());
53     EXPECT_EQ(expectedMask, pCmd->getMaskBits());
54     EXPECT_EQ(PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU, pCmd->getPipelineSelection());
55 }
56