2020-03-27 03:13:10 +08:00
|
|
|
/*
|
2021-12-02 22:17:45 +08:00
|
|
|
* Copyright (C) 2020-2021 Intel Corporation
|
2020-03-27 03:13:10 +08:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2021-12-02 22:17:45 +08:00
|
|
|
#include "shared/source/command_container/command_encoder.h"
|
2020-03-27 03:13:10 +08:00
|
|
|
#include "shared/source/command_stream/linear_stream.h"
|
|
|
|
#include "shared/source/direct_submission/dispatchers/dispatcher.h"
|
|
|
|
|
|
|
|
namespace NEO {
|
|
|
|
|
|
|
|
class LinearStream;
|
|
|
|
|
|
|
|
template <typename GfxFamily>
|
|
|
|
inline void Dispatcher<GfxFamily>::dispatchStartCommandBuffer(LinearStream &cmdBuffer, uint64_t gpuStartAddress) {
|
|
|
|
using MI_BATCH_BUFFER_START = typename GfxFamily::MI_BATCH_BUFFER_START;
|
|
|
|
|
2020-04-09 00:33:03 +08:00
|
|
|
MI_BATCH_BUFFER_START cmd = GfxFamily::cmdInitBatchBufferStart;
|
2021-12-17 02:02:45 +08:00
|
|
|
cmd.setBatchBufferStartAddress(gpuStartAddress);
|
2020-04-09 00:33:03 +08:00
|
|
|
cmd.setAddressSpaceIndicator(MI_BATCH_BUFFER_START::ADDRESS_SPACE_INDICATOR_PPGTT);
|
|
|
|
|
|
|
|
auto bbufferStart = cmdBuffer.getSpaceForCmd<MI_BATCH_BUFFER_START>();
|
|
|
|
*bbufferStart = cmd;
|
2020-03-27 03:13:10 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename GfxFamily>
|
|
|
|
inline size_t Dispatcher<GfxFamily>::getSizeStartCommandBuffer() {
|
|
|
|
using MI_BATCH_BUFFER_START = typename GfxFamily::MI_BATCH_BUFFER_START;
|
|
|
|
return sizeof(MI_BATCH_BUFFER_START);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename GfxFamily>
|
|
|
|
inline void Dispatcher<GfxFamily>::dispatchStopCommandBuffer(LinearStream &cmdBuffer) {
|
|
|
|
using MI_BATCH_BUFFER_END = typename GfxFamily::MI_BATCH_BUFFER_END;
|
|
|
|
|
2020-04-09 00:33:03 +08:00
|
|
|
MI_BATCH_BUFFER_END cmd = GfxFamily::cmdInitBatchBufferEnd;
|
|
|
|
|
2020-03-27 03:13:10 +08:00
|
|
|
auto bbufferEnd = cmdBuffer.getSpaceForCmd<MI_BATCH_BUFFER_END>();
|
2020-04-09 00:33:03 +08:00
|
|
|
*bbufferEnd = cmd;
|
2020-03-27 03:13:10 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename GfxFamily>
|
|
|
|
inline size_t Dispatcher<GfxFamily>::getSizeStopCommandBuffer() {
|
|
|
|
using MI_BATCH_BUFFER_END = typename GfxFamily::MI_BATCH_BUFFER_END;
|
|
|
|
return sizeof(MI_BATCH_BUFFER_END);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename GfxFamily>
|
|
|
|
inline void Dispatcher<GfxFamily>::dispatchStoreDwordCommand(LinearStream &cmdBuffer, uint64_t gpuVa, uint32_t value) {
|
2021-12-02 22:17:45 +08:00
|
|
|
EncodeStoreMemory<GfxFamily>::programStoreDataImm(cmdBuffer,
|
|
|
|
gpuVa,
|
|
|
|
value,
|
|
|
|
0,
|
|
|
|
false,
|
|
|
|
false);
|
2020-03-27 03:13:10 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename GfxFamily>
|
|
|
|
inline size_t Dispatcher<GfxFamily>::getSizeStoreDwordCommand() {
|
2021-12-02 22:17:45 +08:00
|
|
|
return EncodeStoreMemory<GfxFamily>::getStoreDataImmSize();
|
2020-03-27 03:13:10 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace NEO
|