Skip to content

Commit 6f02ebf

Browse files
jaladreipsigcbot
authored andcommitted
For rayquery check/release, enable preemption after all releases are executed
For rayquery check/release, enable preemption after all releases are executed
1 parent 825b687 commit 6f02ebf

File tree

5 files changed

+40
-25
lines changed

5 files changed

+40
-25
lines changed

IGC/AdaptorCommon/RayTracing/RTBuilder.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,15 +185,14 @@ RayQueryReleaseIntrinsic* RTBuilder::CreateRayQueryReleaseIntrinsic(Value* predi
185185
return cast<RayQueryReleaseIntrinsic>(rayQueryRelease);
186186
}
187187

188-
PreemptionDisableIntrinsic* RTBuilder::CreatePreemptionDisableIntrinsic(Value* Flag)
188+
PreemptionDisableIntrinsic* RTBuilder::CreatePreemptionDisableIntrinsic()
189189
{
190190
Module* M = this->GetInsertBlock()->getModule();
191191

192192
auto* GII = CreateCall(
193193
GenISAIntrinsic::getDeclaration(
194194
M,
195-
GenISAIntrinsic::GenISA_PreemptionDisable),
196-
Flag ? Flag : getTrue());
195+
GenISAIntrinsic::GenISA_PreemptionDisable));
197196

198197
return cast<PreemptionDisableIntrinsic>(GII);
199198
}

IGC/AdaptorCommon/RayTracing/RTBuilder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ class RTBuilder : public IGCIRBuilder<>
259259
RayQueryCheckIntrinsic* CreateRayQueryCheckIntrinsic(Value* predicate = nullptr);
260260
RayQueryReleaseIntrinsic* CreateRayQueryReleaseIntrinsic(Value* predicate = nullptr);
261261

262-
PreemptionDisableIntrinsic* CreatePreemptionDisableIntrinsic(Value* Flag = nullptr);
262+
PreemptionDisableIntrinsic* CreatePreemptionDisableIntrinsic();
263263
PreemptionEnableIntrinsic* CreatePreemptionEnableIntrinsic(Value* Flag = nullptr);
264264

265265
SyncStackPointerVal* getSyncStackPointer();

IGC/Compiler/CISACodeGen/EmitVISAPass.cpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23612,19 +23612,6 @@ void EmitPass::emitPreemptionDisable(PreemptionDisableIntrinsic* PDI)
2361223612
~getEncoderPreemptionMode(PREEMPTION_ENABLED),
2361323613
ISA_TYPE_UD);
2361423614

23615-
CVariable* Flag = nullptr;
23616-
if (auto* CI = dyn_cast<ConstantInt>(PDI->getFlag()))
23617-
{
23618-
if (CI->isZero())
23619-
return;
23620-
}
23621-
else
23622-
{
23623-
Flag = GetSymbol(PDI->getFlag());
23624-
}
23625-
23626-
m_encoder->SetPredicate(Flag);
23627-
2362823615
m_encoder->And(m_currShader->GetCR0(), m_currShader->GetCR0(), Mask);
2362923616
m_encoder->Push();
2363023617
}

IGC/Compiler/CISACodeGen/RayTracingShaderLowering.cpp

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ class RayTracingShaderLowering : public ModulePass
4040
{
4141
AU.setPreservesCFG();
4242
AU.addRequired<CodeGenContextWrapper>();
43+
AU.addRequired<DominatorTreeWrapperPass>();
44+
AU.addRequired<PostDominatorTreeWrapperPass>();
4345
}
4446

4547
StringRef getPassName() const override
@@ -192,6 +194,12 @@ bool RayTracingShaderLowering::runOnModule(Module& M)
192194

193195
SmallVector<Instruction*, 8> DeadInsts;
194196

