123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170 |
- ///////////////////////////////////////////////////////////////////////////////
- // //
- // DxilInstructions.h //
- // Copyright (C) Microsoft Corporation. All rights reserved. //
- // This file is distributed under the University of Illinois Open Source //
- // License. See LICENSE.TXT for details. //
- // //
- // This file provides a library of instruction helper classes. //
- // MUCH WORK YET TO BE DONE - EXPECT THIS WILL CHANGE - GENERATED FILE //
- // //
- ///////////////////////////////////////////////////////////////////////////////
- #pragma once
- #include "llvm/IR/Constants.h"
- #include "llvm/IR/Instruction.h"
- #include "llvm/IR/Instructions.h"
- // TODO: add correct include directives
- // TODO: add accessors with values
- // TODO: add validation support code, including calling into right fn
- // TODO: add type hierarchy
- namespace hlsl {
- /* <py>
- import hctdb_instrhelp
- </py> */
- /* <py::lines('INSTR-HELPER')>hctdb_instrhelp.get_instrhelper()</py>*/
- // INSTR-HELPER:BEGIN
- /// This instruction returns a value (possibly void), from a function.
- struct LlvmInst_Ret {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Ret(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Ret;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction branches (conditional or unconditional)
- struct LlvmInst_Br {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Br(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Br;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction performs a multiway switch
- struct LlvmInst_Switch {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Switch(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Switch;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction branches indirectly
- struct LlvmInst_IndirectBr {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_IndirectBr(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::IndirectBr;
- }
- // Validation support
- bool isAllowed() const { return false; }
- };
- /// This instruction invokes function with normal and exceptional returns
- struct LlvmInst_Invoke {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Invoke(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Invoke;
- }
- // Validation support
- bool isAllowed() const { return false; }
- };
- /// This instruction resumes the propagation of an exception
- struct LlvmInst_Resume {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Resume(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Resume;
- }
- // Validation support
- bool isAllowed() const { return false; }
- };
- /// This instruction is unreachable
- struct LlvmInst_Unreachable {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Unreachable(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Unreachable;
- }
- // Validation support
- bool isAllowed() const { return false; }
- };
- /// This instruction returns the sum of its two operands
- struct LlvmInst_Add {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Add(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Add;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns the sum of its two operands
- struct LlvmInst_FAdd {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_FAdd(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::FAdd;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns the difference of its two operands
- struct LlvmInst_Sub {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Sub(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Sub;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns the difference of its two operands
- struct LlvmInst_FSub {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_FSub(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::FSub;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns the product of its two operands
- struct LlvmInst_Mul {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Mul(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Mul;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns the product of its two operands
- struct LlvmInst_FMul {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_FMul(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::FMul;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns the quotient of its two unsigned operands
- struct LlvmInst_UDiv {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_UDiv(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::UDiv;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns the quotient of its two signed operands
- struct LlvmInst_SDiv {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_SDiv(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::SDiv;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns the quotient of its two operands
- struct LlvmInst_FDiv {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_FDiv(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::FDiv;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns the remainder from the unsigned division of its two operands
- struct LlvmInst_URem {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_URem(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::URem;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns the remainder from the signed division of its two operands
- struct LlvmInst_SRem {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_SRem(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::SRem;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns the remainder from the division of its two operands
- struct LlvmInst_FRem {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_FRem(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::FRem;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction shifts left (logical)
- struct LlvmInst_Shl {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Shl(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Shl;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction shifts right (logical), with zero bit fill
- struct LlvmInst_LShr {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_LShr(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::LShr;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction shifts right (arithmetic), with 'a' operand sign bit fill
- struct LlvmInst_AShr {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_AShr(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::AShr;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns a bitwise logical and of its two operands
- struct LlvmInst_And {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_And(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::And;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns a bitwise logical or of its two operands
- struct LlvmInst_Or {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Or(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Or;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction returns a bitwise logical xor of its two operands
- struct LlvmInst_Xor {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Xor(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Xor;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction allocates memory on the stack frame of the currently executing function
- struct LlvmInst_Alloca {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Alloca(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Alloca;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction reads from memory
- struct LlvmInst_Load {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Load(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Load;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction writes to memory
- struct LlvmInst_Store {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Store(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Store;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction gets the address of a subelement of an aggregate value
- struct LlvmInst_GetElementPtr {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_GetElementPtr(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::GetElementPtr;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction introduces happens-before edges between operations
- struct LlvmInst_Fence {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Fence(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Fence;
- }
- // Validation support
- bool isAllowed() const { return false; }
- };
- /// This instruction atomically modifies memory
- struct LlvmInst_AtomicCmpXchg {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_AtomicCmpXchg(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::AtomicCmpXchg;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction atomically modifies memory
- struct LlvmInst_AtomicRMW {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_AtomicRMW(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::AtomicRMW;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction truncates an integer
- struct LlvmInst_Trunc {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Trunc(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Trunc;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction zero extends an integer
- struct LlvmInst_ZExt {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_ZExt(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::ZExt;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction sign extends an integer
- struct LlvmInst_SExt {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_SExt(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::SExt;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction converts a floating point to UInt
- struct LlvmInst_FPToUI {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_FPToUI(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::FPToUI;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction converts a floating point to SInt
- struct LlvmInst_FPToSI {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_FPToSI(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::FPToSI;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction converts a UInt to floating point
- struct LlvmInst_UIToFP {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_UIToFP(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::UIToFP;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction converts a SInt to floating point
- struct LlvmInst_SIToFP {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_SIToFP(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::SIToFP;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction truncates a floating point
- struct LlvmInst_FPTrunc {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_FPTrunc(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::FPTrunc;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction extends a floating point
- struct LlvmInst_FPExt {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_FPExt(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::FPExt;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction converts a pointer to integer
- struct LlvmInst_PtrToInt {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_PtrToInt(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::PtrToInt;
- }
- // Validation support
- bool isAllowed() const { return false; }
- };
- /// This instruction converts an integer to Pointer
- struct LlvmInst_IntToPtr {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_IntToPtr(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::IntToPtr;
- }
- // Validation support
- bool isAllowed() const { return false; }
- };
- /// This instruction performs a bit-preserving type cast
- struct LlvmInst_BitCast {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_BitCast(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::BitCast;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction casts a value addrspace
- struct LlvmInst_AddrSpaceCast {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_AddrSpaceCast(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::AddrSpaceCast;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction compares integers
- struct LlvmInst_ICmp {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_ICmp(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::ICmp;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction compares floating points
- struct LlvmInst_FCmp {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_FCmp(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::FCmp;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction is a PHI node instruction
- struct LlvmInst_PHI {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_PHI(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::PHI;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction calls a function
- struct LlvmInst_Call {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Call(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Call;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction selects an instruction
- struct LlvmInst_Select {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_Select(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::Select;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction may be used internally in a pass
- struct LlvmInst_UserOp1 {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_UserOp1(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::UserOp1;
- }
- // Validation support
- bool isAllowed() const { return false; }
- };
- /// This instruction internal to passes only
- struct LlvmInst_UserOp2 {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_UserOp2(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::UserOp2;
- }
- // Validation support
- bool isAllowed() const { return false; }
- };
- /// This instruction vaarg instruction
- struct LlvmInst_VAArg {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_VAArg(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::VAArg;
- }
- // Validation support
- bool isAllowed() const { return false; }
- };
- /// This instruction extracts from aggregate
- struct LlvmInst_ExtractValue {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_ExtractValue(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::ExtractValue;
- }
- // Validation support
- bool isAllowed() const { return true; }
- };
- /// This instruction represents a landing pad
- struct LlvmInst_LandingPad {
- llvm::Instruction *Instr;
- // Construction and identification
- LlvmInst_LandingPad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return Instr->getOpcode() == llvm::Instruction::LandingPad;
- }
- // Validation support
- bool isAllowed() const { return false; }
- };
- /// This instruction Helper load operation
- struct DxilInst_TempRegLoad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_TempRegLoad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::TempRegLoad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_index = 1,
- };
- // Accessors
- llvm::Value *get_index() const { return Instr->getOperand(1); }
- void set_index(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Helper store operation
- struct DxilInst_TempRegStore {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_TempRegStore(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::TempRegStore);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_index = 1,
- arg_value = 2,
- };
- // Accessors
- llvm::Value *get_index() const { return Instr->getOperand(1); }
- void set_index(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_value() const { return Instr->getOperand(2); }
- void set_value(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction Helper load operation for minprecision
- struct DxilInst_MinPrecXRegLoad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_MinPrecXRegLoad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::MinPrecXRegLoad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_regIndex = 1,
- arg_index = 2,
- arg_component = 3,
- };
- // Accessors
- llvm::Value *get_regIndex() const { return Instr->getOperand(1); }
- void set_regIndex(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_index() const { return Instr->getOperand(2); }
- void set_index(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_component() const { return Instr->getOperand(3); }
- void set_component(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction Helper store operation for minprecision
- struct DxilInst_MinPrecXRegStore {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_MinPrecXRegStore(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::MinPrecXRegStore);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_regIndex = 1,
- arg_index = 2,
- arg_component = 3,
- arg_value = 4,
- };
- // Accessors
- llvm::Value *get_regIndex() const { return Instr->getOperand(1); }
- void set_regIndex(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_index() const { return Instr->getOperand(2); }
- void set_index(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_component() const { return Instr->getOperand(3); }
- void set_component(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_value() const { return Instr->getOperand(4); }
- void set_value(llvm::Value *val) { Instr->setOperand(4, val); }
- };
- /// This instruction Loads the value from shader input
- struct DxilInst_LoadInput {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_LoadInput(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::LoadInput);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_inputSigId = 1,
- arg_rowIndex = 2,
- arg_colIndex = 3,
- arg_gsVertexAxis = 4,
- };
- // Accessors
- llvm::Value *get_inputSigId() const { return Instr->getOperand(1); }
- void set_inputSigId(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_rowIndex() const { return Instr->getOperand(2); }
- void set_rowIndex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_colIndex() const { return Instr->getOperand(3); }
- void set_colIndex(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_gsVertexAxis() const { return Instr->getOperand(4); }
- void set_gsVertexAxis(llvm::Value *val) { Instr->setOperand(4, val); }
- };
- /// This instruction Stores the value to shader output
- struct DxilInst_StoreOutput {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_StoreOutput(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::StoreOutput);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_outputSigId = 1,
- arg_rowIndex = 2,
- arg_colIndex = 3,
- arg_value = 4,
- };
- // Accessors
- llvm::Value *get_outputSigId() const { return Instr->getOperand(1); }
- void set_outputSigId(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_rowIndex() const { return Instr->getOperand(2); }
- void set_rowIndex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_colIndex() const { return Instr->getOperand(3); }
- void set_colIndex(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_value() const { return Instr->getOperand(4); }
- void set_value(llvm::Value *val) { Instr->setOperand(4, val); }
- };
- /// This instruction returns the absolute value of the input value.
- struct DxilInst_FAbs {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_FAbs(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::FAbs);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction clamps the result of a single or double precision floating point value to [0.0f...1.0f]
- struct DxilInst_Saturate {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Saturate(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Saturate);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Returns true if x is NAN or QNAN, false otherwise.
- struct DxilInst_IsNaN {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_IsNaN(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::IsNaN);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Returns true if x is +INF or -INF, false otherwise.
- struct DxilInst_IsInf {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_IsInf(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::IsInf);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Returns true if x is finite, false otherwise.
- struct DxilInst_IsFinite {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_IsFinite(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::IsFinite);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns IsNormal
- struct DxilInst_IsNormal {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_IsNormal(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::IsNormal);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns cosine(theta) for theta in radians.
- struct DxilInst_Cos {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Cos(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Cos);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns sine(theta) for theta in radians.
- struct DxilInst_Sin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Sin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Sin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns tan(theta) for theta in radians.
- struct DxilInst_Tan {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Tan(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Tan);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Returns the arccosine of the specified value. Input should be a floating-point value within the range of -1 to 1.
- struct DxilInst_Acos {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Acos(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Acos);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Returns the arccosine of the specified value. Input should be a floating-point value within the range of -1 to 1
- struct DxilInst_Asin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Asin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Asin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Returns the arctangent of the specified value. The return value is within the range of -PI/2 to PI/2.
- struct DxilInst_Atan {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Atan(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Atan);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns the hyperbolic cosine of the specified value.
- struct DxilInst_Hcos {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Hcos(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Hcos);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns the hyperbolic sine of the specified value.
- struct DxilInst_Hsin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Hsin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Hsin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns the hyperbolic tangent of the specified value.
- struct DxilInst_Htan {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Htan(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Htan);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns 2^exponent
- struct DxilInst_Exp {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Exp(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Exp);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction extract fracitonal component.
- struct DxilInst_Frc {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Frc(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Frc);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns log base 2.
- struct DxilInst_Log {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Log(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Log);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns square root
- struct DxilInst_Sqrt {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Sqrt(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Sqrt);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns reciprocal square root (1 / sqrt(src)
- struct DxilInst_Rsqrt {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Rsqrt(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Rsqrt);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction floating-point round to integral float.
- struct DxilInst_Round_ne {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Round_ne(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Round_ne);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction floating-point round to integral float.
- struct DxilInst_Round_ni {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Round_ni(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Round_ni);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction floating-point round to integral float.
- struct DxilInst_Round_pi {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Round_pi(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Round_pi);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction floating-point round to integral float.
- struct DxilInst_Round_z {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Round_z(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Round_z);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Reverses the order of the bits.
- struct DxilInst_Bfrev {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Bfrev(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Bfrev);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Counts the number of bits in the input integer.
- struct DxilInst_Countbits {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Countbits(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Countbits);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Returns the location of the first set bit starting from the lowest order bit and working upward.
- struct DxilInst_FirstbitLo {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_FirstbitLo(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::FirstbitLo);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Returns the location of the first set bit starting from the highest order bit and working downward.
- struct DxilInst_FirstbitHi {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_FirstbitHi(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::FirstbitHi);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Returns the location of the first set bit from the highest order bit based on the sign.
- struct DxilInst_FirstbitSHi {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_FirstbitSHi(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::FirstbitSHi);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns a if a >= b, else b
- struct DxilInst_FMax {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_FMax(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::FMax);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction returns a if a < b, else b
- struct DxilInst_FMin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_FMin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::FMin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction IMax(a,b) returns a if a > b, else b
- struct DxilInst_IMax {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_IMax(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::IMax);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction IMin(a,b) returns a if a < b, else b
- struct DxilInst_IMin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_IMin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::IMin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction unsigned integer maximum. UMax(a,b) = a > b ? a : b
- struct DxilInst_UMax {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_UMax(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::UMax);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction unsigned integer minimum. UMin(a,b) = a < b ? a : b
- struct DxilInst_UMin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_UMin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::UMin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction multiply of 32-bit operands to produce the correct full 64-bit result.
- struct DxilInst_IMul {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_IMul(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::IMul);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction multiply of 32-bit operands to produce the correct full 64-bit result.
- struct DxilInst_UMul {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_UMul(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::UMul);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction unsigned divide of the 32-bit operand src0 by the 32-bit operand src1.
- struct DxilInst_UDiv {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_UDiv(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::UDiv);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction unsigned add of 32-bit operand with the carry
- struct DxilInst_UAddc {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_UAddc(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::UAddc);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction unsigned subtract of 32-bit operands with the borrow
- struct DxilInst_USubb {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_USubb(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::USubb);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction floating point multiply & add
- struct DxilInst_FMad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_FMad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::FMad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- arg_c = 3,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_c() const { return Instr->getOperand(3); }
- void set_c(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction fused multiply-add
- struct DxilInst_Fma {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Fma(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Fma);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- arg_c = 3,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_c() const { return Instr->getOperand(3); }
- void set_c(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction Signed integer multiply & add
- struct DxilInst_IMad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_IMad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::IMad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- arg_c = 3,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_c() const { return Instr->getOperand(3); }
- void set_c(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction Unsigned integer multiply & add
- struct DxilInst_UMad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_UMad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::UMad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- arg_c = 3,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_c() const { return Instr->getOperand(3); }
- void set_c(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction masked Sum of Absolute Differences.
- struct DxilInst_Msad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Msad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Msad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- arg_c = 3,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_c() const { return Instr->getOperand(3); }
- void set_c(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction Integer bitfield extract
- struct DxilInst_Ibfe {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Ibfe(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Ibfe);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- arg_c = 3,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_c() const { return Instr->getOperand(3); }
- void set_c(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction Unsigned integer bitfield extract
- struct DxilInst_Ubfe {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Ubfe(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Ubfe);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_a = 1,
- arg_b = 2,
- arg_c = 3,
- };
- // Accessors
- llvm::Value *get_a() const { return Instr->getOperand(1); }
- void set_a(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_b() const { return Instr->getOperand(2); }
- void set_b(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_c() const { return Instr->getOperand(3); }
- void set_c(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction Given a bit range from the LSB of a number, places that number of bits in another number at any offset
- struct DxilInst_Bfi {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Bfi(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Bfi);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_width = 1,
- arg_offset = 2,
- arg_value = 3,
- arg_replacedValue = 4,
- };
- // Accessors
- llvm::Value *get_width() const { return Instr->getOperand(1); }
- void set_width(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_offset() const { return Instr->getOperand(2); }
- void set_offset(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_value() const { return Instr->getOperand(3); }
- void set_value(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_replacedValue() const { return Instr->getOperand(4); }
- void set_replacedValue(llvm::Value *val) { Instr->setOperand(4, val); }
- };
- /// This instruction Two-dimensional vector dot-product
- struct DxilInst_Dot2 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Dot2(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Dot2);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_ax = 1,
- arg_ay = 2,
- arg_bx = 3,
- arg_by = 4,
- };
- // Accessors
- llvm::Value *get_ax() const { return Instr->getOperand(1); }
- void set_ax(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_ay() const { return Instr->getOperand(2); }
- void set_ay(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_bx() const { return Instr->getOperand(3); }
- void set_bx(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_by() const { return Instr->getOperand(4); }
- void set_by(llvm::Value *val) { Instr->setOperand(4, val); }
- };
- /// This instruction Three-dimensional vector dot-product
- struct DxilInst_Dot3 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Dot3(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Dot3);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (7 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_ax = 1,
- arg_ay = 2,
- arg_az = 3,
- arg_bx = 4,
- arg_by = 5,
- arg_bz = 6,
- };
- // Accessors
- llvm::Value *get_ax() const { return Instr->getOperand(1); }
- void set_ax(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_ay() const { return Instr->getOperand(2); }
- void set_ay(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_az() const { return Instr->getOperand(3); }
- void set_az(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_bx() const { return Instr->getOperand(4); }
- void set_bx(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_by() const { return Instr->getOperand(5); }
- void set_by(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_bz() const { return Instr->getOperand(6); }
- void set_bz(llvm::Value *val) { Instr->setOperand(6, val); }
- };
- /// This instruction Four-dimensional vector dot-product
- struct DxilInst_Dot4 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Dot4(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Dot4);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (9 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_ax = 1,
- arg_ay = 2,
- arg_az = 3,
- arg_aw = 4,
- arg_bx = 5,
- arg_by = 6,
- arg_bz = 7,
- arg_bw = 8,
- };
- // Accessors
- llvm::Value *get_ax() const { return Instr->getOperand(1); }
- void set_ax(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_ay() const { return Instr->getOperand(2); }
- void set_ay(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_az() const { return Instr->getOperand(3); }
- void set_az(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_aw() const { return Instr->getOperand(4); }
- void set_aw(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_bx() const { return Instr->getOperand(5); }
- void set_bx(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_by() const { return Instr->getOperand(6); }
- void set_by(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_bz() const { return Instr->getOperand(7); }
- void set_bz(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_bw() const { return Instr->getOperand(8); }
- void set_bw(llvm::Value *val) { Instr->setOperand(8, val); }
- };
- /// This instruction creates the handle to a resource
- struct DxilInst_CreateHandle {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_CreateHandle(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::CreateHandle);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_resourceClass = 1,
- arg_rangeId = 2,
- arg_index = 3,
- arg_nonUniformIndex = 4,
- };
- // Accessors
- llvm::Value *get_resourceClass() const { return Instr->getOperand(1); }
- void set_resourceClass(llvm::Value *val) { Instr->setOperand(1, val); }
- int8_t get_resourceClass_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(1))->getZExtValue()); }
- void set_resourceClass_val(int8_t val) { Instr->setOperand(1, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- llvm::Value *get_rangeId() const { return Instr->getOperand(2); }
- void set_rangeId(llvm::Value *val) { Instr->setOperand(2, val); }
- int32_t get_rangeId_val() const { return (int32_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_rangeId_val(int32_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 32), llvm::APInt(32, (uint64_t)val))); }
- llvm::Value *get_index() const { return Instr->getOperand(3); }
- void set_index(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_nonUniformIndex() const { return Instr->getOperand(4); }
- void set_nonUniformIndex(llvm::Value *val) { Instr->setOperand(4, val); }
- bool get_nonUniformIndex_val() const { return (bool)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(4))->getZExtValue()); }
- void set_nonUniformIndex_val(bool val) { Instr->setOperand(4, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 1), llvm::APInt(1, (uint64_t)val))); }
- };
- /// This instruction loads a value from a constant buffer resource
- struct DxilInst_CBufferLoad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_CBufferLoad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::CBufferLoad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_handle = 1,
- arg_byteOffset = 2,
- arg_alignment = 3,
- };
- // Accessors
- llvm::Value *get_handle() const { return Instr->getOperand(1); }
- void set_handle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_byteOffset() const { return Instr->getOperand(2); }
- void set_byteOffset(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_alignment() const { return Instr->getOperand(3); }
- void set_alignment(llvm::Value *val) { Instr->setOperand(3, val); }
- uint32_t get_alignment_val() const { return (uint32_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(3))->getZExtValue()); }
- void set_alignment_val(uint32_t val) { Instr->setOperand(3, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 32), llvm::APInt(32, (uint64_t)val))); }
- };
- /// This instruction loads a value from a constant buffer resource
- struct DxilInst_CBufferLoadLegacy {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_CBufferLoadLegacy(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::CBufferLoadLegacy);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_handle = 1,
- arg_regIndex = 2,
- };
- // Accessors
- llvm::Value *get_handle() const { return Instr->getOperand(1); }
- void set_handle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_regIndex() const { return Instr->getOperand(2); }
- void set_regIndex(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction samples a texture
- struct DxilInst_Sample {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Sample(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Sample);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (11 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_sampler = 2,
- arg_coord0 = 3,
- arg_coord1 = 4,
- arg_coord2 = 5,
- arg_coord3 = 6,
- arg_offset0 = 7,
- arg_offset1 = 8,
- arg_offset2 = 9,
- arg_clamp = 10,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(2); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(3); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(4); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_coord2() const { return Instr->getOperand(5); }
- void set_coord2(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_coord3() const { return Instr->getOperand(6); }
- void set_coord3(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_offset0() const { return Instr->getOperand(7); }
- void set_offset0(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_offset1() const { return Instr->getOperand(8); }
- void set_offset1(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_offset2() const { return Instr->getOperand(9); }
- void set_offset2(llvm::Value *val) { Instr->setOperand(9, val); }
- llvm::Value *get_clamp() const { return Instr->getOperand(10); }
- void set_clamp(llvm::Value *val) { Instr->setOperand(10, val); }
- };
- /// This instruction samples a texture after applying the input bias to the mipmap level
- struct DxilInst_SampleBias {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_SampleBias(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::SampleBias);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (12 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_sampler = 2,
- arg_coord0 = 3,
- arg_coord1 = 4,
- arg_coord2 = 5,
- arg_coord3 = 6,
- arg_offset0 = 7,
- arg_offset1 = 8,
- arg_offset2 = 9,
- arg_bias = 10,
- arg_clamp = 11,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(2); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(3); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(4); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_coord2() const { return Instr->getOperand(5); }
- void set_coord2(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_coord3() const { return Instr->getOperand(6); }
- void set_coord3(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_offset0() const { return Instr->getOperand(7); }
- void set_offset0(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_offset1() const { return Instr->getOperand(8); }
- void set_offset1(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_offset2() const { return Instr->getOperand(9); }
- void set_offset2(llvm::Value *val) { Instr->setOperand(9, val); }
- llvm::Value *get_bias() const { return Instr->getOperand(10); }
- void set_bias(llvm::Value *val) { Instr->setOperand(10, val); }
- llvm::Value *get_clamp() const { return Instr->getOperand(11); }
- void set_clamp(llvm::Value *val) { Instr->setOperand(11, val); }
- };
- /// This instruction samples a texture using a mipmap-level offset
- struct DxilInst_SampleLevel {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_SampleLevel(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::SampleLevel);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (11 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_sampler = 2,
- arg_coord0 = 3,
- arg_coord1 = 4,
- arg_coord2 = 5,
- arg_coord3 = 6,
- arg_offset0 = 7,
- arg_offset1 = 8,
- arg_offset2 = 9,
- arg_LOD = 10,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(2); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(3); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(4); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_coord2() const { return Instr->getOperand(5); }
- void set_coord2(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_coord3() const { return Instr->getOperand(6); }
- void set_coord3(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_offset0() const { return Instr->getOperand(7); }
- void set_offset0(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_offset1() const { return Instr->getOperand(8); }
- void set_offset1(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_offset2() const { return Instr->getOperand(9); }
- void set_offset2(llvm::Value *val) { Instr->setOperand(9, val); }
- llvm::Value *get_LOD() const { return Instr->getOperand(10); }
- void set_LOD(llvm::Value *val) { Instr->setOperand(10, val); }
- };
- /// This instruction samples a texture using a gradient to influence the way the sample location is calculated
- struct DxilInst_SampleGrad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_SampleGrad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::SampleGrad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (17 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_sampler = 2,
- arg_coord0 = 3,
- arg_coord1 = 4,
- arg_coord2 = 5,
- arg_coord3 = 6,
- arg_offset0 = 7,
- arg_offset1 = 8,
- arg_offset2 = 9,
- arg_ddx0 = 10,
- arg_ddx1 = 11,
- arg_ddx2 = 12,
- arg_ddy0 = 13,
- arg_ddy1 = 14,
- arg_ddy2 = 15,
- arg_clamp = 16,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(2); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(3); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(4); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_coord2() const { return Instr->getOperand(5); }
- void set_coord2(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_coord3() const { return Instr->getOperand(6); }
- void set_coord3(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_offset0() const { return Instr->getOperand(7); }
- void set_offset0(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_offset1() const { return Instr->getOperand(8); }
- void set_offset1(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_offset2() const { return Instr->getOperand(9); }
- void set_offset2(llvm::Value *val) { Instr->setOperand(9, val); }
- llvm::Value *get_ddx0() const { return Instr->getOperand(10); }
- void set_ddx0(llvm::Value *val) { Instr->setOperand(10, val); }
- llvm::Value *get_ddx1() const { return Instr->getOperand(11); }
- void set_ddx1(llvm::Value *val) { Instr->setOperand(11, val); }
- llvm::Value *get_ddx2() const { return Instr->getOperand(12); }
- void set_ddx2(llvm::Value *val) { Instr->setOperand(12, val); }
- llvm::Value *get_ddy0() const { return Instr->getOperand(13); }
- void set_ddy0(llvm::Value *val) { Instr->setOperand(13, val); }
- llvm::Value *get_ddy1() const { return Instr->getOperand(14); }
- void set_ddy1(llvm::Value *val) { Instr->setOperand(14, val); }
- llvm::Value *get_ddy2() const { return Instr->getOperand(15); }
- void set_ddy2(llvm::Value *val) { Instr->setOperand(15, val); }
- llvm::Value *get_clamp() const { return Instr->getOperand(16); }
- void set_clamp(llvm::Value *val) { Instr->setOperand(16, val); }
- };
- /// This instruction samples a texture and compares a single component against the specified comparison value
- struct DxilInst_SampleCmp {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_SampleCmp(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::SampleCmp);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (12 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_sampler = 2,
- arg_coord0 = 3,
- arg_coord1 = 4,
- arg_coord2 = 5,
- arg_coord3 = 6,
- arg_offset0 = 7,
- arg_offset1 = 8,
- arg_offset2 = 9,
- arg_compareValue = 10,
- arg_clamp = 11,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(2); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(3); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(4); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_coord2() const { return Instr->getOperand(5); }
- void set_coord2(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_coord3() const { return Instr->getOperand(6); }
- void set_coord3(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_offset0() const { return Instr->getOperand(7); }
- void set_offset0(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_offset1() const { return Instr->getOperand(8); }
- void set_offset1(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_offset2() const { return Instr->getOperand(9); }
- void set_offset2(llvm::Value *val) { Instr->setOperand(9, val); }
- llvm::Value *get_compareValue() const { return Instr->getOperand(10); }
- void set_compareValue(llvm::Value *val) { Instr->setOperand(10, val); }
- llvm::Value *get_clamp() const { return Instr->getOperand(11); }
- void set_clamp(llvm::Value *val) { Instr->setOperand(11, val); }
- };
- /// This instruction samples a texture and compares a single component against the specified comparison value
- struct DxilInst_SampleCmpLevelZero {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_SampleCmpLevelZero(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::SampleCmpLevelZero);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (11 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_sampler = 2,
- arg_coord0 = 3,
- arg_coord1 = 4,
- arg_coord2 = 5,
- arg_coord3 = 6,
- arg_offset0 = 7,
- arg_offset1 = 8,
- arg_offset2 = 9,
- arg_compareValue = 10,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(2); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(3); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(4); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_coord2() const { return Instr->getOperand(5); }
- void set_coord2(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_coord3() const { return Instr->getOperand(6); }
- void set_coord3(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_offset0() const { return Instr->getOperand(7); }
- void set_offset0(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_offset1() const { return Instr->getOperand(8); }
- void set_offset1(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_offset2() const { return Instr->getOperand(9); }
- void set_offset2(llvm::Value *val) { Instr->setOperand(9, val); }
- llvm::Value *get_compareValue() const { return Instr->getOperand(10); }
- void set_compareValue(llvm::Value *val) { Instr->setOperand(10, val); }
- };
- /// This instruction reads texel data without any filtering or sampling
- struct DxilInst_TextureLoad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_TextureLoad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::TextureLoad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (9 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_mipLevelOrSampleCount = 2,
- arg_coord0 = 3,
- arg_coord1 = 4,
- arg_coord2 = 5,
- arg_offset0 = 6,
- arg_offset1 = 7,
- arg_offset2 = 8,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_mipLevelOrSampleCount() const { return Instr->getOperand(2); }
- void set_mipLevelOrSampleCount(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(3); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(4); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_coord2() const { return Instr->getOperand(5); }
- void set_coord2(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_offset0() const { return Instr->getOperand(6); }
- void set_offset0(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_offset1() const { return Instr->getOperand(7); }
- void set_offset1(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_offset2() const { return Instr->getOperand(8); }
- void set_offset2(llvm::Value *val) { Instr->setOperand(8, val); }
- };
- /// This instruction reads texel data without any filtering or sampling
- struct DxilInst_TextureStore {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_TextureStore(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::TextureStore);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (10 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_coord0 = 2,
- arg_coord1 = 3,
- arg_coord2 = 4,
- arg_value0 = 5,
- arg_value1 = 6,
- arg_value2 = 7,
- arg_value3 = 8,
- arg_mask = 9,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(2); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(3); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_coord2() const { return Instr->getOperand(4); }
- void set_coord2(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_value0() const { return Instr->getOperand(5); }
- void set_value0(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_value1() const { return Instr->getOperand(6); }
- void set_value1(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_value2() const { return Instr->getOperand(7); }
- void set_value2(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_value3() const { return Instr->getOperand(8); }
- void set_value3(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_mask() const { return Instr->getOperand(9); }
- void set_mask(llvm::Value *val) { Instr->setOperand(9, val); }
- };
- /// This instruction reads from a TypedBuffer
- struct DxilInst_BufferLoad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_BufferLoad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::BufferLoad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_index = 2,
- arg_wot = 3,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_index() const { return Instr->getOperand(2); }
- void set_index(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_wot() const { return Instr->getOperand(3); }
- void set_wot(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction writes to a RWTypedBuffer
- struct DxilInst_BufferStore {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_BufferStore(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::BufferStore);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (9 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_uav = 1,
- arg_coord0 = 2,
- arg_coord1 = 3,
- arg_value0 = 4,
- arg_value1 = 5,
- arg_value2 = 6,
- arg_value3 = 7,
- arg_mask = 8,
- };
- // Accessors
- llvm::Value *get_uav() const { return Instr->getOperand(1); }
- void set_uav(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(2); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(3); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_value0() const { return Instr->getOperand(4); }
- void set_value0(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_value1() const { return Instr->getOperand(5); }
- void set_value1(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_value2() const { return Instr->getOperand(6); }
- void set_value2(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_value3() const { return Instr->getOperand(7); }
- void set_value3(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_mask() const { return Instr->getOperand(8); }
- void set_mask(llvm::Value *val) { Instr->setOperand(8, val); }
- };
- /// This instruction atomically increments/decrements the hidden 32-bit counter stored with a Count or Append UAV
- struct DxilInst_BufferUpdateCounter {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_BufferUpdateCounter(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::BufferUpdateCounter);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_uav = 1,
- arg_inc = 2,
- };
- // Accessors
- llvm::Value *get_uav() const { return Instr->getOperand(1); }
- void set_uav(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_inc() const { return Instr->getOperand(2); }
- void set_inc(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction determines whether all values from a Sample, Gather, or Load operation accessed mapped tiles in a tiled resource
- struct DxilInst_CheckAccessFullyMapped {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_CheckAccessFullyMapped(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::CheckAccessFullyMapped);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_status = 1,
- };
- // Accessors
- llvm::Value *get_status() const { return Instr->getOperand(1); }
- void set_status(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction gets texture size information
- struct DxilInst_GetDimensions {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_GetDimensions(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::GetDimensions);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_handle = 1,
- arg_mipLevel = 2,
- };
- // Accessors
- llvm::Value *get_handle() const { return Instr->getOperand(1); }
- void set_handle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_mipLevel() const { return Instr->getOperand(2); }
- void set_mipLevel(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction gathers the four texels that would be used in a bi-linear filtering operation
- struct DxilInst_TextureGather {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_TextureGather(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::TextureGather);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (10 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_sampler = 2,
- arg_coord0 = 3,
- arg_coord1 = 4,
- arg_coord2 = 5,
- arg_coord3 = 6,
- arg_offset0 = 7,
- arg_offset1 = 8,
- arg_channel = 9,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(2); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(3); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(4); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_coord2() const { return Instr->getOperand(5); }
- void set_coord2(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_coord3() const { return Instr->getOperand(6); }
- void set_coord3(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_offset0() const { return Instr->getOperand(7); }
- void set_offset0(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_offset1() const { return Instr->getOperand(8); }
- void set_offset1(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_channel() const { return Instr->getOperand(9); }
- void set_channel(llvm::Value *val) { Instr->setOperand(9, val); }
- };
- /// This instruction same as TextureGather, except this instrution performs comparison on texels, similar to SampleCmp
- struct DxilInst_TextureGatherCmp {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_TextureGatherCmp(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::TextureGatherCmp);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (11 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_sampler = 2,
- arg_coord0 = 3,
- arg_coord1 = 4,
- arg_coord2 = 5,
- arg_coord3 = 6,
- arg_offset0 = 7,
- arg_offset1 = 8,
- arg_channel = 9,
- arg_compareVale = 10,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(2); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(3); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(4); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_coord2() const { return Instr->getOperand(5); }
- void set_coord2(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_coord3() const { return Instr->getOperand(6); }
- void set_coord3(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_offset0() const { return Instr->getOperand(7); }
- void set_offset0(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_offset1() const { return Instr->getOperand(8); }
- void set_offset1(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_channel() const { return Instr->getOperand(9); }
- void set_channel(llvm::Value *val) { Instr->setOperand(9, val); }
- llvm::Value *get_compareVale() const { return Instr->getOperand(10); }
- void set_compareVale(llvm::Value *val) { Instr->setOperand(10, val); }
- };
- /// This instruction gets the position of the specified sample
- struct DxilInst_Texture2DMSGetSamplePosition {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Texture2DMSGetSamplePosition(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Texture2DMSGetSamplePosition);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_index = 2,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_index() const { return Instr->getOperand(2); }
- void set_index(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction gets the position of the specified sample
- struct DxilInst_RenderTargetGetSamplePosition {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RenderTargetGetSamplePosition(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RenderTargetGetSamplePosition);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_index = 1,
- };
- // Accessors
- llvm::Value *get_index() const { return Instr->getOperand(1); }
- void set_index(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction gets the number of samples for a render target
- struct DxilInst_RenderTargetGetSampleCount {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RenderTargetGetSampleCount(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RenderTargetGetSampleCount);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction performs an atomic operation on two operands
- struct DxilInst_AtomicBinOp {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_AtomicBinOp(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::AtomicBinOp);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (7 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_handle = 1,
- arg_atomicOp = 2,
- arg_offset0 = 3,
- arg_offset1 = 4,
- arg_offset2 = 5,
- arg_newValue = 6,
- };
- // Accessors
- llvm::Value *get_handle() const { return Instr->getOperand(1); }
- void set_handle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_atomicOp() const { return Instr->getOperand(2); }
- void set_atomicOp(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_offset0() const { return Instr->getOperand(3); }
- void set_offset0(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_offset1() const { return Instr->getOperand(4); }
- void set_offset1(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_offset2() const { return Instr->getOperand(5); }
- void set_offset2(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_newValue() const { return Instr->getOperand(6); }
- void set_newValue(llvm::Value *val) { Instr->setOperand(6, val); }
- };
- /// This instruction atomic compare and exchange to memory
- struct DxilInst_AtomicCompareExchange {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_AtomicCompareExchange(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::AtomicCompareExchange);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (7 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_handle = 1,
- arg_offset0 = 2,
- arg_offset1 = 3,
- arg_offset2 = 4,
- arg_compareValue = 5,
- arg_newValue = 6,
- };
- // Accessors
- llvm::Value *get_handle() const { return Instr->getOperand(1); }
- void set_handle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_offset0() const { return Instr->getOperand(2); }
- void set_offset0(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_offset1() const { return Instr->getOperand(3); }
- void set_offset1(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_offset2() const { return Instr->getOperand(4); }
- void set_offset2(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_compareValue() const { return Instr->getOperand(5); }
- void set_compareValue(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_newValue() const { return Instr->getOperand(6); }
- void set_newValue(llvm::Value *val) { Instr->setOperand(6, val); }
- };
- /// This instruction inserts a memory barrier in the shader
- struct DxilInst_Barrier {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Barrier(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Barrier);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_barrierMode = 1,
- };
- // Accessors
- llvm::Value *get_barrierMode() const { return Instr->getOperand(1); }
- void set_barrierMode(llvm::Value *val) { Instr->setOperand(1, val); }
- int32_t get_barrierMode_val() const { return (int32_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(1))->getZExtValue()); }
- void set_barrierMode_val(int32_t val) { Instr->setOperand(1, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 32), llvm::APInt(32, (uint64_t)val))); }
- };
- /// This instruction calculates the level of detail
- struct DxilInst_CalculateLOD {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_CalculateLOD(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::CalculateLOD);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (7 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_handle = 1,
- arg_sampler = 2,
- arg_coord0 = 3,
- arg_coord1 = 4,
- arg_coord2 = 5,
- arg_clamped = 6,
- };
- // Accessors
- llvm::Value *get_handle() const { return Instr->getOperand(1); }
- void set_handle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(2); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_coord0() const { return Instr->getOperand(3); }
- void set_coord0(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_coord1() const { return Instr->getOperand(4); }
- void set_coord1(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_coord2() const { return Instr->getOperand(5); }
- void set_coord2(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_clamped() const { return Instr->getOperand(6); }
- void set_clamped(llvm::Value *val) { Instr->setOperand(6, val); }
- };
- /// This instruction discard the current pixel
- struct DxilInst_Discard {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Discard(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Discard);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_condition = 1,
- };
- // Accessors
- llvm::Value *get_condition() const { return Instr->getOperand(1); }
- void set_condition(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction computes the rate of change per stamp in x direction.
- struct DxilInst_DerivCoarseX {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_DerivCoarseX(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::DerivCoarseX);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction computes the rate of change per stamp in y direction.
- struct DxilInst_DerivCoarseY {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_DerivCoarseY(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::DerivCoarseY);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction computes the rate of change per pixel in x direction.
- struct DxilInst_DerivFineX {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_DerivFineX(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::DerivFineX);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction computes the rate of change per pixel in y direction.
- struct DxilInst_DerivFineY {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_DerivFineY(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::DerivFineY);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction evaluates an input attribute at pixel center with an offset
- struct DxilInst_EvalSnapped {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_EvalSnapped(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::EvalSnapped);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (6 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_inputSigId = 1,
- arg_inputRowIndex = 2,
- arg_inputColIndex = 3,
- arg_offsetX = 4,
- arg_offsetY = 5,
- };
- // Accessors
- llvm::Value *get_inputSigId() const { return Instr->getOperand(1); }
- void set_inputSigId(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_inputRowIndex() const { return Instr->getOperand(2); }
- void set_inputRowIndex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_inputColIndex() const { return Instr->getOperand(3); }
- void set_inputColIndex(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_offsetX() const { return Instr->getOperand(4); }
- void set_offsetX(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_offsetY() const { return Instr->getOperand(5); }
- void set_offsetY(llvm::Value *val) { Instr->setOperand(5, val); }
- };
- /// This instruction evaluates an input attribute at a sample location
- struct DxilInst_EvalSampleIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_EvalSampleIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::EvalSampleIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_inputSigId = 1,
- arg_inputRowIndex = 2,
- arg_inputColIndex = 3,
- arg_sampleIndex = 4,
- };
- // Accessors
- llvm::Value *get_inputSigId() const { return Instr->getOperand(1); }
- void set_inputSigId(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_inputRowIndex() const { return Instr->getOperand(2); }
- void set_inputRowIndex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_inputColIndex() const { return Instr->getOperand(3); }
- void set_inputColIndex(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_sampleIndex() const { return Instr->getOperand(4); }
- void set_sampleIndex(llvm::Value *val) { Instr->setOperand(4, val); }
- };
- /// This instruction evaluates an input attribute at pixel center
- struct DxilInst_EvalCentroid {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_EvalCentroid(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::EvalCentroid);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_inputSigId = 1,
- arg_inputRowIndex = 2,
- arg_inputColIndex = 3,
- };
- // Accessors
- llvm::Value *get_inputSigId() const { return Instr->getOperand(1); }
- void set_inputSigId(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_inputRowIndex() const { return Instr->getOperand(2); }
- void set_inputRowIndex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_inputColIndex() const { return Instr->getOperand(3); }
- void set_inputColIndex(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction returns the sample index in a sample-frequency pixel shader
- struct DxilInst_SampleIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_SampleIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::SampleIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction returns the coverage mask input in a pixel shader
- struct DxilInst_Coverage {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Coverage(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Coverage);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction returns underestimated coverage input from conservative rasterization in a pixel shader
- struct DxilInst_InnerCoverage {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_InnerCoverage(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::InnerCoverage);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction reads the thread ID
- struct DxilInst_ThreadId {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_ThreadId(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::ThreadId);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_component = 1,
- };
- // Accessors
- llvm::Value *get_component() const { return Instr->getOperand(1); }
- void set_component(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction reads the group ID (SV_GroupID)
- struct DxilInst_GroupId {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_GroupId(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::GroupId);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_component = 1,
- };
- // Accessors
- llvm::Value *get_component() const { return Instr->getOperand(1); }
- void set_component(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction reads the thread ID within the group (SV_GroupThreadID)
- struct DxilInst_ThreadIdInGroup {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_ThreadIdInGroup(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::ThreadIdInGroup);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_component = 1,
- };
- // Accessors
- llvm::Value *get_component() const { return Instr->getOperand(1); }
- void set_component(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction provides a flattened index for a given thread within a given group (SV_GroupIndex)
- struct DxilInst_FlattenedThreadIdInGroup {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_FlattenedThreadIdInGroup(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::FlattenedThreadIdInGroup);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction emits a vertex to a given stream
- struct DxilInst_EmitStream {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_EmitStream(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::EmitStream);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_streamId = 1,
- };
- // Accessors
- llvm::Value *get_streamId() const { return Instr->getOperand(1); }
- void set_streamId(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction completes the current primitive topology at the specified stream
- struct DxilInst_CutStream {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_CutStream(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::CutStream);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_streamId = 1,
- };
- // Accessors
- llvm::Value *get_streamId() const { return Instr->getOperand(1); }
- void set_streamId(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction equivalent to an EmitStream followed by a CutStream
- struct DxilInst_EmitThenCutStream {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_EmitThenCutStream(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::EmitThenCutStream);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_streamId = 1,
- };
- // Accessors
- llvm::Value *get_streamId() const { return Instr->getOperand(1); }
- void set_streamId(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction GSInstanceID
- struct DxilInst_GSInstanceID {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_GSInstanceID(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::GSInstanceID);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction creates a double value
- struct DxilInst_MakeDouble {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_MakeDouble(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::MakeDouble);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_lo = 1,
- arg_hi = 2,
- };
- // Accessors
- llvm::Value *get_lo() const { return Instr->getOperand(1); }
- void set_lo(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_hi() const { return Instr->getOperand(2); }
- void set_hi(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction splits a double into low and high parts
- struct DxilInst_SplitDouble {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_SplitDouble(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::SplitDouble);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction LoadOutputControlPoint
- struct DxilInst_LoadOutputControlPoint {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_LoadOutputControlPoint(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::LoadOutputControlPoint);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_inputSigId = 1,
- arg_row = 2,
- arg_col = 3,
- arg_index = 4,
- };
- // Accessors
- llvm::Value *get_inputSigId() const { return Instr->getOperand(1); }
- void set_inputSigId(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_row() const { return Instr->getOperand(2); }
- void set_row(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_col() const { return Instr->getOperand(3); }
- void set_col(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_index() const { return Instr->getOperand(4); }
- void set_index(llvm::Value *val) { Instr->setOperand(4, val); }
- };
- /// This instruction LoadPatchConstant
- struct DxilInst_LoadPatchConstant {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_LoadPatchConstant(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::LoadPatchConstant);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_inputSigId = 1,
- arg_row = 2,
- arg_col = 3,
- };
- // Accessors
- llvm::Value *get_inputSigId() const { return Instr->getOperand(1); }
- void set_inputSigId(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_row() const { return Instr->getOperand(2); }
- void set_row(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_col() const { return Instr->getOperand(3); }
- void set_col(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction DomainLocation
- struct DxilInst_DomainLocation {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_DomainLocation(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::DomainLocation);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_component = 1,
- };
- // Accessors
- llvm::Value *get_component() const { return Instr->getOperand(1); }
- void set_component(llvm::Value *val) { Instr->setOperand(1, val); }
- int8_t get_component_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(1))->getZExtValue()); }
- void set_component_val(int8_t val) { Instr->setOperand(1, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction StorePatchConstant
- struct DxilInst_StorePatchConstant {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_StorePatchConstant(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::StorePatchConstant);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_outputSigID = 1,
- arg_row = 2,
- arg_col = 3,
- arg_value = 4,
- };
- // Accessors
- llvm::Value *get_outputSigID() const { return Instr->getOperand(1); }
- void set_outputSigID(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_row() const { return Instr->getOperand(2); }
- void set_row(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_col() const { return Instr->getOperand(3); }
- void set_col(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_value() const { return Instr->getOperand(4); }
- void set_value(llvm::Value *val) { Instr->setOperand(4, val); }
- };
- /// This instruction OutputControlPointID
- struct DxilInst_OutputControlPointID {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_OutputControlPointID(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::OutputControlPointID);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction PrimitiveID
- struct DxilInst_PrimitiveID {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_PrimitiveID(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::PrimitiveID);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction CycleCounterLegacy
- struct DxilInst_CycleCounterLegacy {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_CycleCounterLegacy(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::CycleCounterLegacy);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction returns 1 for the first lane in the wave
- struct DxilInst_WaveIsFirstLane {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveIsFirstLane(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveIsFirstLane);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction returns the index of the current lane in the wave
- struct DxilInst_WaveGetLaneIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveGetLaneIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveGetLaneIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction returns the number of lanes in the wave
- struct DxilInst_WaveGetLaneCount {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveGetLaneCount(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveGetLaneCount);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction returns 1 if any of the lane evaluates the value to true
- struct DxilInst_WaveAnyTrue {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveAnyTrue(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveAnyTrue);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_cond = 1,
- };
- // Accessors
- llvm::Value *get_cond() const { return Instr->getOperand(1); }
- void set_cond(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns 1 if all the lanes evaluate the value to true
- struct DxilInst_WaveAllTrue {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveAllTrue(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveAllTrue);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_cond = 1,
- };
- // Accessors
- llvm::Value *get_cond() const { return Instr->getOperand(1); }
- void set_cond(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns 1 if all the lanes have the same value
- struct DxilInst_WaveActiveAllEqual {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveActiveAllEqual(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveActiveAllEqual);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns a struct with a bit set for each lane where the condition is true
- struct DxilInst_WaveActiveBallot {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveActiveBallot(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveActiveBallot);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_cond = 1,
- };
- // Accessors
- llvm::Value *get_cond() const { return Instr->getOperand(1); }
- void set_cond(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns the value from the specified lane
- struct DxilInst_WaveReadLaneAt {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveReadLaneAt(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveReadLaneAt);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- arg_lane = 2,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_lane() const { return Instr->getOperand(2); }
- void set_lane(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction returns the value from the first lane
- struct DxilInst_WaveReadLaneFirst {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveReadLaneFirst(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveReadLaneFirst);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns the result the operation across waves
- struct DxilInst_WaveActiveOp {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveActiveOp(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveActiveOp);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- arg_op = 2,
- arg_sop = 3,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_op() const { return Instr->getOperand(2); }
- void set_op(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_op_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_op_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- llvm::Value *get_sop() const { return Instr->getOperand(3); }
- void set_sop(llvm::Value *val) { Instr->setOperand(3, val); }
- int8_t get_sop_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(3))->getZExtValue()); }
- void set_sop_val(int8_t val) { Instr->setOperand(3, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction returns the result of the operation across all lanes
- struct DxilInst_WaveActiveBit {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveActiveBit(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveActiveBit);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- arg_op = 2,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_op() const { return Instr->getOperand(2); }
- void set_op(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_op_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_op_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction returns the result of the operation on prior lanes
- struct DxilInst_WavePrefixOp {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WavePrefixOp(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WavePrefixOp);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- arg_op = 2,
- arg_sop = 3,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_op() const { return Instr->getOperand(2); }
- void set_op(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_op_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_op_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- llvm::Value *get_sop() const { return Instr->getOperand(3); }
- void set_sop(llvm::Value *val) { Instr->setOperand(3, val); }
- int8_t get_sop_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(3))->getZExtValue()); }
- void set_sop_val(int8_t val) { Instr->setOperand(3, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction reads from a lane in the quad
- struct DxilInst_QuadReadLaneAt {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_QuadReadLaneAt(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::QuadReadLaneAt);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- arg_quadLane = 2,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_quadLane() const { return Instr->getOperand(2); }
- void set_quadLane(llvm::Value *val) { Instr->setOperand(2, val); }
- uint32_t get_quadLane_val() const { return (uint32_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_quadLane_val(uint32_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 32), llvm::APInt(32, (uint64_t)val))); }
- };
- /// This instruction returns the result of a quad-level operation
- struct DxilInst_QuadOp {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_QuadOp(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::QuadOp);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- arg_op = 2,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_op() const { return Instr->getOperand(2); }
- void set_op(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_op_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_op_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction bitcast between different sizes
- struct DxilInst_BitcastI16toF16 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_BitcastI16toF16(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::BitcastI16toF16);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction bitcast between different sizes
- struct DxilInst_BitcastF16toI16 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_BitcastF16toI16(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::BitcastF16toI16);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction bitcast between different sizes
- struct DxilInst_BitcastI32toF32 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_BitcastI32toF32(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::BitcastI32toF32);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction bitcast between different sizes
- struct DxilInst_BitcastF32toI32 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_BitcastF32toI32(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::BitcastF32toI32);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction bitcast between different sizes
- struct DxilInst_BitcastI64toF64 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_BitcastI64toF64(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::BitcastI64toF64);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction bitcast between different sizes
- struct DxilInst_BitcastF64toI64 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_BitcastF64toI64(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::BitcastF64toI64);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction legacy fuction to convert float (f32) to half (f16) (this is not related to min-precision)
- struct DxilInst_LegacyF32ToF16 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_LegacyF32ToF16(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::LegacyF32ToF16);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction legacy fuction to convert half (f16) to float (f32) (this is not related to min-precision)
- struct DxilInst_LegacyF16ToF32 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_LegacyF16ToF32(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::LegacyF16ToF32);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction legacy fuction to convert double to float
- struct DxilInst_LegacyDoubleToFloat {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_LegacyDoubleToFloat(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::LegacyDoubleToFloat);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction legacy fuction to convert double to int32
- struct DxilInst_LegacyDoubleToSInt32 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_LegacyDoubleToSInt32(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::LegacyDoubleToSInt32);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction legacy fuction to convert double to uint32
- struct DxilInst_LegacyDoubleToUInt32 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_LegacyDoubleToUInt32(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::LegacyDoubleToUInt32);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns the count of bits set to 1 across the wave
- struct DxilInst_WaveAllBitCount {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveAllBitCount(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveAllBitCount);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns the count of bits set to 1 on prior lanes
- struct DxilInst_WavePrefixBitCount {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WavePrefixBitCount(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WavePrefixBitCount);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns the values of the attributes at the vertex.
- struct DxilInst_AttributeAtVertex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_AttributeAtVertex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::AttributeAtVertex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_inputSigId = 1,
- arg_inputRowIndex = 2,
- arg_inputColIndex = 3,
- arg_VertexID = 4,
- };
- // Accessors
- llvm::Value *get_inputSigId() const { return Instr->getOperand(1); }
- void set_inputSigId(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_inputRowIndex() const { return Instr->getOperand(2); }
- void set_inputRowIndex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_inputColIndex() const { return Instr->getOperand(3); }
- void set_inputColIndex(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_VertexID() const { return Instr->getOperand(4); }
- void set_VertexID(llvm::Value *val) { Instr->setOperand(4, val); }
- };
- /// This instruction returns the view index
- struct DxilInst_ViewID {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_ViewID(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::ViewID);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction reads from a raw buffer and structured buffer
- struct DxilInst_RawBufferLoad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RawBufferLoad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RawBufferLoad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (6 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_srv = 1,
- arg_index = 2,
- arg_elementOffset = 3,
- arg_mask = 4,
- arg_alignment = 5,
- };
- // Accessors
- llvm::Value *get_srv() const { return Instr->getOperand(1); }
- void set_srv(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_index() const { return Instr->getOperand(2); }
- void set_index(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_elementOffset() const { return Instr->getOperand(3); }
- void set_elementOffset(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_mask() const { return Instr->getOperand(4); }
- void set_mask(llvm::Value *val) { Instr->setOperand(4, val); }
- int8_t get_mask_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(4))->getZExtValue()); }
- void set_mask_val(int8_t val) { Instr->setOperand(4, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- llvm::Value *get_alignment() const { return Instr->getOperand(5); }
- void set_alignment(llvm::Value *val) { Instr->setOperand(5, val); }
- int32_t get_alignment_val() const { return (int32_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(5))->getZExtValue()); }
- void set_alignment_val(int32_t val) { Instr->setOperand(5, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 32), llvm::APInt(32, (uint64_t)val))); }
- };
- /// This instruction writes to a RWByteAddressBuffer or RWStructuredBuffer
- struct DxilInst_RawBufferStore {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RawBufferStore(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RawBufferStore);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (10 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_uav = 1,
- arg_index = 2,
- arg_elementOffset = 3,
- arg_value0 = 4,
- arg_value1 = 5,
- arg_value2 = 6,
- arg_value3 = 7,
- arg_mask = 8,
- arg_alignment = 9,
- };
- // Accessors
- llvm::Value *get_uav() const { return Instr->getOperand(1); }
- void set_uav(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_index() const { return Instr->getOperand(2); }
- void set_index(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_elementOffset() const { return Instr->getOperand(3); }
- void set_elementOffset(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_value0() const { return Instr->getOperand(4); }
- void set_value0(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_value1() const { return Instr->getOperand(5); }
- void set_value1(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_value2() const { return Instr->getOperand(6); }
- void set_value2(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_value3() const { return Instr->getOperand(7); }
- void set_value3(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_mask() const { return Instr->getOperand(8); }
- void set_mask(llvm::Value *val) { Instr->setOperand(8, val); }
- int8_t get_mask_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(8))->getZExtValue()); }
- void set_mask_val(int8_t val) { Instr->setOperand(8, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- llvm::Value *get_alignment() const { return Instr->getOperand(9); }
- void set_alignment(llvm::Value *val) { Instr->setOperand(9, val); }
- int32_t get_alignment_val() const { return (int32_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(9))->getZExtValue()); }
- void set_alignment_val(int32_t val) { Instr->setOperand(9, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 32), llvm::APInt(32, (uint64_t)val))); }
- };
- /// This instruction The user-provided InstanceID on the bottom-level acceleration structure instance within the top-level structure
- struct DxilInst_InstanceID {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_InstanceID(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::InstanceID);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction The autogenerated index of the current instance in the top-level structure
- struct DxilInst_InstanceIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_InstanceIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::InstanceIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction Returns the value passed as HitKind in ReportIntersection(). If intersection was reported by fixed-function triangle intersection, HitKind will be one of HIT_KIND_TRIANGLE_FRONT_FACE or HIT_KIND_TRIANGLE_BACK_FACE.
- struct DxilInst_HitKind {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_HitKind(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::HitKind);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction uint containing the current ray flags.
- struct DxilInst_RayFlags {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayFlags(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayFlags);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction The current x and y location within the Width and Height
- struct DxilInst_DispatchRaysIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_DispatchRaysIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::DispatchRaysIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_col = 1,
- };
- // Accessors
- llvm::Value *get_col() const { return Instr->getOperand(1); }
- void set_col(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction The Width and Height values from the D3D12_DISPATCH_RAYS_DESC structure provided to the originating DispatchRays() call.
- struct DxilInst_DispatchRaysDimensions {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_DispatchRaysDimensions(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::DispatchRaysDimensions);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_col = 1,
- };
- // Accessors
- llvm::Value *get_col() const { return Instr->getOperand(1); }
- void set_col(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction The world-space origin for the current ray.
- struct DxilInst_WorldRayOrigin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WorldRayOrigin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WorldRayOrigin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_col = 1,
- };
- // Accessors
- llvm::Value *get_col() const { return Instr->getOperand(1); }
- void set_col(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction The world-space direction for the current ray.
- struct DxilInst_WorldRayDirection {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WorldRayDirection(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WorldRayDirection);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_col = 1,
- };
- // Accessors
- llvm::Value *get_col() const { return Instr->getOperand(1); }
- void set_col(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Object-space origin for the current ray.
- struct DxilInst_ObjectRayOrigin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_ObjectRayOrigin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::ObjectRayOrigin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_col = 1,
- };
- // Accessors
- llvm::Value *get_col() const { return Instr->getOperand(1); }
- void set_col(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Object-space direction for the current ray.
- struct DxilInst_ObjectRayDirection {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_ObjectRayDirection(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::ObjectRayDirection);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_col = 1,
- };
- // Accessors
- llvm::Value *get_col() const { return Instr->getOperand(1); }
- void set_col(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction Matrix for transforming from object-space to world-space.
- struct DxilInst_ObjectToWorld {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_ObjectToWorld(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::ObjectToWorld);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_row = 1,
- arg_col = 2,
- };
- // Accessors
- llvm::Value *get_row() const { return Instr->getOperand(1); }
- void set_row(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_col() const { return Instr->getOperand(2); }
- void set_col(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction Matrix for transforming from world-space to object-space.
- struct DxilInst_WorldToObject {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WorldToObject(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WorldToObject);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_row = 1,
- arg_col = 2,
- };
- // Accessors
- llvm::Value *get_row() const { return Instr->getOperand(1); }
- void set_row(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_col() const { return Instr->getOperand(2); }
- void set_col(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction float representing the parametric starting point for the ray.
- struct DxilInst_RayTMin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayTMin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayTMin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction float representing the current parametric ending point for the ray
- struct DxilInst_RayTCurrent {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayTCurrent(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayTCurrent);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction Used in an any hit shader to reject an intersection and terminate the shader
- struct DxilInst_IgnoreHit {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_IgnoreHit(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::IgnoreHit);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction Used in an any hit shader to abort the ray query and the intersection shader (if any). The current hit is committed and execution passes to the closest hit shader with the closest hit recorded so far
- struct DxilInst_AcceptHitAndEndSearch {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_AcceptHitAndEndSearch(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::AcceptHitAndEndSearch);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction initiates raytrace
- struct DxilInst_TraceRay {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_TraceRay(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::TraceRay);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (16 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_AccelerationStructure = 1,
- arg_RayFlags = 2,
- arg_InstanceInclusionMask = 3,
- arg_RayContributionToHitGroupIndex = 4,
- arg_MultiplierForGeometryContributionToShaderIndex = 5,
- arg_MissShaderIndex = 6,
- arg_Origin_X = 7,
- arg_Origin_Y = 8,
- arg_Origin_Z = 9,
- arg_TMin = 10,
- arg_Direction_X = 11,
- arg_Direction_Y = 12,
- arg_Direction_Z = 13,
- arg_TMax = 14,
- arg_payload = 15,
- };
- // Accessors
- llvm::Value *get_AccelerationStructure() const { return Instr->getOperand(1); }
- void set_AccelerationStructure(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_RayFlags() const { return Instr->getOperand(2); }
- void set_RayFlags(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_InstanceInclusionMask() const { return Instr->getOperand(3); }
- void set_InstanceInclusionMask(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_RayContributionToHitGroupIndex() const { return Instr->getOperand(4); }
- void set_RayContributionToHitGroupIndex(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_MultiplierForGeometryContributionToShaderIndex() const { return Instr->getOperand(5); }
- void set_MultiplierForGeometryContributionToShaderIndex(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_MissShaderIndex() const { return Instr->getOperand(6); }
- void set_MissShaderIndex(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_Origin_X() const { return Instr->getOperand(7); }
- void set_Origin_X(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_Origin_Y() const { return Instr->getOperand(8); }
- void set_Origin_Y(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_Origin_Z() const { return Instr->getOperand(9); }
- void set_Origin_Z(llvm::Value *val) { Instr->setOperand(9, val); }
- llvm::Value *get_TMin() const { return Instr->getOperand(10); }
- void set_TMin(llvm::Value *val) { Instr->setOperand(10, val); }
- llvm::Value *get_Direction_X() const { return Instr->getOperand(11); }
- void set_Direction_X(llvm::Value *val) { Instr->setOperand(11, val); }
- llvm::Value *get_Direction_Y() const { return Instr->getOperand(12); }
- void set_Direction_Y(llvm::Value *val) { Instr->setOperand(12, val); }
- llvm::Value *get_Direction_Z() const { return Instr->getOperand(13); }
- void set_Direction_Z(llvm::Value *val) { Instr->setOperand(13, val); }
- llvm::Value *get_TMax() const { return Instr->getOperand(14); }
- void set_TMax(llvm::Value *val) { Instr->setOperand(14, val); }
- llvm::Value *get_payload() const { return Instr->getOperand(15); }
- void set_payload(llvm::Value *val) { Instr->setOperand(15, val); }
- };
- /// This instruction returns true if hit was accepted
- struct DxilInst_ReportHit {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_ReportHit(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::ReportHit);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_THit = 1,
- arg_HitKind = 2,
- arg_Attributes = 3,
- };
- // Accessors
- llvm::Value *get_THit() const { return Instr->getOperand(1); }
- void set_THit(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_HitKind() const { return Instr->getOperand(2); }
- void set_HitKind(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_Attributes() const { return Instr->getOperand(3); }
- void set_Attributes(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction Call a shader in the callable shader table supplied through the DispatchRays() API
- struct DxilInst_CallShader {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_CallShader(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::CallShader);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_ShaderIndex = 1,
- arg_Parameter = 2,
- };
- // Accessors
- llvm::Value *get_ShaderIndex() const { return Instr->getOperand(1); }
- void set_ShaderIndex(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_Parameter() const { return Instr->getOperand(2); }
- void set_Parameter(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction create resource handle from resource struct for library
- struct DxilInst_CreateHandleForLib {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_CreateHandleForLib(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::CreateHandleForLib);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_Resource = 1,
- };
- // Accessors
- llvm::Value *get_Resource() const { return Instr->getOperand(1); }
- void set_Resource(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction PrimitiveIndex for raytracing shaders
- struct DxilInst_PrimitiveIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_PrimitiveIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::PrimitiveIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction 2D half dot product with accumulate to float
- struct DxilInst_Dot2AddHalf {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Dot2AddHalf(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Dot2AddHalf);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (6 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_acc = 1,
- arg_ax = 2,
- arg_ay = 3,
- arg_bx = 4,
- arg_by = 5,
- };
- // Accessors
- llvm::Value *get_acc() const { return Instr->getOperand(1); }
- void set_acc(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_ax() const { return Instr->getOperand(2); }
- void set_ax(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_ay() const { return Instr->getOperand(3); }
- void set_ay(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_bx() const { return Instr->getOperand(4); }
- void set_bx(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_by() const { return Instr->getOperand(5); }
- void set_by(llvm::Value *val) { Instr->setOperand(5, val); }
- };
- /// This instruction signed dot product of 4 x i8 vectors packed into i32, with accumulate to i32
- struct DxilInst_Dot4AddI8Packed {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Dot4AddI8Packed(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Dot4AddI8Packed);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_acc = 1,
- arg_a = 2,
- arg_b = 3,
- };
- // Accessors
- llvm::Value *get_acc() const { return Instr->getOperand(1); }
- void set_acc(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_a() const { return Instr->getOperand(2); }
- void set_a(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_b() const { return Instr->getOperand(3); }
- void set_b(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction unsigned dot product of 4 x u8 vectors packed into i32, with accumulate to i32
- struct DxilInst_Dot4AddU8Packed {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Dot4AddU8Packed(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Dot4AddU8Packed);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_acc = 1,
- arg_a = 2,
- arg_b = 3,
- };
- // Accessors
- llvm::Value *get_acc() const { return Instr->getOperand(1); }
- void set_acc(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_a() const { return Instr->getOperand(2); }
- void set_a(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_b() const { return Instr->getOperand(3); }
- void set_b(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction returns the bitmask of active lanes that have the same value
- struct DxilInst_WaveMatch {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveMatch(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveMatch);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns the result of the operation on groups of lanes identified by a bitmask
- struct DxilInst_WaveMultiPrefixOp {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveMultiPrefixOp(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveMultiPrefixOp);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (8 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- arg_mask0 = 2,
- arg_mask1 = 3,
- arg_mask2 = 4,
- arg_mask3 = 5,
- arg_op = 6,
- arg_sop = 7,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_mask0() const { return Instr->getOperand(2); }
- void set_mask0(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_mask1() const { return Instr->getOperand(3); }
- void set_mask1(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_mask2() const { return Instr->getOperand(4); }
- void set_mask2(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_mask3() const { return Instr->getOperand(5); }
- void set_mask3(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_op() const { return Instr->getOperand(6); }
- void set_op(llvm::Value *val) { Instr->setOperand(6, val); }
- int8_t get_op_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(6))->getZExtValue()); }
- void set_op_val(int8_t val) { Instr->setOperand(6, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- llvm::Value *get_sop() const { return Instr->getOperand(7); }
- void set_sop(llvm::Value *val) { Instr->setOperand(7, val); }
- int8_t get_sop_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(7))->getZExtValue()); }
- void set_sop_val(int8_t val) { Instr->setOperand(7, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction returns the count of bits set to 1 on groups of lanes identified by a bitmask
- struct DxilInst_WaveMultiPrefixBitCount {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WaveMultiPrefixBitCount(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WaveMultiPrefixBitCount);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (6 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_value = 1,
- arg_mask0 = 2,
- arg_mask1 = 3,
- arg_mask2 = 4,
- arg_mask3 = 5,
- };
- // Accessors
- llvm::Value *get_value() const { return Instr->getOperand(1); }
- void set_value(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_mask0() const { return Instr->getOperand(2); }
- void set_mask0(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_mask1() const { return Instr->getOperand(3); }
- void set_mask1(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_mask2() const { return Instr->getOperand(4); }
- void set_mask2(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_mask3() const { return Instr->getOperand(5); }
- void set_mask3(llvm::Value *val) { Instr->setOperand(5, val); }
- };
- /// This instruction Mesh shader intrinsic SetMeshOutputCounts
- struct DxilInst_SetMeshOutputCounts {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_SetMeshOutputCounts(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::SetMeshOutputCounts);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_numVertices = 1,
- arg_numPrimitives = 2,
- };
- // Accessors
- llvm::Value *get_numVertices() const { return Instr->getOperand(1); }
- void set_numVertices(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_numPrimitives() const { return Instr->getOperand(2); }
- void set_numPrimitives(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction emit a primitive's vertex indices in a mesh shader
- struct DxilInst_EmitIndices {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_EmitIndices(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::EmitIndices);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_PrimitiveIndex = 1,
- arg_VertexIndex0 = 2,
- arg_VertexIndex1 = 3,
- arg_VertexIndex2 = 4,
- };
- // Accessors
- llvm::Value *get_PrimitiveIndex() const { return Instr->getOperand(1); }
- void set_PrimitiveIndex(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_VertexIndex0() const { return Instr->getOperand(2); }
- void set_VertexIndex0(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_VertexIndex1() const { return Instr->getOperand(3); }
- void set_VertexIndex1(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_VertexIndex2() const { return Instr->getOperand(4); }
- void set_VertexIndex2(llvm::Value *val) { Instr->setOperand(4, val); }
- };
- /// This instruction get the mesh payload which is from amplification shader
- struct DxilInst_GetMeshPayload {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_GetMeshPayload(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::GetMeshPayload);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction stores the value to mesh shader vertex output
- struct DxilInst_StoreVertexOutput {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_StoreVertexOutput(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::StoreVertexOutput);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (6 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_outputSigId = 1,
- arg_rowIndex = 2,
- arg_colIndex = 3,
- arg_value = 4,
- arg_vertexIndex = 5,
- };
- // Accessors
- llvm::Value *get_outputSigId() const { return Instr->getOperand(1); }
- void set_outputSigId(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_rowIndex() const { return Instr->getOperand(2); }
- void set_rowIndex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_colIndex() const { return Instr->getOperand(3); }
- void set_colIndex(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_value() const { return Instr->getOperand(4); }
- void set_value(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_vertexIndex() const { return Instr->getOperand(5); }
- void set_vertexIndex(llvm::Value *val) { Instr->setOperand(5, val); }
- };
- /// This instruction stores the value to mesh shader primitive output
- struct DxilInst_StorePrimitiveOutput {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_StorePrimitiveOutput(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::StorePrimitiveOutput);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (6 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_outputSigId = 1,
- arg_rowIndex = 2,
- arg_colIndex = 3,
- arg_value = 4,
- arg_primitiveIndex = 5,
- };
- // Accessors
- llvm::Value *get_outputSigId() const { return Instr->getOperand(1); }
- void set_outputSigId(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_rowIndex() const { return Instr->getOperand(2); }
- void set_rowIndex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_colIndex() const { return Instr->getOperand(3); }
- void set_colIndex(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_value() const { return Instr->getOperand(4); }
- void set_value(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_primitiveIndex() const { return Instr->getOperand(5); }
- void set_primitiveIndex(llvm::Value *val) { Instr->setOperand(5, val); }
- };
- /// This instruction Amplification shader intrinsic DispatchMesh
- struct DxilInst_DispatchMesh {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_DispatchMesh(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::DispatchMesh);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (5 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_threadGroupCountX = 1,
- arg_threadGroupCountY = 2,
- arg_threadGroupCountZ = 3,
- arg_payload = 4,
- };
- // Accessors
- llvm::Value *get_threadGroupCountX() const { return Instr->getOperand(1); }
- void set_threadGroupCountX(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_threadGroupCountY() const { return Instr->getOperand(2); }
- void set_threadGroupCountY(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_threadGroupCountZ() const { return Instr->getOperand(3); }
- void set_threadGroupCountZ(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_payload() const { return Instr->getOperand(4); }
- void set_payload(llvm::Value *val) { Instr->setOperand(4, val); }
- };
- /// This instruction updates a feedback texture for a sampling operation
- struct DxilInst_WriteSamplerFeedback {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WriteSamplerFeedback(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WriteSamplerFeedback);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (9 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_feedbackTex = 1,
- arg_sampledTex = 2,
- arg_sampler = 3,
- arg_c0 = 4,
- arg_c1 = 5,
- arg_c2 = 6,
- arg_c3 = 7,
- arg_clamp = 8,
- };
- // Accessors
- llvm::Value *get_feedbackTex() const { return Instr->getOperand(1); }
- void set_feedbackTex(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampledTex() const { return Instr->getOperand(2); }
- void set_sampledTex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(3); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_c0() const { return Instr->getOperand(4); }
- void set_c0(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_c1() const { return Instr->getOperand(5); }
- void set_c1(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_c2() const { return Instr->getOperand(6); }
- void set_c2(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_c3() const { return Instr->getOperand(7); }
- void set_c3(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_clamp() const { return Instr->getOperand(8); }
- void set_clamp(llvm::Value *val) { Instr->setOperand(8, val); }
- };
- /// This instruction updates a feedback texture for a sampling operation with a bias on the mipmap level
- struct DxilInst_WriteSamplerFeedbackBias {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WriteSamplerFeedbackBias(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WriteSamplerFeedbackBias);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (10 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_feedbackTex = 1,
- arg_sampledTex = 2,
- arg_sampler = 3,
- arg_c0 = 4,
- arg_c1 = 5,
- arg_c2 = 6,
- arg_c3 = 7,
- arg_bias = 8,
- arg_clamp = 9,
- };
- // Accessors
- llvm::Value *get_feedbackTex() const { return Instr->getOperand(1); }
- void set_feedbackTex(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampledTex() const { return Instr->getOperand(2); }
- void set_sampledTex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(3); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_c0() const { return Instr->getOperand(4); }
- void set_c0(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_c1() const { return Instr->getOperand(5); }
- void set_c1(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_c2() const { return Instr->getOperand(6); }
- void set_c2(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_c3() const { return Instr->getOperand(7); }
- void set_c3(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_bias() const { return Instr->getOperand(8); }
- void set_bias(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_clamp() const { return Instr->getOperand(9); }
- void set_clamp(llvm::Value *val) { Instr->setOperand(9, val); }
- };
- /// This instruction updates a feedback texture for a sampling operation with a mipmap-level offset
- struct DxilInst_WriteSamplerFeedbackLevel {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WriteSamplerFeedbackLevel(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WriteSamplerFeedbackLevel);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (9 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_feedbackTex = 1,
- arg_sampledTex = 2,
- arg_sampler = 3,
- arg_c0 = 4,
- arg_c1 = 5,
- arg_c2 = 6,
- arg_c3 = 7,
- arg_lod = 8,
- };
- // Accessors
- llvm::Value *get_feedbackTex() const { return Instr->getOperand(1); }
- void set_feedbackTex(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampledTex() const { return Instr->getOperand(2); }
- void set_sampledTex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(3); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_c0() const { return Instr->getOperand(4); }
- void set_c0(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_c1() const { return Instr->getOperand(5); }
- void set_c1(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_c2() const { return Instr->getOperand(6); }
- void set_c2(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_c3() const { return Instr->getOperand(7); }
- void set_c3(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_lod() const { return Instr->getOperand(8); }
- void set_lod(llvm::Value *val) { Instr->setOperand(8, val); }
- };
- /// This instruction updates a feedback texture for a sampling operation with explicit gradients
- struct DxilInst_WriteSamplerFeedbackGrad {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_WriteSamplerFeedbackGrad(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::WriteSamplerFeedbackGrad);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (15 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_feedbackTex = 1,
- arg_sampledTex = 2,
- arg_sampler = 3,
- arg_c0 = 4,
- arg_c1 = 5,
- arg_c2 = 6,
- arg_c3 = 7,
- arg_ddx0 = 8,
- arg_ddx1 = 9,
- arg_ddx2 = 10,
- arg_ddy0 = 11,
- arg_ddy1 = 12,
- arg_ddy2 = 13,
- arg_clamp = 14,
- };
- // Accessors
- llvm::Value *get_feedbackTex() const { return Instr->getOperand(1); }
- void set_feedbackTex(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_sampledTex() const { return Instr->getOperand(2); }
- void set_sampledTex(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_sampler() const { return Instr->getOperand(3); }
- void set_sampler(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_c0() const { return Instr->getOperand(4); }
- void set_c0(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_c1() const { return Instr->getOperand(5); }
- void set_c1(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_c2() const { return Instr->getOperand(6); }
- void set_c2(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_c3() const { return Instr->getOperand(7); }
- void set_c3(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_ddx0() const { return Instr->getOperand(8); }
- void set_ddx0(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_ddx1() const { return Instr->getOperand(9); }
- void set_ddx1(llvm::Value *val) { Instr->setOperand(9, val); }
- llvm::Value *get_ddx2() const { return Instr->getOperand(10); }
- void set_ddx2(llvm::Value *val) { Instr->setOperand(10, val); }
- llvm::Value *get_ddy0() const { return Instr->getOperand(11); }
- void set_ddy0(llvm::Value *val) { Instr->setOperand(11, val); }
- llvm::Value *get_ddy1() const { return Instr->getOperand(12); }
- void set_ddy1(llvm::Value *val) { Instr->setOperand(12, val); }
- llvm::Value *get_ddy2() const { return Instr->getOperand(13); }
- void set_ddy2(llvm::Value *val) { Instr->setOperand(13, val); }
- llvm::Value *get_clamp() const { return Instr->getOperand(14); }
- void set_clamp(llvm::Value *val) { Instr->setOperand(14, val); }
- };
- /// This instruction allocates space for RayQuery and return handle
- struct DxilInst_AllocateRayQuery {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_AllocateRayQuery(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::AllocateRayQuery);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_constRayFlags = 1,
- };
- // Accessors
- llvm::Value *get_constRayFlags() const { return Instr->getOperand(1); }
- void set_constRayFlags(llvm::Value *val) { Instr->setOperand(1, val); }
- uint32_t get_constRayFlags_val() const { return (uint32_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(1))->getZExtValue()); }
- void set_constRayFlags_val(uint32_t val) { Instr->setOperand(1, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 32), llvm::APInt(32, (uint64_t)val))); }
- };
- /// This instruction initializes RayQuery for raytrace
- struct DxilInst_RayQuery_TraceRayInline {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_TraceRayInline(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_TraceRayInline);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (13 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_accelerationStructure = 2,
- arg_rayFlags = 3,
- arg_instanceInclusionMask = 4,
- arg_origin_X = 5,
- arg_origin_Y = 6,
- arg_origin_Z = 7,
- arg_tMin = 8,
- arg_direction_X = 9,
- arg_direction_Y = 10,
- arg_direction_Z = 11,
- arg_tMax = 12,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_accelerationStructure() const { return Instr->getOperand(2); }
- void set_accelerationStructure(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_rayFlags() const { return Instr->getOperand(3); }
- void set_rayFlags(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_instanceInclusionMask() const { return Instr->getOperand(4); }
- void set_instanceInclusionMask(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_origin_X() const { return Instr->getOperand(5); }
- void set_origin_X(llvm::Value *val) { Instr->setOperand(5, val); }
- llvm::Value *get_origin_Y() const { return Instr->getOperand(6); }
- void set_origin_Y(llvm::Value *val) { Instr->setOperand(6, val); }
- llvm::Value *get_origin_Z() const { return Instr->getOperand(7); }
- void set_origin_Z(llvm::Value *val) { Instr->setOperand(7, val); }
- llvm::Value *get_tMin() const { return Instr->getOperand(8); }
- void set_tMin(llvm::Value *val) { Instr->setOperand(8, val); }
- llvm::Value *get_direction_X() const { return Instr->getOperand(9); }
- void set_direction_X(llvm::Value *val) { Instr->setOperand(9, val); }
- llvm::Value *get_direction_Y() const { return Instr->getOperand(10); }
- void set_direction_Y(llvm::Value *val) { Instr->setOperand(10, val); }
- llvm::Value *get_direction_Z() const { return Instr->getOperand(11); }
- void set_direction_Z(llvm::Value *val) { Instr->setOperand(11, val); }
- llvm::Value *get_tMax() const { return Instr->getOperand(12); }
- void set_tMax(llvm::Value *val) { Instr->setOperand(12, val); }
- };
- /// This instruction advances a ray query
- struct DxilInst_RayQuery_Proceed {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_Proceed(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_Proceed);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction aborts a ray query
- struct DxilInst_RayQuery_Abort {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_Abort(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_Abort);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction commits a non opaque triangle hit
- struct DxilInst_RayQuery_CommitNonOpaqueTriangleHit {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommitNonOpaqueTriangleHit(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommitNonOpaqueTriangleHit);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction commits a procedural primitive hit
- struct DxilInst_RayQuery_CommitProceduralPrimitiveHit {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommitProceduralPrimitiveHit(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommitProceduralPrimitiveHit);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_t = 2,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_t() const { return Instr->getOperand(2); }
- void set_t(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction returns uint status (COMMITTED_STATUS) of the committed hit in a ray query
- struct DxilInst_RayQuery_CommittedStatus {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedStatus(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedStatus);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns uint candidate type (CANDIDATE_TYPE) of the current hit candidate in a ray query, after Proceed() has returned true
- struct DxilInst_RayQuery_CandidateType {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateType(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateType);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns matrix for transforming from object-space to world-space for a candidate hit.
- struct DxilInst_RayQuery_CandidateObjectToWorld3x4 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateObjectToWorld3x4(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateObjectToWorld3x4);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_row = 2,
- arg_col = 3,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_row() const { return Instr->getOperand(2); }
- void set_row(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_col() const { return Instr->getOperand(3); }
- void set_col(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction returns matrix for transforming from world-space to object-space for a candidate hit.
- struct DxilInst_RayQuery_CandidateWorldToObject3x4 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateWorldToObject3x4(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateWorldToObject3x4);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_row = 2,
- arg_col = 3,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_row() const { return Instr->getOperand(2); }
- void set_row(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_col() const { return Instr->getOperand(3); }
- void set_col(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction returns matrix for transforming from object-space to world-space for a Committed hit.
- struct DxilInst_RayQuery_CommittedObjectToWorld3x4 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedObjectToWorld3x4(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedObjectToWorld3x4);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_row = 2,
- arg_col = 3,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_row() const { return Instr->getOperand(2); }
- void set_row(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_col() const { return Instr->getOperand(3); }
- void set_col(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction returns matrix for transforming from world-space to object-space for a Committed hit.
- struct DxilInst_RayQuery_CommittedWorldToObject3x4 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedWorldToObject3x4(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedWorldToObject3x4);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_row = 2,
- arg_col = 3,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_row() const { return Instr->getOperand(2); }
- void set_row(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_col() const { return Instr->getOperand(3); }
- void set_col(llvm::Value *val) { Instr->setOperand(3, val); }
- };
- /// This instruction returns if current candidate procedural primitive is non opaque
- struct DxilInst_RayQuery_CandidateProceduralPrimitiveNonOpaque {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateProceduralPrimitiveNonOpaque(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateProceduralPrimitiveNonOpaque);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns if current candidate triangle is front facing
- struct DxilInst_RayQuery_CandidateTriangleFrontFace {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateTriangleFrontFace(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateTriangleFrontFace);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns if current committed triangle is front facing
- struct DxilInst_RayQuery_CommittedTriangleFrontFace {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedTriangleFrontFace(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedTriangleFrontFace);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns candidate triangle hit barycentrics
- struct DxilInst_RayQuery_CandidateTriangleBarycentrics {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateTriangleBarycentrics(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateTriangleBarycentrics);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_component = 2,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_component() const { return Instr->getOperand(2); }
- void set_component(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_component_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_component_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction returns committed triangle hit barycentrics
- struct DxilInst_RayQuery_CommittedTriangleBarycentrics {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedTriangleBarycentrics(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedTriangleBarycentrics);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_component = 2,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_component() const { return Instr->getOperand(2); }
- void set_component(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_component_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_component_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction returns ray flags
- struct DxilInst_RayQuery_RayFlags {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_RayFlags(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_RayFlags);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns world ray origin
- struct DxilInst_RayQuery_WorldRayOrigin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_WorldRayOrigin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_WorldRayOrigin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_component = 2,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_component() const { return Instr->getOperand(2); }
- void set_component(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_component_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_component_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction returns world ray direction
- struct DxilInst_RayQuery_WorldRayDirection {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_WorldRayDirection(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_WorldRayDirection);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_component = 2,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_component() const { return Instr->getOperand(2); }
- void set_component(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_component_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_component_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction returns float representing the parametric starting point for the ray.
- struct DxilInst_RayQuery_RayTMin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_RayTMin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_RayTMin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns float representing the parametric point on the ray for the current candidate triangle hit.
- struct DxilInst_RayQuery_CandidateTriangleRayT {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateTriangleRayT(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateTriangleRayT);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns float representing the parametric point on the ray for the current committed hit.
- struct DxilInst_RayQuery_CommittedRayT {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedRayT(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedRayT);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns candidate hit instance index
- struct DxilInst_RayQuery_CandidateInstanceIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateInstanceIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateInstanceIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns candidate hit instance ID
- struct DxilInst_RayQuery_CandidateInstanceID {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateInstanceID(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateInstanceID);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns candidate hit geometry index
- struct DxilInst_RayQuery_CandidateGeometryIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateGeometryIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateGeometryIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns candidate hit geometry index
- struct DxilInst_RayQuery_CandidatePrimitiveIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidatePrimitiveIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidatePrimitiveIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns candidate hit object ray origin
- struct DxilInst_RayQuery_CandidateObjectRayOrigin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateObjectRayOrigin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateObjectRayOrigin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_component = 2,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_component() const { return Instr->getOperand(2); }
- void set_component(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_component_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_component_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction returns candidate object ray direction
- struct DxilInst_RayQuery_CandidateObjectRayDirection {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateObjectRayDirection(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateObjectRayDirection);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_component = 2,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_component() const { return Instr->getOperand(2); }
- void set_component(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_component_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_component_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction returns committed hit instance index
- struct DxilInst_RayQuery_CommittedInstanceIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedInstanceIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedInstanceIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns committed hit instance ID
- struct DxilInst_RayQuery_CommittedInstanceID {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedInstanceID(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedInstanceID);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns committed hit geometry index
- struct DxilInst_RayQuery_CommittedGeometryIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedGeometryIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedGeometryIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns committed hit geometry index
- struct DxilInst_RayQuery_CommittedPrimitiveIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedPrimitiveIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedPrimitiveIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns committed hit object ray origin
- struct DxilInst_RayQuery_CommittedObjectRayOrigin {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedObjectRayOrigin(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedObjectRayOrigin);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_component = 2,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_component() const { return Instr->getOperand(2); }
- void set_component(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_component_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_component_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction returns committed object ray direction
- struct DxilInst_RayQuery_CommittedObjectRayDirection {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedObjectRayDirection(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedObjectRayDirection);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- arg_component = 2,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_component() const { return Instr->getOperand(2); }
- void set_component(llvm::Value *val) { Instr->setOperand(2, val); }
- int8_t get_component_val() const { return (int8_t)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_component_val(int8_t val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 8), llvm::APInt(8, (uint64_t)val))); }
- };
- /// This instruction The autogenerated index of the current geometry in the bottom-level structure
- struct DxilInst_GeometryIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_GeometryIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::GeometryIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- /// This instruction returns candidate hit InstanceContributionToHitGroupIndex
- struct DxilInst_RayQuery_CandidateInstanceContributionToHitGroupIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CandidateInstanceContributionToHitGroupIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CandidateInstanceContributionToHitGroupIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction returns committed hit InstanceContributionToHitGroupIndex
- struct DxilInst_RayQuery_CommittedInstanceContributionToHitGroupIndex {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_RayQuery_CommittedInstanceContributionToHitGroupIndex(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::RayQuery_CommittedInstanceContributionToHitGroupIndex);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (2 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_rayQueryHandle = 1,
- };
- // Accessors
- llvm::Value *get_rayQueryHandle() const { return Instr->getOperand(1); }
- void set_rayQueryHandle(llvm::Value *val) { Instr->setOperand(1, val); }
- };
- /// This instruction annotate handle with resource properties
- struct DxilInst_AnnotateHandle {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_AnnotateHandle(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::AnnotateHandle);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_res = 1,
- arg_props = 2,
- };
- // Accessors
- llvm::Value *get_res() const { return Instr->getOperand(1); }
- void set_res(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_props() const { return Instr->getOperand(2); }
- void set_props(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction create resource handle from binding
- struct DxilInst_CreateHandleFromBinding {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_CreateHandleFromBinding(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::CreateHandleFromBinding);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_bind = 1,
- arg_index = 2,
- arg_nonUniformIndex = 3,
- };
- // Accessors
- llvm::Value *get_bind() const { return Instr->getOperand(1); }
- void set_bind(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_index() const { return Instr->getOperand(2); }
- void set_index(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_nonUniformIndex() const { return Instr->getOperand(3); }
- void set_nonUniformIndex(llvm::Value *val) { Instr->setOperand(3, val); }
- bool get_nonUniformIndex_val() const { return (bool)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(3))->getZExtValue()); }
- void set_nonUniformIndex_val(bool val) { Instr->setOperand(3, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 1), llvm::APInt(1, (uint64_t)val))); }
- };
- /// This instruction create resource handle from heap
- struct DxilInst_CreateHandleFromHeap {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_CreateHandleFromHeap(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::CreateHandleFromHeap);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (4 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_index = 1,
- arg_samplerHeap = 2,
- arg_nonUniformIndex = 3,
- };
- // Accessors
- llvm::Value *get_index() const { return Instr->getOperand(1); }
- void set_index(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_samplerHeap() const { return Instr->getOperand(2); }
- void set_samplerHeap(llvm::Value *val) { Instr->setOperand(2, val); }
- bool get_samplerHeap_val() const { return (bool)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(2))->getZExtValue()); }
- void set_samplerHeap_val(bool val) { Instr->setOperand(2, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 1), llvm::APInt(1, (uint64_t)val))); }
- llvm::Value *get_nonUniformIndex() const { return Instr->getOperand(3); }
- void set_nonUniformIndex(llvm::Value *val) { Instr->setOperand(3, val); }
- bool get_nonUniformIndex_val() const { return (bool)(llvm::dyn_cast<llvm::ConstantInt>(Instr->getOperand(3))->getZExtValue()); }
- void set_nonUniformIndex_val(bool val) { Instr->setOperand(3, llvm::Constant::getIntegerValue(llvm::IntegerType::get(Instr->getContext(), 1), llvm::APInt(1, (uint64_t)val))); }
- };
- /// This instruction unpacks 4 8-bit signed or unsigned values into int32 or int16 vector
- struct DxilInst_Unpack4x8 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Unpack4x8(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Unpack4x8);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (3 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_unpackMode = 1,
- arg_pk = 2,
- };
- // Accessors
- llvm::Value *get_unpackMode() const { return Instr->getOperand(1); }
- void set_unpackMode(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_pk() const { return Instr->getOperand(2); }
- void set_pk(llvm::Value *val) { Instr->setOperand(2, val); }
- };
- /// This instruction packs vector of 4 signed or unsigned values into a packed datatype, drops or clamps unused bits
- struct DxilInst_Pack4x8 {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_Pack4x8(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::Pack4x8);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (6 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- // Operand indexes
- enum OperandIdx {
- arg_packMode = 1,
- arg_x = 2,
- arg_y = 3,
- arg_z = 4,
- arg_w = 5,
- };
- // Accessors
- llvm::Value *get_packMode() const { return Instr->getOperand(1); }
- void set_packMode(llvm::Value *val) { Instr->setOperand(1, val); }
- llvm::Value *get_x() const { return Instr->getOperand(2); }
- void set_x(llvm::Value *val) { Instr->setOperand(2, val); }
- llvm::Value *get_y() const { return Instr->getOperand(3); }
- void set_y(llvm::Value *val) { Instr->setOperand(3, val); }
- llvm::Value *get_z() const { return Instr->getOperand(4); }
- void set_z(llvm::Value *val) { Instr->setOperand(4, val); }
- llvm::Value *get_w() const { return Instr->getOperand(5); }
- void set_w(llvm::Value *val) { Instr->setOperand(5, val); }
- };
- /// This instruction returns true on helper lanes in pixel shaders
- struct DxilInst_IsHelperLane {
- llvm::Instruction *Instr;
- // Construction and identification
- DxilInst_IsHelperLane(llvm::Instruction *pInstr) : Instr(pInstr) {}
- operator bool() const {
- return hlsl::OP::IsDxilOpFuncCallInst(Instr, hlsl::OP::OpCode::IsHelperLane);
- }
- // Validation support
- bool isAllowed() const { return true; }
- bool isArgumentListValid() const {
- if (1 != llvm::dyn_cast<llvm::CallInst>(Instr)->getNumArgOperands()) return false;
- return true;
- }
- // Metadata
- bool requiresUniformInputs() const { return false; }
- };
- // INSTR-HELPER:END
- } // namespace hlsl
|