From ca023fa5327dd2f94f54ebf9fbfa102526bca86e Mon Sep 17 00:00:00 2001 From: Zbigniew Zdanowicz Date: Mon, 12 Oct 2020 12:39:32 +0200 Subject: [PATCH] Fix L3 and Math programming Change-Id: I4ffd729beeed95b0806dd284665c72fb424b0ffc Signed-off-by: Zbigniew Zdanowicz --- .../command_container/command_encoder.inl | 4 +- .../gen12lp/command_encoder_gen12lp.cpp | 4 ++ .../unit_test/encoders/test_encode_math.cpp | 49 -------------- shared/test/unit_test/gen11/CMakeLists.txt | 2 +- .../gen11/test_encode_math_gen11.cpp | 66 ++++++++++++++++++ shared/test/unit_test/gen12lp/CMakeLists.txt | 3 +- .../gen12lp/test_command_encoder_gen12lp.cpp | 40 +++++++++-- .../gen12lp/test_encode_math_gen12lp.cpp | 67 +++++++++++++++++++ shared/test/unit_test/gen8/CMakeLists.txt | 1 + .../unit_test/gen8/test_encode_math_gen8.cpp | 66 ++++++++++++++++++ shared/test/unit_test/gen9/CMakeLists.txt | 3 +- .../gen9/test_command_encoder_gen9.cpp | 4 +- .../unit_test/gen9/test_encode_math_gen9.cpp | 66 ++++++++++++++++++ 13 files changed, 312 insertions(+), 63 deletions(-) create mode 100644 shared/test/unit_test/gen11/test_encode_math_gen11.cpp create mode 100644 shared/test/unit_test/gen12lp/test_encode_math_gen12lp.cpp create mode 100644 shared/test/unit_test/gen8/test_encode_math_gen8.cpp create mode 100644 shared/test/unit_test/gen9/test_encode_math_gen9.cpp diff --git a/shared/source/command_container/command_encoder.inl b/shared/source/command_container/command_encoder.inl index 701e654344..d04c2e7038 100644 --- a/shared/source/command_container/command_encoder.inl +++ b/shared/source/command_container/command_encoder.inl @@ -72,7 +72,7 @@ void EncodeMathMMIO::encodeMulRegVal(CommandContainer &container, uint32 } EncodeSetMMIO::encodeREG(container, CS_GPR_R0, offset); - EncodeSetMMIO::encodeIMM(container, CS_GPR_R1, 0, false); + EncodeSetMMIO::encodeIMM(container, CS_GPR_R1, 0, true); i = 0; while (i < logLws) { @@ -100,7 +100,7 @@ void EncodeMathMMIO::encodeMulRegVal(CommandContainer &container, uint32 template void EncodeMathMMIO::encodeGreaterThanPredicate(CommandContainer &container, uint64_t firstOperand, uint32_t secondOperand) { EncodeSetMMIO::encodeMEM(container, CS_GPR_R0, firstOperand); - EncodeSetMMIO::encodeIMM(container, CS_GPR_R1, secondOperand, false); + EncodeSetMMIO::encodeIMM(container, CS_GPR_R1, secondOperand, true); /* CS_GPR_R* registers map to AluRegisters::R_* registers */ EncodeMath::greaterThan(container, AluRegisters::R_0, diff --git a/shared/source/gen12lp/command_encoder_gen12lp.cpp b/shared/source/gen12lp/command_encoder_gen12lp.cpp index b91066c00c..64fe790326 100644 --- a/shared/source/gen12lp/command_encoder_gen12lp.cpp +++ b/shared/source/gen12lp/command_encoder_gen12lp.cpp @@ -71,6 +71,10 @@ bool EncodeSurfaceState::doBindingTablePrefetch() { return false; } +template <> +void EncodeL3State::encode(CommandContainer &container, bool enableSLM) { +} + template struct EncodeDispatchKernel; template struct EncodeStates; template struct EncodeMath; diff --git a/shared/test/unit_test/encoders/test_encode_math.cpp b/shared/test/unit_test/encoders/test_encode_math.cpp index 9362cac1bd..ce000b709f 100644 --- a/shared/test/unit_test/encoders/test_encode_math.cpp +++ b/shared/test/unit_test/encoders/test_encode_math.cpp @@ -128,55 +128,6 @@ HWTEST_F(CommandEncoderMathTest, commandReserve) { static_cast(NUM_ALU_INST_FOR_READ_MODIFY_WRITE - 1)); } -HWTEST_F(CommandEncoderMathTest, appendsAGreaterThanPredicate) { - using MI_LOAD_REGISTER_MEM = typename FamilyType::MI_LOAD_REGISTER_MEM; - using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; - using MI_LOAD_REGISTER_REG = typename FamilyType::MI_LOAD_REGISTER_REG; - using MI_MATH = typename FamilyType::MI_MATH; - using MI_MATH_ALU_INST_INLINE = typename FamilyType::MI_MATH_ALU_INST_INLINE; - - CommandContainer cmdContainer; - cmdContainer.initialize(pDevice); - - EncodeMathMMIO::encodeGreaterThanPredicate(cmdContainer, 0xDEADBEEFCAF0u, 17u); - - GenCmdList commands; - CmdParse::parseCommandBuffer(commands, ptrOffset(cmdContainer.getCommandStream()->getCpuBase(), 0), cmdContainer.getCommandStream()->getUsed()); - - auto itor = commands.begin(); - - itor = find(itor, commands.end()); - ASSERT_NE(itor, commands.end()); - - auto cmdMEM = genCmdCast(*itor); - EXPECT_EQ(cmdMEM->getRegisterAddress(), CS_GPR_R0); - EXPECT_EQ(cmdMEM->getMemoryAddress(), 0xDEADBEEFCAF0u); - - itor = find(itor, commands.end()); - ASSERT_NE(itor, commands.end()); - - auto cmdIMM = genCmdCast(*itor); - EXPECT_EQ(cmdIMM->getRegisterOffset(), CS_GPR_R1); - EXPECT_EQ(cmdIMM->getDataDword(), 17u); - - itor = find(itor, commands.end()); - ASSERT_NE(itor, commands.end()); - - auto cmdMATH = genCmdCast(*itor); - EXPECT_EQ(cmdMATH->DW0.BitField.DwordLength, 3u); - - itor = find(itor, commands.end()); - ASSERT_NE(itor, commands.end()); - - auto cmdREG = genCmdCast(*itor); - EXPECT_EQ(cmdREG->getSourceRegisterAddress(), CS_GPR_R2); - EXPECT_EQ(cmdREG->getDestinationRegisterAddress(), CS_PREDICATE_RESULT); - - auto cmdALU = reinterpret_cast(cmdMATH + 3); - EXPECT_EQ(cmdALU->DW0.BitField.ALUOpcode, - static_cast(AluRegisters::OPCODE_SUB)); -} - HWTEST_F(CommandEncoderMathTest, setGroupSizeIndirect) { using MI_MATH = typename FamilyType::MI_MATH; using MI_MATH_ALU_INST_INLINE = typename FamilyType::MI_MATH_ALU_INST_INLINE; diff --git a/shared/test/unit_test/gen11/CMakeLists.txt b/shared/test/unit_test/gen11/CMakeLists.txt index 019684f437..49b9707d78 100644 --- a/shared/test/unit_test/gen11/CMakeLists.txt +++ b/shared/test/unit_test/gen11/CMakeLists.txt @@ -5,7 +5,6 @@ # if(TESTS_GEN11) - set(NEO_CORE_TESTS_GEN11 ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/preamble_tests_gen11.cpp @@ -19,6 +18,7 @@ if(TESTS_GEN11) ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/command_encoder_tests_gen11.cpp ${CMAKE_CURRENT_SOURCE_DIR}/image_surface_state_tests_gen11.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_encode_math_gen11.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_preemption_gen11.cpp ${COMPUTE_RUNTIME_ULT_GEN11} ${NEO_SOURCE_DIR}/opencl/test/unit_test/gen11/unit_test_helper_gen11.cpp diff --git a/shared/test/unit_test/gen11/test_encode_math_gen11.cpp b/shared/test/unit_test/gen11/test_encode_math_gen11.cpp new file mode 100644 index 0000000000..d51baf25e4 --- /dev/null +++ b/shared/test/unit_test/gen11/test_encode_math_gen11.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2020 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/command_container/command_encoder.h" +#include "shared/source/helpers/register_offsets.h" +#include "shared/test/unit_test/cmd_parse/gen_cmd_parse.h" +#include "shared/test/unit_test/fixtures/device_fixture.h" + +#include "test.h" + +using namespace NEO; + +using CommandEncoderMathTestGen11 = Test; + +GEN11TEST_F(CommandEncoderMathTestGen11, WhenAppendsAGreaterThanThenPredicateCorrectlySet) { + using MI_LOAD_REGISTER_MEM = typename FamilyType::MI_LOAD_REGISTER_MEM; + using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; + using MI_LOAD_REGISTER_REG = typename FamilyType::MI_LOAD_REGISTER_REG; + using MI_MATH = typename FamilyType::MI_MATH; + using MI_MATH_ALU_INST_INLINE = typename FamilyType::MI_MATH_ALU_INST_INLINE; + + CommandContainer cmdContainer; + cmdContainer.initialize(pDevice); + + EncodeMathMMIO::encodeGreaterThanPredicate(cmdContainer, 0xDEADBEEFCAF0u, 17u); + + GenCmdList commands; + CmdParse::parseCommandBuffer(commands, ptrOffset(cmdContainer.getCommandStream()->getCpuBase(), 0), cmdContainer.getCommandStream()->getUsed()); + + auto itor = commands.begin(); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdMEM = genCmdCast(*itor); + EXPECT_EQ(cmdMEM->getRegisterAddress(), CS_GPR_R0); + EXPECT_EQ(cmdMEM->getMemoryAddress(), 0xDEADBEEFCAF0u); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdIMM = genCmdCast(*itor); + EXPECT_EQ(cmdIMM->getRegisterOffset(), CS_GPR_R1); + EXPECT_EQ(cmdIMM->getDataDword(), 17u); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdMATH = genCmdCast(*itor); + EXPECT_EQ(cmdMATH->DW0.BitField.DwordLength, 3u); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdREG = genCmdCast(*itor); + EXPECT_EQ(cmdREG->getSourceRegisterAddress(), CS_GPR_R2); + EXPECT_EQ(cmdREG->getDestinationRegisterAddress(), CS_PREDICATE_RESULT); + + auto cmdALU = reinterpret_cast(cmdMATH + 3); + EXPECT_EQ(cmdALU->DW0.BitField.ALUOpcode, + static_cast(AluRegisters::OPCODE_SUB)); +} diff --git a/shared/test/unit_test/gen12lp/CMakeLists.txt b/shared/test/unit_test/gen12lp/CMakeLists.txt index 8867ebdff2..8a8095dc2f 100644 --- a/shared/test/unit_test/gen12lp/CMakeLists.txt +++ b/shared/test/unit_test/gen12lp/CMakeLists.txt @@ -10,7 +10,6 @@ if(TESTS_GEN12LP) ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/simd_helper_tests_gen12lp.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_preamble_gen12lp.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/test_command_encoder_gen12lp.cpp ) set_property(GLOBAL PROPERTY NEO_CORE_TESTS_GEN12LP ${NEO_CORE_TESTS_GEN12LP}) add_subdirectories() @@ -19,6 +18,8 @@ if(TESTS_GEN12LP) ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/command_encoder_tests_gen12lp.cpp ${CMAKE_CURRENT_SOURCE_DIR}/image_surface_state_tests_gen12lp.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_command_encoder_gen12lp.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_encode_math_gen12lp.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_preemption_gen12lp.cpp ${COMPUTE_RUNTIME_ULT_GEN12LP} ${NEO_SOURCE_DIR}/opencl/test/unit_test/gen12lp/special_ult_helper_gen12lp.cpp diff --git a/shared/test/unit_test/gen12lp/test_command_encoder_gen12lp.cpp b/shared/test/unit_test/gen12lp/test_command_encoder_gen12lp.cpp index 9c7e2a16a5..4543ed3f0a 100644 --- a/shared/test/unit_test/gen12lp/test_command_encoder_gen12lp.cpp +++ b/shared/test/unit_test/gen12lp/test_command_encoder_gen12lp.cpp @@ -10,15 +10,15 @@ #include "shared/source/helpers/preamble.h" #include "shared/source/os_interface/os_context.h" #include "shared/test/unit_test/cmd_parse/gen_cmd_parse.h" +#include "shared/test/unit_test/fixtures/device_fixture.h" -#include "opencl/test/unit_test/fixtures/cl_device_fixture.h" #include "test.h" #include "reg_configs_common.h" using namespace NEO; -using CommandEncoderTest = Test; +using CommandEncoderTest = Test; GEN12LPTEST_F(CommandEncoderTest, givenAdjustStateComputeModeStateComputeModeShowsNonCoherencySet) { using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE; @@ -49,7 +49,7 @@ GEN12LPTEST_F(CommandEncoderTest, givenAdjustStateComputeModeStateComputeModeSho EXPECT_TRUE(memcmp(&expectedScmCmd, scmCmd, sizeof(STATE_COMPUTE_MODE)) == 0); } -GEN12LPTEST_F(CommandEncoderTest, givenCommandContainerWhenEncodeL3StateThenSetCorrectMMIO) { +GEN12LPTEST_F(CommandEncoderTest, givenCommandContainerWhenEncodeL3StateThenDoNotDispatchMMIOCommand) { CommandContainer cmdContainer; cmdContainer.initialize(pDevice); EncodeL3State::encode(cmdContainer, false); @@ -59,10 +59,7 @@ GEN12LPTEST_F(CommandEncoderTest, givenCommandContainerWhenEncodeL3StateThenSetC using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; auto itorLRI = find(commands.begin(), commands.end()); - ASSERT_NE(itorLRI, commands.end()); - auto cmd = genCmdCast(*itorLRI); - EXPECT_EQ(cmd->getRegisterOffset(), 0xB134u); - EXPECT_EQ(cmd->getDataDword(), 0xD0000020u); + EXPECT_EQ(itorLRI, commands.end()); } struct MockOsContext : public OsContext { @@ -117,3 +114,32 @@ GEN12LPTEST_F(CommandEncoderTest, givenVariousEngineTypesWhenEstimateCommandBuff EXPECT_EQ(expectedDiff, diff); } + +GEN12LPTEST_F(CommandEncoderTest, GivenGen12LpWhenProgrammingL3StateOnThenExpectNoCommandsDispatched) { + using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; + + CommandContainer cmdContainer; + cmdContainer.initialize(pDevice); + + EncodeL3State::encode(cmdContainer, true); + + GenCmdList commands; + CmdParse::parseCommandBuffer(commands, ptrOffset(cmdContainer.getCommandStream()->getCpuBase(), 0), cmdContainer.getCommandStream()->getUsed()); + + auto itorLRI = find(commands.begin(), commands.end()); + EXPECT_EQ(itorLRI, commands.end()); +} + +GEN12LPTEST_F(CommandEncoderTest, GivenGen12LpWhenProgrammingL3StateOffThenExpectNoCommandsDispatched) { + using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; + CommandContainer cmdContainer; + cmdContainer.initialize(pDevice); + + EncodeL3State::encode(cmdContainer, false); + + GenCmdList commands; + CmdParse::parseCommandBuffer(commands, ptrOffset(cmdContainer.getCommandStream()->getCpuBase(), 0), cmdContainer.getCommandStream()->getUsed()); + + auto itorLRI = find(commands.begin(), commands.end()); + EXPECT_EQ(itorLRI, commands.end()); +} diff --git a/shared/test/unit_test/gen12lp/test_encode_math_gen12lp.cpp b/shared/test/unit_test/gen12lp/test_encode_math_gen12lp.cpp new file mode 100644 index 0000000000..17d8296cd6 --- /dev/null +++ b/shared/test/unit_test/gen12lp/test_encode_math_gen12lp.cpp @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2020 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/command_container/command_encoder.h" +#include "shared/source/helpers/register_offsets.h" +#include "shared/test/unit_test/cmd_parse/gen_cmd_parse.h" +#include "shared/test/unit_test/fixtures/device_fixture.h" + +#include "test.h" + +using namespace NEO; + +using CommandEncoderMathTestGen12Lp = Test; + +GEN12LPTEST_F(CommandEncoderMathTestGen12Lp, WhenAppendsAGreaterThanThenPredicateCorrectlySetAndRemapEnabled) { + using MI_LOAD_REGISTER_MEM = typename FamilyType::MI_LOAD_REGISTER_MEM; + using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; + using MI_LOAD_REGISTER_REG = typename FamilyType::MI_LOAD_REGISTER_REG; + using MI_MATH = typename FamilyType::MI_MATH; + using MI_MATH_ALU_INST_INLINE = typename FamilyType::MI_MATH_ALU_INST_INLINE; + + CommandContainer cmdContainer; + cmdContainer.initialize(pDevice); + + EncodeMathMMIO::encodeGreaterThanPredicate(cmdContainer, 0xDEADBEEFCAF0u, 17u); + + GenCmdList commands; + CmdParse::parseCommandBuffer(commands, ptrOffset(cmdContainer.getCommandStream()->getCpuBase(), 0), cmdContainer.getCommandStream()->getUsed()); + + auto itor = commands.begin(); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdMEM = genCmdCast(*itor); + EXPECT_EQ(CS_GPR_R0, cmdMEM->getRegisterAddress()); + EXPECT_EQ(0xDEADBEEFCAF0u, cmdMEM->getMemoryAddress()); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdIMM = genCmdCast(*itor); + EXPECT_EQ(CS_GPR_R1, cmdIMM->getRegisterOffset()); + EXPECT_EQ(17u, cmdIMM->getDataDword()); + EXPECT_TRUE(cmdIMM->getMmioRemapEnable()); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdMATH = genCmdCast(*itor); + EXPECT_EQ(cmdMATH->DW0.BitField.DwordLength, 3u); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdREG = genCmdCast(*itor); + EXPECT_EQ(cmdREG->getSourceRegisterAddress(), CS_GPR_R2); + EXPECT_EQ(cmdREG->getDestinationRegisterAddress(), CS_PREDICATE_RESULT); + + auto cmdALU = reinterpret_cast(cmdMATH + 3); + EXPECT_EQ(cmdALU->DW0.BitField.ALUOpcode, + static_cast(AluRegisters::OPCODE_SUB)); +} diff --git a/shared/test/unit_test/gen8/CMakeLists.txt b/shared/test/unit_test/gen8/CMakeLists.txt index c9b263486e..832614156f 100644 --- a/shared/test/unit_test/gen8/CMakeLists.txt +++ b/shared/test/unit_test/gen8/CMakeLists.txt @@ -19,6 +19,7 @@ if(TESTS_GEN8) ${CMAKE_CURRENT_SOURCE_DIR}/command_encoder_tests_gen8.cpp ${CMAKE_CURRENT_SOURCE_DIR}/image_surface_state_tests_gen8.cpp ${CMAKE_CURRENT_SOURCE_DIR}/state_base_address_tests_gen8.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_encode_math_gen8.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_preemption_gen8.cpp ${COMPUTE_RUNTIME_ULT_GEN8} ${NEO_SOURCE_DIR}/opencl/test/unit_test/gen8/unit_test_helper_gen8.cpp diff --git a/shared/test/unit_test/gen8/test_encode_math_gen8.cpp b/shared/test/unit_test/gen8/test_encode_math_gen8.cpp new file mode 100644 index 0000000000..d1c2ab330b --- /dev/null +++ b/shared/test/unit_test/gen8/test_encode_math_gen8.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2020 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/command_container/command_encoder.h" +#include "shared/source/helpers/register_offsets.h" +#include "shared/test/unit_test/cmd_parse/gen_cmd_parse.h" +#include "shared/test/unit_test/fixtures/device_fixture.h" + +#include "test.h" + +using namespace NEO; + +using CommandEncoderMathTestGen8 = Test; + +GEN8TEST_F(CommandEncoderMathTestGen8, WhenAppendsAGreaterThanThenPredicateCorrectlySet) { + using MI_LOAD_REGISTER_MEM = typename FamilyType::MI_LOAD_REGISTER_MEM; + using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; + using MI_LOAD_REGISTER_REG = typename FamilyType::MI_LOAD_REGISTER_REG; + using MI_MATH = typename FamilyType::MI_MATH; + using MI_MATH_ALU_INST_INLINE = typename FamilyType::MI_MATH_ALU_INST_INLINE; + + CommandContainer cmdContainer; + cmdContainer.initialize(pDevice); + + EncodeMathMMIO::encodeGreaterThanPredicate(cmdContainer, 0xDEADBEEFCAF0u, 17u); + + GenCmdList commands; + CmdParse::parseCommandBuffer(commands, ptrOffset(cmdContainer.getCommandStream()->getCpuBase(), 0), cmdContainer.getCommandStream()->getUsed()); + + auto itor = commands.begin(); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdMEM = genCmdCast(*itor); + EXPECT_EQ(cmdMEM->getRegisterAddress(), CS_GPR_R0); + EXPECT_EQ(cmdMEM->getMemoryAddress(), 0xDEADBEEFCAF0u); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdIMM = genCmdCast(*itor); + EXPECT_EQ(cmdIMM->getRegisterOffset(), CS_GPR_R1); + EXPECT_EQ(cmdIMM->getDataDword(), 17u); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdMATH = genCmdCast(*itor); + EXPECT_EQ(cmdMATH->DW0.BitField.DwordLength, 3u); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdREG = genCmdCast(*itor); + EXPECT_EQ(cmdREG->getSourceRegisterAddress(), CS_GPR_R2); + EXPECT_EQ(cmdREG->getDestinationRegisterAddress(), CS_PREDICATE_RESULT); + + auto cmdALU = reinterpret_cast(cmdMATH + 3); + EXPECT_EQ(cmdALU->DW0.BitField.ALUOpcode, + static_cast(AluRegisters::OPCODE_SUB)); +} diff --git a/shared/test/unit_test/gen9/CMakeLists.txt b/shared/test/unit_test/gen9/CMakeLists.txt index 6041d6acf9..9ee3d82f5d 100644 --- a/shared/test/unit_test/gen9/CMakeLists.txt +++ b/shared/test/unit_test/gen9/CMakeLists.txt @@ -10,7 +10,6 @@ if(TESTS_GEN9) ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/preamble_tests_gen9.cpp ${CMAKE_CURRENT_SOURCE_DIR}/simd_helper_tests_gen9.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/test_command_encoder_gen9.cpp ) set_property(GLOBAL PROPERTY NEO_CORE_TESTS_GEN9 ${NEO_CORE_TESTS_GEN9}) add_subdirectories() @@ -19,6 +18,8 @@ if(TESTS_GEN9) ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/command_encoder_tests_gen9.cpp ${CMAKE_CURRENT_SOURCE_DIR}/image_surface_state_tests_gen9.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_command_encoder_gen9.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_encode_math_gen9.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_preemption_gen9.cpp ${COMPUTE_RUNTIME_ULT_GEN9} ${NEO_SOURCE_DIR}/opencl/test/unit_test/gen9/unit_test_helper_gen9.cpp diff --git a/shared/test/unit_test/gen9/test_command_encoder_gen9.cpp b/shared/test/unit_test/gen9/test_command_encoder_gen9.cpp index 064b03b3a8..a4aada49a5 100644 --- a/shared/test/unit_test/gen9/test_command_encoder_gen9.cpp +++ b/shared/test/unit_test/gen9/test_command_encoder_gen9.cpp @@ -8,15 +8,15 @@ #include "shared/source/command_container/cmdcontainer.h" #include "shared/source/command_container/command_encoder.h" #include "shared/test/unit_test/cmd_parse/gen_cmd_parse.h" +#include "shared/test/unit_test/fixtures/device_fixture.h" -#include "opencl/test/unit_test/fixtures/cl_device_fixture.h" #include "test.h" #include "reg_configs_common.h" using namespace NEO; -using CommandEncoderTest = Test; +using CommandEncoderTest = Test; GEN9TEST_F(CommandEncoderTest, appendsASetMMIO) { CommandContainer cmdContainer; diff --git a/shared/test/unit_test/gen9/test_encode_math_gen9.cpp b/shared/test/unit_test/gen9/test_encode_math_gen9.cpp new file mode 100644 index 0000000000..462672471d --- /dev/null +++ b/shared/test/unit_test/gen9/test_encode_math_gen9.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2020 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/command_container/command_encoder.h" +#include "shared/source/helpers/register_offsets.h" +#include "shared/test/unit_test/cmd_parse/gen_cmd_parse.h" +#include "shared/test/unit_test/fixtures/device_fixture.h" + +#include "test.h" + +using namespace NEO; + +using CommandEncoderMathTestGen9 = Test; + +GEN9TEST_F(CommandEncoderMathTestGen9, WhenAppendsAGreaterThanThenPredicateCorrectlySet) { + using MI_LOAD_REGISTER_MEM = typename FamilyType::MI_LOAD_REGISTER_MEM; + using MI_LOAD_REGISTER_IMM = typename FamilyType::MI_LOAD_REGISTER_IMM; + using MI_LOAD_REGISTER_REG = typename FamilyType::MI_LOAD_REGISTER_REG; + using MI_MATH = typename FamilyType::MI_MATH; + using MI_MATH_ALU_INST_INLINE = typename FamilyType::MI_MATH_ALU_INST_INLINE; + + CommandContainer cmdContainer; + cmdContainer.initialize(pDevice); + + EncodeMathMMIO::encodeGreaterThanPredicate(cmdContainer, 0xDEADBEEFCAF0u, 17u); + + GenCmdList commands; + CmdParse::parseCommandBuffer(commands, ptrOffset(cmdContainer.getCommandStream()->getCpuBase(), 0), cmdContainer.getCommandStream()->getUsed()); + + auto itor = commands.begin(); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdMEM = genCmdCast(*itor); + EXPECT_EQ(cmdMEM->getRegisterAddress(), CS_GPR_R0); + EXPECT_EQ(cmdMEM->getMemoryAddress(), 0xDEADBEEFCAF0u); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdIMM = genCmdCast(*itor); + EXPECT_EQ(cmdIMM->getRegisterOffset(), CS_GPR_R1); + EXPECT_EQ(cmdIMM->getDataDword(), 17u); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdMATH = genCmdCast(*itor); + EXPECT_EQ(cmdMATH->DW0.BitField.DwordLength, 3u); + + itor = find(itor, commands.end()); + ASSERT_NE(itor, commands.end()); + + auto cmdREG = genCmdCast(*itor); + EXPECT_EQ(cmdREG->getSourceRegisterAddress(), CS_GPR_R2); + EXPECT_EQ(cmdREG->getDestinationRegisterAddress(), CS_PREDICATE_RESULT); + + auto cmdALU = reinterpret_cast(cmdMATH + 3); + EXPECT_EQ(cmdALU->DW0.BitField.ALUOpcode, + static_cast(AluRegisters::OPCODE_SUB)); +}