@@ -8850,6 +8850,92 @@ struct DxilInst_AllocateRayQuery2 {
88508850 }
88518851};
88528852
8853+ // / This instruction Analogous to TraceRay but without invoking CH/MS and
8854+ // / returns the intermediate state as a HitObject
8855+ struct DxilInst_HitObject_TraceRay {
8856+ llvm::Instruction *Instr;
8857+ // Construction and identification
8858+ DxilInst_HitObject_TraceRay (llvm::Instruction *pInstr) : Instr(pInstr) {}
8859+ operator bool () const {
8860+ return hlsl::OP::IsDxilOpFuncCallInst (Instr,
8861+ hlsl::OP::OpCode::HitObject_TraceRay);
8862+ }
8863+ // Validation support
8864+ bool isAllowed () const { return true ; }
8865+ bool isArgumentListValid () const {
8866+ if (16 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands ())
8867+ return false ;
8868+ return true ;
8869+ }
8870+ // Metadata
8871+ bool requiresUniformInputs () const { return false ; }
8872+ // Operand indexes
8873+ enum OperandIdx {
8874+ arg_accelerationStructure = 1 ,
8875+ arg_rayFlags = 2 ,
8876+ arg_instanceInclusionMask = 3 ,
8877+ arg_rayContributionToHitGroupIndex = 4 ,
8878+ arg_multiplierForGeometryContributionToHitGroupIndex = 5 ,
8879+ arg_missShaderIndex = 6 ,
8880+ arg_Origin_X = 7 ,
8881+ arg_Origin_Y = 8 ,
8882+ arg_Origin_Z = 9 ,
8883+ arg_TMin = 10 ,
8884+ arg_Direction_X = 11 ,
8885+ arg_Direction_Y = 12 ,
8886+ arg_Direction_Z = 13 ,
8887+ arg_TMax = 14 ,
8888+ arg_payload = 15 ,
8889+ };
8890+ // Accessors
8891+ llvm::Value *get_accelerationStructure () const {
8892+ return Instr->getOperand (1 );
8893+ }
8894+ void set_accelerationStructure (llvm::Value *val) {
8895+ Instr->setOperand (1 , val);
8896+ }
8897+ llvm::Value *get_rayFlags () const { return Instr->getOperand (2 ); }
8898+ void set_rayFlags (llvm::Value *val) { Instr->setOperand (2 , val); }
8899+ llvm::Value *get_instanceInclusionMask () const {
8900+ return Instr->getOperand (3 );
8901+ }
8902+ void set_instanceInclusionMask (llvm::Value *val) {
8903+ Instr->setOperand (3 , val);
8904+ }
8905+ llvm::Value *get_rayContributionToHitGroupIndex () const {
8906+ return Instr->getOperand (4 );
8907+ }
8908+ void set_rayContributionToHitGroupIndex (llvm::Value *val) {
8909+ Instr->setOperand (4 , val);
8910+ }
8911+ llvm::Value *get_multiplierForGeometryContributionToHitGroupIndex () const {
8912+ return Instr->getOperand (5 );
8913+ }
8914+ void set_multiplierForGeometryContributionToHitGroupIndex (llvm::Value *val) {
8915+ Instr->setOperand (5 , val);
8916+ }
8917+ llvm::Value *get_missShaderIndex () const { return Instr->getOperand (6 ); }
8918+ void set_missShaderIndex (llvm::Value *val) { Instr->setOperand (6 , val); }
8919+ llvm::Value *get_Origin_X () const { return Instr->getOperand (7 ); }
8920+ void set_Origin_X (llvm::Value *val) { Instr->setOperand (7 , val); }
8921+ llvm::Value *get_Origin_Y () const { return Instr->getOperand (8 ); }
8922+ void set_Origin_Y (llvm::Value *val) { Instr->setOperand (8 , val); }
8923+ llvm::Value *get_Origin_Z () const { return Instr->getOperand (9 ); }
8924+ void set_Origin_Z (llvm::Value *val) { Instr->setOperand (9 , val); }
8925+ llvm::Value *get_TMin () const { return Instr->getOperand (10 ); }
8926+ void set_TMin (llvm::Value *val) { Instr->setOperand (10 , val); }
8927+ llvm::Value *get_Direction_X () const { return Instr->getOperand (11 ); }
8928+ void set_Direction_X (llvm::Value *val) { Instr->setOperand (11 , val); }
8929+ llvm::Value *get_Direction_Y () const { return Instr->getOperand (12 ); }
8930+ void set_Direction_Y (llvm::Value *val) { Instr->setOperand (12 , val); }
8931+ llvm::Value *get_Direction_Z () const { return Instr->getOperand (13 ); }
8932+ void set_Direction_Z (llvm::Value *val) { Instr->setOperand (13 , val); }
8933+ llvm::Value *get_TMax () const { return Instr->getOperand (14 ); }
8934+ void set_TMax (llvm::Value *val) { Instr->setOperand (14 , val); }
8935+ llvm::Value *get_payload () const { return Instr->getOperand (15 ); }
8936+ void set_payload (llvm::Value *val) { Instr->setOperand (15 , val); }
8937+ };
8938+
88538939// / This instruction Creates a new HitObject representing a miss
88548940struct DxilInst_HitObject_MakeMiss {
88558941 llvm::Instruction *Instr;
@@ -8923,5 +9009,36 @@ struct DxilInst_HitObject_MakeNop {
89239009 // Metadata
89249010 bool requiresUniformInputs () const { return false ; }
89259011};
9012+
9013+ // / This instruction Represents the invocation of the CH/MS shader represented
9014+ // / by the HitObject
9015+ struct DxilInst_HitObject_Invoke {
9016+ llvm::Instruction *Instr;
9017+ // Construction and identification
9018+ DxilInst_HitObject_Invoke (llvm::Instruction *pInstr) : Instr(pInstr) {}
9019+ operator bool () const {
9020+ return hlsl::OP::IsDxilOpFuncCallInst (Instr,
9021+ hlsl::OP::OpCode::HitObject_Invoke);
9022+ }
9023+ // Validation support
9024+ bool isAllowed () const { return true ; }
9025+ bool isArgumentListValid () const {
9026+ if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands ())
9027+ return false ;
9028+ return true ;
9029+ }
9030+ // Metadata
9031+ bool requiresUniformInputs () const { return false ; }
9032+ // Operand indexes
9033+ enum OperandIdx {
9034+ arg_hitObject = 1 ,
9035+ arg_payload = 2 ,
9036+ };
9037+ // Accessors
9038+ llvm::Value *get_hitObject () const { return Instr->getOperand (1 ); }
9039+ void set_hitObject (llvm::Value *val) { Instr->setOperand (1 , val); }
9040+ llvm::Value *get_payload () const { return Instr->getOperand (2 ); }
9041+ void set_payload (llvm::Value *val) { Instr->setOperand (2 , val); }
9042+ };
89269043// INSTR-HELPER:END
89279044} // namespace hlsl
0 commit comments