@@ -126,6 +126,7 @@ EmitPass::EmitPass(CShaderProgram::KernelShaderMap& shaders, SIMDMode mode, bool
126126 m_canAbortOnSpill(canAbortOnSpill),
127127 m_roundingMode_FP(ERoundingMode::ROUND_TO_NEAREST_EVEN),
128128 m_roundingMode_FPCvtInt(ERoundingMode::ROUND_TO_ZERO),
129+ m_preemptionMode(EPreemptionMode::PREEMPTION_ENABLED),
129130 m_pSignature(pSignature),
130131 m_isDuplicate(false)
131132{
@@ -1238,6 +1239,8 @@ bool EmitPass::runOnFunction(llvm::Function& F)
12381239 (m_currShader->GetContext()->m_instrTypes.numLoopInsts == 0) &&
12391240 (m_currShader->ProgramOutput()->m_InstructionCount < IGC_GET_FLAG_VALUE(MidThreadPreemptionDisableThreshold)))
12401241 {
1242+ m_preemptionMode = PREEMPTION_DISABLED;
1243+
12411244 if (m_currShader->GetShaderType() == ShaderType::COMPUTE_SHADER)
12421245 {
12431246 CComputeShader* csProgram = static_cast<CComputeShader*>(m_currShader);
@@ -16759,6 +16762,15 @@ void EmitPass::SetRoundingMode_FPCvtInt(ERoundingMode newRM_FPCvtInt)
1675916762 }
1676016763}
1676116764
16765+ void EmitPass::SetPreemptionMode(EPreemptionMode newPreemptionMode)
16766+ {
16767+ if (newPreemptionMode != m_preemptionMode)
16768+ {
16769+ m_encoder->SetPreemptionMode(m_preemptionMode, newPreemptionMode);
16770+ m_preemptionMode = newPreemptionMode;
16771+ }
16772+ }
16773+
1676216774// Return true if inst needs specific rounding mode; false otherwise.
1676316775//
1676416776// Currently, only gen intrinsic needs rounding mode other than the default.
@@ -22585,8 +22597,12 @@ void EmitPass::emitTraceRay(TraceRayIntrinsic* I, bool RayQueryEnable)
2258522597 offsetof(RTStackFormat::TraceRayMessage::Header, rayQueryLocation) / sizeof(DWORD);
2258622598 static_assert(RayQueryDword == 4, "header change?");
2258722599
22588- CVariable* RayQueryVal =
22589- m_currShader->ImmToVariable(RayQueryEnable ? 1 : 0, ISA_TYPE_UD);
22600+ uint64_t rayQueryHeader = 0x0;
22601+
22602+ rayQueryHeader |= RayQueryEnable ? 1 : 0;
22603+
22604+ CVariable* RayQueryVal =
22605+ m_currShader->ImmToVariable(rayQueryHeader, ISA_TYPE_UD);
2259022606
2259122607 m_encoder->SetSimdSize(SIMDMode::SIMD1);
2259222608 m_encoder->SetNoMask();
@@ -22631,6 +22647,7 @@ void EmitPass::emitTraceRay(TraceRayIntrinsic* I, bool RayQueryEnable)
2263122647 m_currShader->m_SIMDSize >= SIMDMode::SIMD16 ? 1 : 0,
2263222648 true,
2263322649 RayQueryEnable);
22650+
2263422651 CVariable* pMessDesc =
2263522652 m_currShader->ImmToVariable(messageSpecificControl, ISA_TYPE_UD);
2263622653
@@ -22666,7 +22683,9 @@ void EmitPass::emitTraceRay(TraceRayIntrinsic* I, bool RayQueryEnable)
2266622683 payload,
2266722684 extDescriptor,
2266822685 exDesc,
22669- pMessDesc);
22686+ pMessDesc,
22687+ false);
22688+
2267022689 m_encoder->Push();
2267122690 }
2267222691
@@ -22715,6 +22734,7 @@ void EmitPass::emitReadTraceRaySync(llvm::GenIntrinsicInst* I)
2271522734 m_encoder->Push();
2271622735}
2271722736
22737+
2271822738void EmitPass::emitBTD(
2271922739 CVariable* GlobalBufferPtr,
2272022740 CVariable* StackID,
0 commit comments