Files
compute-runtime/runtime/command_stream/command_stream_receiver_hw_tgllp_plus.inl
Cencelewska e2c4ec47ac Refactor of programComputeMode in CommandStreamReceiverHw
Change-Id: If3ca7e89fe9f2fff371cd88224fe3a669d17f000
Signed-off-by: Cencelewska <katarzyna.cencelewska@intel.com>
2019-11-06 11:31:26 +01:00

35 lines
1.7 KiB
C++

/*
* Copyright (C) 2018-2019 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "runtime/command_stream/command_stream_receiver_hw.h"
namespace NEO {
template <typename GfxFamily>
void CommandStreamReceiverHw<GfxFamily>::programComputeMode(LinearStream &stream, DispatchFlags &dispatchFlags) {
using STATE_COMPUTE_MODE = typename GfxFamily::STATE_COMPUTE_MODE;
using PIPE_CONTROL = typename GfxFamily::PIPE_CONTROL;
using FORCE_NON_COHERENT = typename STATE_COMPUTE_MODE::FORCE_NON_COHERENT;
if (csrSizeRequestFlags.coherencyRequestChanged || csrSizeRequestFlags.hasSharedHandles || csrSizeRequestFlags.numGrfRequiredChanged ||
StateComputeModeHelper<GfxFamily>::isStateComputeModeRequired(csrSizeRequestFlags, this->lastSentThreadArbitrationPolicy != this->requiredThreadArbitrationPolicy)) {
auto stateComputeMode = stream.getSpaceForCmd<STATE_COMPUTE_MODE>();
*stateComputeMode = GfxFamily::cmdInitStateComputeMode;
FORCE_NON_COHERENT coherencyValue = !dispatchFlags.requiresCoherency ? FORCE_NON_COHERENT::FORCE_NON_COHERENT_FORCE_GPU_NON_COHERENT : FORCE_NON_COHERENT::FORCE_NON_COHERENT_FORCE_DISABLED;
stateComputeMode->setForceNonCoherent(coherencyValue);
this->lastSentCoherencyRequest = static_cast<int8_t>(dispatchFlags.requiresCoherency);
stateComputeMode->setMaskBits(GfxFamily::stateComputeModeForceNonCoherentMask);
if (csrSizeRequestFlags.hasSharedHandles) {
auto pc = stream.getSpaceForCmd<PIPE_CONTROL>();
*pc = GfxFamily::cmdInitPipeControl;
}
adjustComputeMode(stream, dispatchFlags, stateComputeMode);
}
}
} // namespace NEO