mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 23:03:02 +08:00
New command encoders
Change-Id: I39b0f8a0bff4fa4ff5072e6a6893fb8b41df1768 Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
2e64471f58
commit
5ddabac3c0
@@ -158,4 +158,27 @@ template <typename GfxFamily>
|
||||
struct EncodeComputeMode {
|
||||
static void adjustComputeMode(CommandContainer &container, uint32_t numGrfRequired);
|
||||
};
|
||||
} // namespace NEO
|
||||
|
||||
template <typename GfxFamily>
|
||||
struct EncodeSempahore {
|
||||
using MI_SEMAPHORE_WAIT = typename GfxFamily::MI_SEMAPHORE_WAIT;
|
||||
using COMPARE_OPERATION = typename GfxFamily::MI_SEMAPHORE_WAIT::COMPARE_OPERATION;
|
||||
|
||||
static void programMiSemaphoreWait(MI_SEMAPHORE_WAIT *cmd,
|
||||
uint64_t compareAddress,
|
||||
uint32_t compareData,
|
||||
COMPARE_OPERATION compareMode);
|
||||
};
|
||||
|
||||
template <typename GfxFamily>
|
||||
struct EncodeAtomic {
|
||||
using MI_ATOMIC = typename GfxFamily::MI_ATOMIC;
|
||||
using ATOMIC_OPCODES = typename GfxFamily::MI_ATOMIC::ATOMIC_OPCODES;
|
||||
using DATA_SIZE = typename GfxFamily::MI_ATOMIC::DATA_SIZE;
|
||||
|
||||
static void programMiAtomic(MI_ATOMIC *atomic, uint64_t writeAddress,
|
||||
ATOMIC_OPCODES opcode,
|
||||
DATA_SIZE dataSize);
|
||||
};
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -291,4 +291,27 @@ size_t EncodeIndirectParams<Family>::getCmdsSizeForSetGroupSizeIndirect() {
|
||||
return 3 * (sizeof(MI_LOAD_REGISTER_REG) + sizeof(MI_LOAD_REGISTER_IMM) + sizeof(MI_MATH) + sizeof(MI_MATH_ALU_INST_INLINE) + sizeof(MI_STORE_REGISTER_MEM));
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
template <typename Family>
|
||||
void EncodeSempahore<Family>::programMiSemaphoreWait(MI_SEMAPHORE_WAIT *cmd,
|
||||
uint64_t compareAddress,
|
||||
uint32_t compareData,
|
||||
COMPARE_OPERATION compareMode) {
|
||||
*cmd = Family::cmdInitMiSemaphoreWait;
|
||||
cmd->setCompareOperation(compareMode);
|
||||
cmd->setSemaphoreDataDword(compareData);
|
||||
cmd->setSemaphoreGraphicsAddress(compareAddress);
|
||||
cmd->setWaitMode(MI_SEMAPHORE_WAIT::WAIT_MODE::WAIT_MODE_POLLING_MODE);
|
||||
}
|
||||
|
||||
template <typename Family>
|
||||
void EncodeAtomic<Family>::programMiAtomic(MI_ATOMIC *atomic, uint64_t writeAddress,
|
||||
ATOMIC_OPCODES opcode,
|
||||
DATA_SIZE dataSize) {
|
||||
*atomic = Family::cmdInitAtomic;
|
||||
atomic->setAtomicOpcode(opcode);
|
||||
atomic->setDataSize(dataSize);
|
||||
atomic->setMemoryAddress(static_cast<uint32_t>(writeAddress & 0x0000FFFFFFFFULL));
|
||||
atomic->setMemoryAddressHigh(static_cast<uint32_t>(writeAddress >> 32));
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -25,5 +25,6 @@ template struct EncodeMediaInterfaceDescriptorLoad<Family>;
|
||||
template struct EncodeStateBaseAddress<Family>;
|
||||
template struct EncodeStoreMMIO<Family>;
|
||||
template struct EncodeSurfaceState<Family>;
|
||||
|
||||
} // namespace NEO
|
||||
template struct EncodeAtomic<Family>;
|
||||
template struct EncodeSempahore<Family>;
|
||||
} // namespace NEO
|
||||
|
||||
@@ -45,5 +45,7 @@ template struct EncodeMediaInterfaceDescriptorLoad<Family>;
|
||||
template struct EncodeStateBaseAddress<Family>;
|
||||
template struct EncodeStoreMMIO<Family>;
|
||||
template struct EncodeSurfaceState<Family>;
|
||||
template struct EncodeAtomic<Family>;
|
||||
template struct EncodeSempahore<Family>;
|
||||
|
||||
} // namespace NEO
|
||||
} // namespace NEO
|
||||
|
||||
@@ -26,5 +26,7 @@ template struct EncodeMediaInterfaceDescriptorLoad<Family>;
|
||||
template struct EncodeStateBaseAddress<Family>;
|
||||
template struct EncodeStoreMMIO<Family>;
|
||||
template struct EncodeSurfaceState<Family>;
|
||||
template struct EncodeAtomic<Family>;
|
||||
template struct EncodeSempahore<Family>;
|
||||
|
||||
} // namespace NEO
|
||||
@@ -26,5 +26,6 @@ template struct EncodeMediaInterfaceDescriptorLoad<Family>;
|
||||
template struct EncodeStateBaseAddress<Family>;
|
||||
template struct EncodeStoreMMIO<Family>;
|
||||
template struct EncodeSurfaceState<Family>;
|
||||
|
||||
} // namespace NEO
|
||||
template struct EncodeAtomic<Family>;
|
||||
template struct EncodeSempahore<Family>;
|
||||
} // namespace NEO
|
||||
|
||||
@@ -6,10 +6,12 @@
|
||||
|
||||
set(NEO_CORE_ENCODERS_TESTS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_encode_atomic.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_encode_dispatch_kernel.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_encode_flush.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_encode_math.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_encode_media_interface_descriptor.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_encode_semaphore.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_encode_set_mmio.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_encode_states.cpp
|
||||
)
|
||||
|
||||
26
core/unit_tests/encoders/test_encode_atomic.cpp
Normal file
26
core/unit_tests/encoders/test_encode_atomic.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "core/helpers/ptr_math.h"
|
||||
#include "core/unit_tests/fixtures/command_container_fixture.h"
|
||||
#include "unit_tests/gen_common/gen_cmd_parse.h"
|
||||
|
||||
using namespace NEO;
|
||||
|
||||
using CommandEncodeAtomic = Test<CommandEncodeStatesFixture>;
|
||||
|
||||
HWTEST_F(CommandEncodeAtomic, programMiAtomic) {
|
||||
using MI_ATOMIC = typename FamilyType::MI_ATOMIC;
|
||||
MI_ATOMIC miAtomic;
|
||||
|
||||
EncodeAtomic<FamilyType>::programMiAtomic(&miAtomic, 0x123400, MI_ATOMIC::ATOMIC_OPCODES::ATOMIC_4B_DECREMENT,
|
||||
MI_ATOMIC::DATA_SIZE::DATA_SIZE_DWORD);
|
||||
|
||||
EXPECT_EQ(MI_ATOMIC::ATOMIC_OPCODES::ATOMIC_4B_DECREMENT, miAtomic.getAtomicOpcode());
|
||||
EXPECT_EQ(MI_ATOMIC::DATA_SIZE::DATA_SIZE_DWORD, miAtomic.getDataSize());
|
||||
EXPECT_EQ(0x123400u, miAtomic.getMemoryAddress());
|
||||
}
|
||||
29
core/unit_tests/encoders/test_encode_semaphore.cpp
Normal file
29
core/unit_tests/encoders/test_encode_semaphore.cpp
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "core/helpers/ptr_math.h"
|
||||
#include "core/unit_tests/fixtures/command_container_fixture.h"
|
||||
#include "unit_tests/gen_common/gen_cmd_parse.h"
|
||||
|
||||
using namespace NEO;
|
||||
|
||||
using CommandEncodeSemaphore = Test<CommandEncodeStatesFixture>;
|
||||
|
||||
HWTEST_F(CommandEncodeSemaphore, programMiSemaphoreWait) {
|
||||
using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
|
||||
MI_SEMAPHORE_WAIT miSemaphore;
|
||||
|
||||
EncodeSempahore<FamilyType>::programMiSemaphoreWait(&miSemaphore,
|
||||
0x123400,
|
||||
4,
|
||||
MI_SEMAPHORE_WAIT::COMPARE_OPERATION::COMPARE_OPERATION_SAD_NOT_EQUAL_SDD);
|
||||
|
||||
EXPECT_EQ(MI_SEMAPHORE_WAIT::COMPARE_OPERATION::COMPARE_OPERATION_SAD_NOT_EQUAL_SDD, miSemaphore.getCompareOperation());
|
||||
EXPECT_EQ(4u, miSemaphore.getSemaphoreDataDword());
|
||||
EXPECT_EQ(0x123400u, miSemaphore.getSemaphoreGraphicsAddress());
|
||||
EXPECT_EQ(MI_SEMAPHORE_WAIT::WAIT_MODE::WAIT_MODE_POLLING_MODE, miSemaphore.getWaitMode());
|
||||
}
|
||||
Reference in New Issue
Block a user