/* * Copyright (C) 2020-2024 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "shared/source/command_container/command_encoder.h" #include "shared/source/command_stream/linear_stream.h" #include "shared/source/direct_submission/dispatchers/dispatcher.h" namespace NEO { class LinearStream; template inline void Dispatcher::dispatchStartCommandBuffer(LinearStream &cmdBuffer, uint64_t gpuStartAddress) { using MI_BATCH_BUFFER_START = typename GfxFamily::MI_BATCH_BUFFER_START; MI_BATCH_BUFFER_START cmd = GfxFamily::cmdInitBatchBufferStart; cmd.setBatchBufferStartAddress(gpuStartAddress); cmd.setAddressSpaceIndicator(MI_BATCH_BUFFER_START::ADDRESS_SPACE_INDICATOR_PPGTT); auto bbufferStart = cmdBuffer.getSpaceForCmd(); *bbufferStart = cmd; } template inline size_t Dispatcher::getSizeStartCommandBuffer() { using MI_BATCH_BUFFER_START = typename GfxFamily::MI_BATCH_BUFFER_START; return sizeof(MI_BATCH_BUFFER_START); } template inline void Dispatcher::dispatchStopCommandBuffer(LinearStream &cmdBuffer) { using MI_BATCH_BUFFER_END = typename GfxFamily::MI_BATCH_BUFFER_END; MI_BATCH_BUFFER_END cmd = GfxFamily::cmdInitBatchBufferEnd; auto bbufferEnd = cmdBuffer.getSpaceForCmd(); *bbufferEnd = cmd; } template inline size_t Dispatcher::getSizeStopCommandBuffer() { using MI_BATCH_BUFFER_END = typename GfxFamily::MI_BATCH_BUFFER_END; return sizeof(MI_BATCH_BUFFER_END); } template inline void Dispatcher::dispatchStoreDwordCommand(LinearStream &cmdBuffer, uint64_t gpuVa, uint32_t value) { EncodeStoreMemory::programStoreDataImm(cmdBuffer, gpuVa, value, 0, false, false, nullptr); } template inline size_t Dispatcher::getSizeStoreDwordCommand() { return EncodeStoreMemory::getStoreDataImmSize(); } } // namespace NEO