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