@@ -652,55 +652,15 @@ 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;
657655 auto * const ShadowMemStackPointer = getShMemRayQueryRTStack (builder, I->getQueryObjIndex ());
658656
659- switch (infoKind )
657+ switch (I-> getInfoKind () )
660658 {
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);
690- break ;
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);
659+ default :
660+ I->replaceAllUsesWith (builder.lowerRayInfo (ShadowMemStackPointer, I, I->isCommitted (), std::nullopt ));
661+ I->eraseFromParent ();
702662 break ;
703- }
663+ // leave this in for now, until we prove we don't need the hack anymore
704664 case GEOMETRY_INDEX:
705665 {
706666 bool specialPattern = false ;
@@ -710,75 +670,14 @@ void TraceRayInlineLoweringPass::LowerRayInfo(Function& F)
710670 }
711671
712672 Value* leafType = builder.getLeafType (ShadowMemStackPointer, I->isCommitted ());
713- Value* geoIndex = builder.getGeometryIndex (ShadowMemStackPointer, I, leafType, shaderTy, !specialPattern);
673+ Value* geoIndex = builder.getGeometryIndex (ShadowMemStackPointer, I, leafType,
674+ I->isCommitted () ? CallableShaderTypeMD::ClosestHit : CallableShaderTypeMD::AnyHit, !specialPattern);
714675 IGC_ASSERT_MESSAGE (I->getType ()->isIntegerTy (), " Invalid geometryIndex type!" );
715676 I->replaceAllUsesWith (geoIndex);
677+ I->eraseFromParent ();
716678 break ;
717679 }
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 ;
765680 }
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 ();
782681 }
783682}
784683
0 commit comments