Skip to content

Commit aa03219

Browse files
sys-igcigcbot
authored andcommitted
[Autobackout][FunctionalRegression]Revert of change: f7ffdda: Move lowering RayInfo to the RTBuilder
Move lowering RayInfo to the RTBuilder
1 parent a0d8e94 commit aa03219

File tree

4 files changed

+112
-117
lines changed

4 files changed

+112
-117
lines changed

IGC/AdaptorCommon/RayTracing/RTBuilder.cpp

Lines changed: 0 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -2090,101 +2090,3 @@ Value* RTBuilder::getHitAddress(StackPointerVal* StackPtr, bool Committed)
20902090
IGC_ASSERT(0);
20912091
return {};
20922092
}
2093-
2094-
template<typename StackPointerValT, typename RayInfoIntrinsicT>
2095-
Value* RTBuilder::lowerRayInfo(StackPointerValT* perLaneStackPtr, RayInfoIntrinsicT* I, bool isCommitted, std::optional<bool> isProcedural)
2096-
{
2097-
Value* info = nullptr;
2098-
auto shaderType = isCommitted ? CallableShaderTypeMD::ClosestHit : CallableShaderTypeMD::AnyHit;
2099-
uint32_t dim = I->getDim();
2100-
auto infoKind = I->getInfoKind();
2101-
2102-
switch (infoKind)
2103-
{
2104-
case WORLD_RAY_ORG:
2105-
info = getWorldRayOrig(perLaneStackPtr, dim);
2106-
break;
2107-
case WORLD_RAY_DIR:
2108-
info = getWorldRayDir(perLaneStackPtr, dim);
2109-
break;
2110-
case OBJ_RAY_ORG:
2111-
info = getObjRayOrig(perLaneStackPtr, dim, shaderType);
2112-
break;
2113-
case OBJ_RAY_DIR:
2114-
info = getObjRayDir(perLaneStackPtr, dim, shaderType);
2115-
break;
2116-
case RAY_T_MIN:
2117-
info = getRayTMin(perLaneStackPtr);
2118-
break;
2119-
case RAY_T_CURRENT:
2120-
info = getRayTCurrent(perLaneStackPtr, shaderType);
2121-
break;
2122-
case INSTANCE_ID:
2123-
info = getInstanceID(perLaneStackPtr, shaderType, nullptr, false);
2124-
break;
2125-
case INSTANCE_INDEX:
2126-
info = getInstanceIndex(perLaneStackPtr, shaderType, nullptr, false);
2127-
break;
2128-
case PRIMITIVE_INDEX:
2129-
{
2130-
auto* nodeType = isProcedural.has_value() ?
2131-
getInt32(*isProcedural ? NODE_TYPE_PROCEDURAL : NODE_TYPE_QUAD) :
2132-
getLeafType(perLaneStackPtr, isCommitted);
2133-
info = getPrimitiveIndex(perLaneStackPtr, I, nodeType, shaderType, false);
2134-
break;
2135-
}
2136-
case RAY_FLAGS:
2137-
info = CreateZExt(
2138-
getRayFlags(perLaneStackPtr),
2139-
I->getType());
2140-
break;
2141-
case OBJECT_TO_WORLD:
2142-
info = getObjToWorld(perLaneStackPtr, dim, shaderType);
2143-
break;
2144-
case WORLD_TO_OBJECT:
2145-
info = getWorldToObj(perLaneStackPtr, dim, shaderType);
2146-
break;
2147-
case GEOMETRY_INDEX:
2148-
{
2149-
auto* nodeType = isProcedural.has_value() ?
2150-
getInt32(*isProcedural ? NODE_TYPE_PROCEDURAL : NODE_TYPE_QUAD) :
2151-
getLeafType(perLaneStackPtr, isCommitted);
2152-
info = getGeometryIndex(perLaneStackPtr, I, nodeType, shaderType, false);
2153-
break;
2154-
}
2155-
case INST_CONTRIBUTION_TO_HITGROUP_INDEX:
2156-
info = getInstanceContributionToHitGroupIndex(perLaneStackPtr, shaderType);
2157-
break;
2158-
case RAY_MASK:
2159-
info = getRayMask(perLaneStackPtr);
2160-
break;
2161-
case TRIANGLE_FRONT_FACE:
2162-
case CANDIDATE_PROCEDURAL_PRIM_NON_OPAQUE: // Procedural Primitive Opaque Info is stored in Front Face bit
2163-
{
2164-
info = getIsFrontFace(perLaneStackPtr, shaderType);
2165-
2166-
if (infoKind == CANDIDATE_PROCEDURAL_PRIM_NON_OPAQUE)
2167-
info = CreateICmpEQ(info, getInt1(0), VALUE_NAME("is_nonopaque"));
2168-
2169-
break;
2170-
}
2171-
case BARYCENTRICS:
2172-
{
2173-
info = getHitBaryCentric(perLaneStackPtr, I->getDim(), shaderType);
2174-
break;
2175-
}
2176-
default:
2177-
IGC_ASSERT_MESSAGE(0, "Unsupported Ray Info");
2178-
break;
2179-
}
2180-
2181-
return info;
2182-
}
2183-
2184-
2185-
template Value* RTBuilder::lowerRayInfo<RTBuilder::SyncStackPointerVal, RayQueryInfoIntrinsic>(
2186-
RTBuilder::SyncStackPointerVal*,
2187-
RayQueryInfoIntrinsic*,
2188-
bool,
2189-
std::optional<bool>
2190-
);