197+
BasicBlock* disablePreemptionBB = nullptr;
198+
BasicBlock* enablePreemptionBB = nullptr;
199+
200+
DominatorTree& DT = getAnalysis<DominatorTreeWrapperPass>(F).getDomTree();
201+
PostDominatorTree& PDT = getAnalysis<PostDominatorTreeWrapperPass>(F).getPostDomTree();
202+
195203
for (auto II = inst_begin(&F), IE = inst_end(&F); II != IE; /* empty */)
196204
{
197205
Instruction& I = *II++;
@@ -245,25 +253,44 @@ bool RayTracingShaderLowering::runOnModule(Module& M)
245253
case GenISAIntrinsic::GenISA_RayQueryCheck:
246254
if (!ForcePreemptionDisable)
247255
{
248-
RTB.SetInsertPoint(GII);
249-
RTB.CreatePreemptionDisableIntrinsic(I.getOperand(0));
256+
disablePreemptionBB =
257+
disablePreemptionBB ?
258+
DT.findNearestCommonDominator(disablePreemptionBB, GII->getParent()) :
259+
GII->getParent();
250260
}
251261
break;
252262
case GenISAIntrinsic::GenISA_RayQueryRelease:
253263
if (!ForcePreemptionDisable)
254264
{
255-
Value* Flag = isFunc ? checkPreemption(F) : nullptr;
256-
Flag = Flag ? RTB.CreateAnd(Flag, I.getOperand(0)) : I.getOperand(0);
257-
258-
RTB.SetInsertPoint(GII->getNextNode());
259-
RTB.CreatePreemptionEnableIntrinsic(Flag);
265+
enablePreemptionBB =
266+
enablePreemptionBB ?
267+
PDT.findNearestCommonDominator(enablePreemptionBB, GII->getParent()) :
268+
GII->getParent();
260269
}
261270
break;
262271
default:
263272
break;
264273
}
265274
}
266275

276+
if (disablePreemptionBB)
277+
{
278+
IGC_ASSERT(enablePreemptionBB);
279+
280+
RTB.SetInsertPoint(disablePreemptionBB->getFirstNonPHI());
281+
RTB.CreatePreemptionDisableIntrinsic();
282+
}
283+
284+
if (enablePreemptionBB)
285+
{
286+
IGC_ASSERT(disablePreemptionBB);
287+
288+
Value* Flag = isFunc ? checkPreemption(F) : nullptr;
289+
290+
RTB.SetInsertPoint(enablePreemptionBB->getTerminator());
291+
RTB.CreatePreemptionEnableIntrinsic(Flag);
292+
}
293+
267294
for (auto* I : DeadInsts)
268295
I->eraseFromParent();
269296
}
@@ -279,6 +306,8 @@ namespace IGC {
279306
#define PASS_ANALYSIS false
280307
IGC_INITIALIZE_PASS_BEGIN(RayTracingShaderLowering, PASS_FLAG, PASS_DESCRIPTION, PASS_CFG_ONLY, PASS_ANALYSIS)
281308
IGC_INITIALIZE_PASS_DEPENDENCY(CodeGenContextWrapper)
309+
IGC_INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
310+
IGC_INITIALIZE_PASS_DEPENDENCY(PostDominatorTreeWrapperPass)
282311
IGC_INITIALIZE_PASS_END(RayTracingShaderLowering, PASS_FLAG, PASS_DESCRIPTION, PASS_CFG_ONLY, PASS_ANALYSIS)
283312

284313
ModulePass* CreateRayTracingShaderLowering()

IGC/GenISAIntrinsics/Intrinsic_definitions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3208,7 +3208,7 @@
32083208
####################################################################################################
32093209
"GenISA_PreemptionDisable":["Disable Preemption",
32103210
[("void", ""),
3211-
[("bool", "predication flag")],
3211+
[],
32123212
"None"]],
32133213
####################################################################################################
32143214
"GenISA_RayQueryCheck": ["Raytracing: RayQueryCheck",

0 commit comments

Comments
 (0)