/* * Copyright (C) 2018 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "runtime/command_stream/preemption.h" #include "runtime/command_stream/preemption.inl" namespace OCLRT { typedef BDWFamily GfxFamily; template <> struct PreemptionConfig { static constexpr uint32_t mmioAddress = 0x2248; static constexpr uint32_t maskVal = 0; static constexpr uint32_t maskShift = 0; static constexpr uint32_t mask = 0; static constexpr uint32_t threadGroupVal = 0; static constexpr uint32_t cmdLevelVal = (1 << 2); static constexpr uint32_t midThreadVal = 0; }; template <> void PreemptionHelper::programCmdStream(LinearStream &cmdStream, PreemptionMode newPreemptionMode, PreemptionMode oldPreemptionMode, GraphicsAllocation *preemptionCsr, Device &device) { if (newPreemptionMode == oldPreemptionMode) { return; } uint32_t regVal = 0; if (newPreemptionMode == PreemptionMode::ThreadGroup) { regVal = PreemptionConfig::threadGroupVal; } else { regVal = PreemptionConfig::cmdLevelVal; } LriHelper::program(&cmdStream, PreemptionConfig::mmioAddress, regVal); } template <> size_t PreemptionHelper::getRequiredPreambleSize(const Device &device) { return 0; } template <> void PreemptionHelper::programPreamble(LinearStream &preambleCmdStream, Device &device, const GraphicsAllocation *preemptionCsr) { } template size_t PreemptionHelper::getRequiredCmdStreamSize(PreemptionMode newPreemptionMode, PreemptionMode oldPreemptionMode); template size_t PreemptionHelper::getPreemptionWaCsSize(const Device &device); template void PreemptionHelper::applyPreemptionWaCmdsBegin(LinearStream *pCommandStream, const Device &device); template void PreemptionHelper::applyPreemptionWaCmdsEnd(LinearStream *pCommandStream, const Device &device); template void PreemptionHelper::programInterfaceDescriptorDataPreemption(INTERFACE_DESCRIPTOR_DATA *idd, PreemptionMode preemptionMode); } // namespace OCLRT