2222
2323namespace NEO {
2424
25+ template <>
26+ void PreambleHelper<Family>::appendProgramPipelineSelect(void *cmd, bool isSpecialModeSelected, const HardwareInfo &hwInfo);
27+
28+ template <>
29+ bool PreambleHelper<Family>::isSystolicModeConfigurable(const HardwareInfo &hwInfo);
30+
2531template <>
2632void PreambleHelper<Family>::programPipelineSelect(LinearStream *pCommandStream,
2733 const PipelineSelectArgs &pipelineSelectArgs,
@@ -45,17 +51,13 @@ void PreambleHelper<Family>::programPipelineSelect(LinearStream *pCommandStream,
4551 auto pCmd = pCommandStream->getSpaceForCmd <PIPELINE_SELECT>();
4652
4753 auto mask = pipelineSelectEnablePipelineSelectMaskBits |
48- pipelineSelectMediaSamplerDopClockGateMaskBits |
49- pipelineSelectSystolicModeEnableMaskBits;
54+ pipelineSelectMediaSamplerDopClockGateMaskBits;
5055
5156 cmd.setMaskBits (mask);
5257 cmd.setPipelineSelection (PIPELINE_SELECT::PIPELINE_SELECTION_GPGPU);
5358 cmd.setMediaSamplerDopClockGateEnable (!pipelineSelectArgs.mediaSamplerRequired );
54- cmd.setSystolicModeEnable (pipelineSelectArgs.specialPipelineSelectMode );
5559
56- if (DebugManager.flags .OverrideSystolicPipelineSelect .get () != -1 ) {
57- cmd.setSystolicModeEnable (DebugManager.flags .OverrideSystolicPipelineSelect .get ());
58- }
60+ appendProgramPipelineSelect (&cmd, pipelineSelectArgs.specialPipelineSelectMode , hwInfo);
5961
6062 *pCmd = cmd;
6163
@@ -67,6 +69,25 @@ void PreambleHelper<Family>::programPipelineSelect(LinearStream *pCommandStream,
6769 }
6870}
6971
72+ template <>
73+ void PreambleHelper<Family>::appendProgramPipelineSelect(void *cmd, bool isSpecialModeSelected, const HardwareInfo &hwInfo) {
74+ using PIPELINE_SELECT = typename Family::PIPELINE_SELECT;
75+ auto command = static_cast <PIPELINE_SELECT *>(cmd);
76+ auto mask = command->getMaskBits ();
77+
78+ if (PreambleHelper<Family>::isSystolicModeConfigurable (hwInfo)) {
79+ command->setSystolicModeEnable (isSpecialModeSelected);
80+ mask |= pipelineSelectSystolicModeEnableMaskBits;
81+ }
82+
83+ if (DebugManager.flags .OverrideSystolicPipelineSelect .get () != -1 ) {
84+ command->setSystolicModeEnable (DebugManager.flags .OverrideSystolicPipelineSelect .get ());
85+ mask |= pipelineSelectSystolicModeEnableMaskBits;
86+ }
87+
88+ command->setMaskBits (mask);
89+ }
90+
7091template <>
7192void PreambleHelper<Family>::addPipeControlBeforeVfeCmd(LinearStream *pCommandStream, const HardwareInfo *hwInfo, EngineGroupType engineGroupType) {
7293}
0 commit comments