IGC/AdaptorCommon/RayTracing/RTBuilder.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -500,12 +500,6 @@ class RTBuilder : public IGCIRBuilder<>
500500
void commitProceduralPrimitiveHit(SyncStackPointerVal* SMStackPtr, Value* THit);
501501

502502
Value* getHitAddress(StackPointerVal* StackPtr, bool Committed);
503-
template<typename StackPointerValT, typename RayInfoIntrinsicT>
504-
Value* lowerRayInfo(
505-
StackPointerValT* perLaneStackPtr,
506-
RayInfoIntrinsicT* I,
507-
bool isCommitted,
508-
std::optional<bool> isProcedural);
509503
};
510504

511505
} // namespace llvm

IGC/AdaptorCommon/RayTracing/TraceRayInlineLoweringPass.cpp

Lines changed: 109 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -652,15 +652,55 @@ void TraceRayInlineLoweringPass::LowerRayInfo(Function& F)
652652
{
653653
builder.SetInsertPoint(I);
654654

655+
unsigned int infoKind = I->getInfoKind();
656+
auto shaderTy = I->isCommitted() ? CallableShaderTypeMD::ClosestHit : CallableShaderTypeMD::AnyHit;
655657
auto* const ShadowMemStackPointer = getShMemRayQueryRTStack(builder, I->getQueryObjIndex());
656658

657-
switch (I->getInfoKind())
659+
switch (infoKind)
658660
{
659-
default:
660-
I->replaceAllUsesWith(builder.lowerRayInfo(ShadowMemStackPointer, I, I->isCommitted(), std::nullopt));
661-
I->eraseFromParent();
661+
case RAY_FLAGS:
662+
{
663+
Value* rayFlags = builder.getRayFlags(ShadowMemStackPointer);
664+
rayFlags = builder.CreateZExt(rayFlags, I->getType());
665+
I->replaceAllUsesWith(rayFlags);
666+
break;
667+
}
668+
case WORLD_RAY_ORG:
669+
{
670+
Value* rayOrg = builder.getWorldRayOrig(ShadowMemStackPointer, (uint32_t)cast<ConstantInt>(I->getDim())->getZExtValue());
671+
I->replaceAllUsesWith(rayOrg);
672+
break;
673+
}
674+
case WORLD_RAY_DIR:
675+
{
676+
Value* valueAtDim = builder.getWorldRayDir(ShadowMemStackPointer, (uint32_t)cast<ConstantInt>(I->getDim())->getZExtValue());
677+
I->replaceAllUsesWith(valueAtDim);
678+
break;
679+
}
680+
case RAY_T_MIN:
681+
{
682+
Value* TMin = builder.getRayTMin(ShadowMemStackPointer);
683+
I->replaceAllUsesWith(TMin);
684+
break;
685+
}
686+
case RAY_T_CURRENT:
687+
{
688+
Value* rayT = builder.getRayTCurrent(ShadowMemStackPointer, shaderTy);
689+
I->replaceAllUsesWith(rayT);
662690
break;
663-
// leave this in for now, until we prove we don't need the hack anymore
691+
}
692+
case TRIANGLE_FRONT_FACE:
693+
case CANDIDATE_PROCEDURAL_PRIM_NON_OPAQUE: // Procedural Primitive Opaque Info is stored in Front Face bit
694+
{
695+
Value* frontFaceBit = builder.getIsFrontFace(ShadowMemStackPointer, shaderTy);
696+
if (infoKind == CANDIDATE_PROCEDURAL_PRIM_NON_OPAQUE)
697+
{
698+
frontFaceBit = builder.CreateICmpEQ(
699+
frontFaceBit, builder.getInt1(0), VALUE_NAME("is_nonopaque"));
700+
}
701+
I->replaceAllUsesWith(frontFaceBit);
702+
break;
703+
}
664704
case GEOMETRY_INDEX:
665705
{
666706
bool specialPattern = false;
@@ -670,14 +710,75 @@ void TraceRayInlineLoweringPass::LowerRayInfo(Function& F)
670710
}
671711

672712
Value* leafType = builder.getLeafType(ShadowMemStackPointer, I->isCommitted());
673-
Value* geoIndex = builder.getGeometryIndex(ShadowMemStackPointer, I, leafType,
674-
I->isCommitted() ? CallableShaderTypeMD::ClosestHit : CallableShaderTypeMD::AnyHit, !specialPattern);
713+
Value* geoIndex = builder.getGeometryIndex(ShadowMemStackPointer, I, leafType, shaderTy, !specialPattern);
675714
IGC_ASSERT_MESSAGE(I->getType()->isIntegerTy(), "Invalid geometryIndex type!");
676715
I->replaceAllUsesWith(geoIndex);
677-
I->eraseFromParent();
678716
break;
679717
}
718+
case INSTANCE_INDEX:
719+
I->replaceAllUsesWith(builder.getInstanceIndex(ShadowMemStackPointer, shaderTy, I, true));
720+
break;
721+
case INSTANCE_ID:
722+
I->replaceAllUsesWith(builder.getInstanceID(ShadowMemStackPointer, shaderTy, I, true));
723+
break;
724+
case PRIMITIVE_INDEX:
725+
{
726+
Value* leafType = builder.getLeafType(ShadowMemStackPointer, I->isCommitted());
727+
Value* primIndex = builder.getPrimitiveIndex(ShadowMemStackPointer, I, leafType, shaderTy, true);
728+
IGC_ASSERT_MESSAGE(I->getType()->isIntegerTy(), "Invalid primIndex type!");
729+
I->replaceAllUsesWith(primIndex);
730+
731+
break;
732+
}
733+
case BARYCENTRICS:
734+
{
735+
uint32_t idx = (uint32_t)cast<ConstantInt>(I->getDim())->getZExtValue();
736+
Value* bary = builder.getHitBaryCentric(ShadowMemStackPointer, idx, I->isCommitted());
737+
I->replaceAllUsesWith(bary);
738+
break;
739+
}
740+
case OBJECT_TO_WORLD:
741+
{
742+
uint32_t dim = (uint32_t)cast<ConstantInt>(I->getDim())->getZExtValue();
743+
Value* matrixComp = builder.getObjToWorld(ShadowMemStackPointer, dim, shaderTy, I, true);
744+
I->replaceAllUsesWith(matrixComp);
745+
break;
746+
}
747+
case WORLD_TO_OBJECT:
748+
{
749+
uint32_t dim = (uint32_t)cast<ConstantInt>(I->getDim())->getZExtValue();
750+
Value* matrixComp = builder.getWorldToObj(ShadowMemStackPointer, dim, shaderTy, I, true);
751+
I->replaceAllUsesWith(matrixComp);
752+
break;
753+
}
754+
case OBJ_RAY_ORG:
755+
{
756+
Value* rayInfo = builder.getObjRayOrig(ShadowMemStackPointer, (uint32_t)cast<ConstantInt>(I->getDim())->getZExtValue(), shaderTy, I, true);
757+
I->replaceAllUsesWith(rayInfo);
758+
break;
759+
}
760+
case OBJ_RAY_DIR:
761+
{
762+
Value* rayInfo = builder.getObjRayDir(ShadowMemStackPointer, (uint32_t)cast<ConstantInt>(I->getDim())->getZExtValue(), shaderTy, I, true);
763+
I->replaceAllUsesWith(rayInfo);
764+
break;
680765
}
766+
case INST_CONTRIBUTION_TO_HITGROUP_INDEX:
767+
{
768+
I->replaceAllUsesWith(
769+
builder.getInstanceContributionToHitGroupIndex(ShadowMemStackPointer, shaderTy)
770+
);
771+
break;
772+
}
773+
default:
774+
IGC_ASSERT_MESSAGE(0, "Unsupported RayQuery Info");
775+
break;
776+
}
777+
}
778+
779+
for (auto I : info)
780+
{
781+
I->eraseFromParent();
681782
}
682783
}
683784

IGC/GenISAIntrinsics/GenIntrinsicInst.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1996,13 +1996,11 @@ class RayQueryInfoIntrinsic : public RayQueryInstrisicBase {
19961996
return isa<RayQueryInstrisicBase>(V) && classof(cast<RayQueryInstrisicBase>(V));
19971997
}
19981998

1999-
IGC::DISPATCH_SHADER_RAY_INFO_TYPE getInfoKind() const {
2000-
return static_cast<IGC::DISPATCH_SHADER_RAY_INFO_TYPE>(cast<ConstantInt>(getOperand(1))->getZExtValue());
1999+
uint32_t getInfoKind() const {
2000+
return (uint32_t)cast<ConstantInt>(getOperand(1))->getZExtValue();
20012001
}
20022002

2003-
uint32_t getDim() const {
2004-
return static_cast<uint32_t>(cast<ConstantInt>(getOperand(2))->getZExtValue());
2005-
}
2003+
Value* getDim() const {return getOperand(2);}
20062004

20072005
bool isCommitted() const {
20082006
return static_cast<bool>(cast<ConstantInt>(getOperand(3))->getZExtValue());

0 commit comments

Comments
 (0)