123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599 |
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- """
- Copyright (c) Contributors to the Open 3D Engine Project.
- For complete copyright and license terms please see the LICENSE at the root of this distribution.
- SPDX-License-Identifier: Apache-2.0 OR MIT
- """
- import sys
- import os
- sys.path.append("..")
- sys.path.append("../..")
- from clr import *
- import testfuncs
- def verifyPackingRelaxed(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--srg"])
- if ok:
- predicates = []
- # check all references of func()
- # Matches Storage Buffer 1 (VK) standard here:
- # https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/SPIR-V.rst
- predicates.append(lambda: j["ShaderResourceGroups"][0]["bufferForSRGConstants"]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["bufferForSRGConstants"]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["bufferForSRGConstants"]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["bufferForSRGConstants"]["id"] == "ExampleSRG")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["bufferForSRGConstants"]["usage"] == "Read")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteOffset"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteSize"] == 16) # Complex type. Size & offset match previous entries' sum
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["typeName"] == "/ExampleSRG/S")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteOffset"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteSize"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteOffset"] == 64)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteSize"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteOffset"] == 96)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteOffset"] == 96)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteOffset"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteSize"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["typeName"] == "/ExampleSRG/S")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteOffset"] == 160)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteOffset"] == 176)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteOffset"] == 192)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteOffset"] == 208)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteOffset"] == 224)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteOffset"] == 240)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteOffset"] == 256)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23]["constantByteOffset"] == 272)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteOffset"] == 288)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][25]["constantByteOffset"] == 160)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][25]["constantByteSize"] == 36)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][26]["constantByteOffset"] == 208)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][26]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][27]["constantByteOffset"] == 224)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][27]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][28]["constantByteOffset"] == 240)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][28]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][29]["constantByteOffset"] == 256)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][29]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][30]["constantByteOffset"] == 208)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][30]["constantByteSize"] == 64)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["constantByteSize"] == 272)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["typeName"] == "/ExampleSRG/T")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["type"] == "ConstantBuffer<T>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["stride"] == 268)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["type"] == "ConstantBuffer<T>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["index"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["stride"] == 268)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["index"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["stride"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["type"] == "Buffer<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["stride"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["type"] == "Buffer<float2>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["index"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["stride"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["index"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["stride"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["id"] == "m_texCube1")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["type"] == "TextureCube")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["index"] == 6)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["id"] == "m_tex2d1")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["type"] == "Texture2D<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["index"] == 7)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["stride"] == 12)
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingDirectX(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--pack-dx12", "--srg"])
- if ok:
- predicates = []
- # check all references of func()
- # Matches 2 (DX) standard here:
- # https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/SPIR-V.rst
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteOffset"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteSize"] == 12) # Complex type. Size & offset match previous entries' sum
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["typeName"] == "/ExampleSRG/S")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteOffset"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteSize"] == 40) # float2x3 - 2 full registers of 16 bytes each and 2 elements of the last register of 4 bytes each
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteOffset"] == 80)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteSize"] == 28) # row float2x3 - 1 full register of 16 bytes and 3 elements of the last register of 4 bytes each
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteOffset"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteSize"] == 36)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteOffset"] == 160)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteOffset"] == 176)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteOffset"] == 160)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteSize"] == 24)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteOffset"] == 192)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteOffset"] == 208)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteOffset"] == 192)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteSize"] == 28)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["typeName"] == "/ExampleSRG/S")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteOffset"] == 224)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteOffset"] == 240)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteOffset"] == 256)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteOffset"] == 272)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteOffset"] == 288)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteOffset"] == 304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteOffset"] == 320)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23]["constantByteOffset"] == 336)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteOffset"] == 352)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][25]["constantByteOffset"] == 224)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][25]["constantByteSize"] == 132)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][26]["constantByteOffset"] == 368)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][26]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][27]["constantByteOffset"] == 384)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][27]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][28]["constantByteOffset"] == 400)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][28]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][29]["constantByteOffset"] == 416)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][29]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][30]["constantByteOffset"] == 368)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][30]["constantByteSize"] == 60)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["constantByteSize"] == 428)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["typeName"] == "/ExampleSRG/T")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["stride"] == 428)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["stride"] == 428)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["stride"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["type"] == "Buffer<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["stride"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["type"] == "Buffer<float2>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["stride"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["stride"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["id"] == "m_texCube1")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["type"] == "TextureCube")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["id"] == "m_tex2d1")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["type"] == "Texture2D<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["stride"] == 12)
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingVulkan(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--pack-vulkan", "--srg"])
- if ok:
- predicates = []
- # check all references of func()
- # Matches Uniform Buffer 1 (VK) standard here:
- # https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/SPIR-V.rst
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteOffset"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteSize"] == 16) # Complex type. Size & offset match previous entries' sum
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["typeName"] == "/ExampleSRG/S")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteOffset"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteSize"] == 48) # float2x3 - 3 full registers of 16 bytes each
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteOffset"] == 80)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteSize"] == 32) # row float2x3 - 2 full registers of 16 bytes each
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteSize"] == 16) # each array element is 16-byte aligned
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteOffset"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteSize"] == 48)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteOffset"] == 160)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteOffset"] == 176)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteOffset"] == 160)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteSize"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteOffset"] == 192)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteOffset"] == 208)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteOffset"] == 192)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteSize"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["typeName"] == "/ExampleSRG/S")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteOffset"] == 224) # Confirmed: SpirV can't pack 4 bytes after an array
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteOffset"] == 240)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteOffset"] == 256)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteOffset"] == 272)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteOffset"] == 288)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteOffset"] == 304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteOffset"] == 320)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23]["constantByteOffset"] == 336)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteOffset"] == 352)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][25]["constantByteOffset"] == 224)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][25]["constantByteSize"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][26]["constantByteOffset"] == 368)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][26]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][27]["constantByteOffset"] == 384)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][27]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][28]["constantByteOffset"] == 400)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][28]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][29]["constantByteOffset"] == 416)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][29]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][30]["constantByteOffset"] == 368)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][30]["constantByteSize"] == 64)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["constantByteSize"] == 432)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["typeName"] == "/ExampleSRG/T")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["stride"] == 432)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["stride"] == 432)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["stride"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["type"] == "Buffer<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["stride"] == 16) # Note that StructuredBuffers in SpirV follow the base alignment for arrays rule (align-16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["type"] == "Buffer<float2>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["stride"] == 16) # Note that Buffers in SpirV follow the base alignment for arrays rule (align-16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["stride"] == 16) # Note that StructuredBuffers in SpirV follow the base alignment for arrays rule (align-16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["id"] == "m_texCube1")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["type"] == "TextureCube")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["id"] == "m_tex2d1")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["type"] == "Texture2D<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["stride"] == 12)
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyStructsPackingVulkan(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--pack-vulkan", "--srg"])
- # Packing vectors in nested structs is trickier.
- # The following values match the dxc's SpirV generation
- if ok:
- predicates = []
- # check all references of func()
- # Matches Uniform Buffer 1 (VK) standard here:
- # https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/SPIR-V.rst
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["qualifiedName"] == "/ExampleSRG/Sab/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["qualifiedName"] == "/ExampleSRG/Sab/b")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteOffset"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["qualifiedName"] == "/ExampleSRG/T/ab") # Complex type
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["typeName"] == "/ExampleSRG/Sab")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["qualifiedName"] == "/ExampleSRG/Sba/b")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["qualifiedName"] == "/ExampleSRG/Sba/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteOffset"] == 24)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["qualifiedName"] == "/ExampleSRG/T/ba") # Complex type
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["typeName"] == "/ExampleSRG/Sba")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["qualifiedName"] == "/ExampleSRG/Sabc/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteOffset"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["qualifiedName"] == "/ExampleSRG/Sabc/b")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteOffset"] == 36)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["qualifiedName"] == "/ExampleSRG/Sabc/c")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteOffset"] == 48)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["qualifiedName"] == "/ExampleSRG/T/abc") # Complex type
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["typeName"] == "/ExampleSRG/Sabc")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteOffset"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteSize"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["qualifiedName"] == "/ExampleSRG/Sac/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteOffset"] == 64)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["qualifiedName"] == "/ExampleSRG/Sac/c")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteOffset"] == 68)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["qualifiedName"] == "/ExampleSRG/T/ac")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["typeName"] == "/ExampleSRG/Sac")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteOffset"] == 64)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["qualifiedName"] == "/ExampleSRG/S/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteOffset"] == 80)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["qualifiedName"] == "/ExampleSRG/S/b")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteOffset"] == 96)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["qualifiedName"] == "/ExampleSRG/T/s")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["typeName"] == "/ExampleSRG/S")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteOffset"] == 80)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteSize"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["qualifiedName"] == "/ExampleSRG/T/a_float")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["qualifiedName"] == "/ExampleSRG/U/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["qualifiedName"] == "/ExampleSRG/U/b")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteOffset"] == 132)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["qualifiedName"] == "/ExampleSRG/U/c")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteOffset"] == 140)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["qualifiedName"] == "/ExampleSRG/U/d")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteOffset"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["qualifiedName"] == "/ExampleSRG/T/u") # Complex type
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["typeName"] == "/ExampleSRG/U")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteSize"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["qualifiedName"] == "/ExampleSRG/m_CB")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["typeName"] == "/ExampleSRG/T")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteSize"] == 160)
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingOpenGL(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--pack-opengl", "--srg"])
- if ok:
- predicates = []
- # check all references of func()
- # Matches std140 (GL) standard here:
- # https://www.khronos.org/registry/OpenGL/specs/gl/glspec45.core.pdf#page=159
- # std140 : https://www.oreilly.com/library/view/opengl-programming-guide/9780132748445/app09lev1sec2.html
- # std430 : https://www.oreilly.com/library/view/opengl-programming-guide/9780132748445/app09lev1sec3.html
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteOffset"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["typeName"] == "/ExampleSRG/S")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteOffset"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteSize"] == 48)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteOffset"] == 80)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteSize"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteOffset"] == 116)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteOffset"] == 120)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteOffset"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteSize"] == 24)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteOffset"] == 160)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteOffset"] == 192)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteOffset"] == 160)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteSize"] == 48)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["typeName"] == "/ExampleSRG/S")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteOffset"] == 208)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteOffset"] == 212)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteOffset"] == 216)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteOffset"] == 220)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteOffset"] == 224)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteOffset"] == 228)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteOffset"] == 232)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23]["constantByteOffset"] == 236)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteOffset"] == 240)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][25]["constantByteOffset"] == 208)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][25]["constantByteSize"] == 36)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][26]["constantByteOffset"] == 244)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][26]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][27]["constantByteOffset"] == 256)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][27]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][28]["constantByteOffset"] == 272)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][28]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][29]["constantByteOffset"] == 288)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][29]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][30]["constantByteOffset"] == 256)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][30]["constantByteSize"] == 64)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["constantByteSize"] == 320)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31]["typeName"] == "/ExampleSRG/T")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["stride"] == 320)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["stride"] == 320)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["stride"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["type"] == "Buffer<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["type"] == "Buffer<float2>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["stride"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["id"] == "m_texCube1")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["type"] == "TextureCube")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["id"] == "m_tex2d1")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["type"] == "Texture2D<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["stride"] == 12)
-
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyStructsPackingOpenGL(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--pack-opengl", "--srg"])
- # Packing vectors in nested structs is trickier.
- # The following values match the dxc's OpenGL generation
- if ok:
- predicates = []
- # check all references of func()
- # Matches std340 (GL) standard here:
- # https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/SPIR-V.rst
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["qualifiedName"] == "/ExampleSRG/Sab/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][0]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["qualifiedName"] == "/ExampleSRG/Sab/b")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteOffset"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][1]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["qualifiedName"] == "/ExampleSRG/T/ab") # Complex type
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["typeName"] == "/ExampleSRG/Sab")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][2]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["qualifiedName"] == "/ExampleSRG/Sba/b")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][3]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["qualifiedName"] == "/ExampleSRG/Sba/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteOffset"] == 24)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][4]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["qualifiedName"] == "/ExampleSRG/T/ba") # Complex type
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["typeName"] == "/ExampleSRG/Sba")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteOffset"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][5]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["qualifiedName"] == "/ExampleSRG/Sabc/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteOffset"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][6]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["qualifiedName"] == "/ExampleSRG/Sabc/b")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteOffset"] == 36)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][7]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["qualifiedName"] == "/ExampleSRG/Sabc/c")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteOffset"] == 48)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][8]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["qualifiedName"] == "/ExampleSRG/T/abc") # Complex type
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["typeName"] == "/ExampleSRG/Sabc")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteOffset"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][9]["constantByteSize"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["qualifiedName"] == "/ExampleSRG/Sac/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteOffset"] == 64)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["qualifiedName"] == "/ExampleSRG/Sac/c")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteOffset"] == 68)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteSize"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["qualifiedName"] == "/ExampleSRG/T/ac")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["typeName"] == "/ExampleSRG/Sac")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteOffset"] == 64)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["qualifiedName"] == "/ExampleSRG/S/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteOffset"] == 80)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["qualifiedName"] == "/ExampleSRG/S/b")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteOffset"] == 96)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteSize"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["qualifiedName"] == "/ExampleSRG/T/s")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["typeName"] == "/ExampleSRG/S")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteOffset"] == 80)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteSize"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["qualifiedName"] == "/ExampleSRG/T/a_float")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["qualifiedName"] == "/ExampleSRG/U/a")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteOffset"] == 116)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["qualifiedName"] == "/ExampleSRG/U/b")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteOffset"] == 120)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["qualifiedName"] == "/ExampleSRG/U/c")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteSize"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["qualifiedName"] == "/ExampleSRG/U/d")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteOffset"] == 132)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteSize"] == 8)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["qualifiedName"] == "/ExampleSRG/T/u") # Complex type
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["typeName"] == "/ExampleSRG/U")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteOffset"] == 128)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteSize"] == 28)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["qualifiedName"] == "/ExampleSRG/m_CB")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["typeName"] == "/ExampleSRG/T")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteSize"] == 160)
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingRelaxedUseSpaces(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--srg"])
- if ok:
- predicates = []
- # check all references of func()
- # Matches Storage Buffer 1 (VK) standard here:
- # https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/SPIR-V.rst
- # Shader Resource Group 0
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["type"] == "ConstantBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["type"] == "ConstantBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["type"] == "Buffer<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["stride"] == 16)
- # Shader Resource Group 1
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["type"] == "ConstantBuffer<Light>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["stride"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["type"] == "Buffer<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["stride"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["index"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["stride"] == 16)
- # Shader Resource Group 2
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["id"] == "m_texCube1")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["type"] == "TextureCube")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["space"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["id"] == "m_tex2d1")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["type"] == "Texture2D<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["space"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["stride"] == 12)
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingRelaxedNoSpaces(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--srg"])
- if ok:
- predicates = []
- # check all references of func()
- # Matches Storage Buffer 1 (VK) standard here:
- # https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/SPIR-V.rst
- # Shader Resource Group 0
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["type"] == "ConstantBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["type"] == "ConstantBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["type"] == "Buffer<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["stride"] == 16)
- # Shader Resource Group 1
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["type"] == "ConstantBuffer<Light>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["stride"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["type"] == "Buffer<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["stride"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["index"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["stride"] == 16)
- # Shader Resource Group 2
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["id"] == "m_texCube1")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["type"] == "TextureCube")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["space"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["id"] == "m_tex2d1")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["type"] == "Texture2D<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["space"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["stride"] == 12)
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingRelaxedUniqueIdx(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--srg", "--unique-idx"])
- if ok:
- predicates = []
- # check all references of func()
- # Matches Storage Buffer 1 (VK) standard here:
- # https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/SPIR-V.rst
- # Note! Bacause AZSLc emits the resource indices in order SRVs/UAVs, then Samplers, then CBVs
- # the indices (when using unique index) don't necessarily match the order of declaration.
- # Since the data is reflected this should not be a problem!
- # In fact, it verifies the consumer application is data driven and accepts the emitted register indices
- # Shader Resource Group 0
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["type"] == "ConstantBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["index"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["type"] == "ConstantBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["index"] == 3)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["type"] == "Buffer<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["stride"] == 16)
- # Shader Resource Group 1
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["type"] == "ConstantBuffer<Light>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["index"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["stride"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["type"] == "Buffer<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["stride"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["index"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["stride"] == 16)
- # Shader Resource Group 2
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["id"] == "m_texCube1")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["type"] == "TextureCube")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["space"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["id"] == "m_tex2d1")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["type"] == "Texture2D<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["space"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["stride"] == 12)
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingRelaxedUniqueIdxUseSpaces(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--srg", "--unique-idx"])
- if ok:
- predicates = []
- # check all references of func()
- # Matches Storage Buffer 1 (VK) standard here:
- # https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/SPIR-V.rst
- # Note! Bacause AZSLc emits the resource indices in order SRVs/UAVs, then Samplers, then CBVs
- # the indices (when using unique index) don't necessarily match the order of declaration.
- # Since the data is reflected this should not be a problem!
- # In fact, it verifies the consumer application is data driven and accepts the emitted register indices
- # Shader Resource Group 0
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["type"] == "ConstantBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["index"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["type"] == "ConstantBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["index"] == 3)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["type"] == "Buffer<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["stride"] == 16)
- # Shader Resource Group 1
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["type"] == "ConstantBuffer<Light>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["index"] == 4)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["stride"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["type"] == "Buffer<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["stride"] == 12)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["type"] == "StructuredBuffer<S>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["count"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["index"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["space"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["stride"] == 16)
- # Shader Resource Group 2
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["id"] == "m_texCube1")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["type"] == "TextureCube")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["space"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][0]["stride"] == 16)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["id"] == "m_tex2d1")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["type"] == "Texture2D<float3>")
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["space"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForImageViews"][1]["stride"] == 12)
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
-
- def verifyPackingUnboundedSpillSpaces(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--srg", "--namespace=dx"])
- if ok:
- predicates = []
- # Shader Resource Group 0
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["id"] == "m_texSRVa")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["type"] == "Texture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][0]["space"] == 1000)
-
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["id"] == "m_texSRVb")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["type"] == "Texture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][1]["space"] == 1001)
-
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][2]["id"] == "m_texSRVc")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][2]["type"] == "Texture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][2]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][2]["index"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][2]["space"] == 0)
-
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][3]["id"] == "m_texSRVd")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][3]["type"] == "Texture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][3]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][3]["index"] == 3)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][3]["space"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][4]["id"] == "m_texUAVa")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][4]["type"] == "RWTexture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][4]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][4]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][4]["space"] == 1002)
-
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][5]["id"] == "m_texUAVb")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][5]["type"] == "RWTexture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][5]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][5]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForImageViews"][5]["space"] == 1003)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][0]["id"] == "m_samplera")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][0]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][0]["space"] == 1004)
-
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][1]["id"] == "m_samplerb")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][1]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSamplers"][1]["space"] == 1005)
-
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["id"] == "m_structArraya")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["type"] == "ConstantBuffer<MyStruct>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["space"] == 1006)
-
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["id"] == "m_structArrayb")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["type"] == "ConstantBuffer<MyStruct>")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["space"] == 1007)
-
- # Shader Resource Group 1
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][0]["id"] == "m_texSRVa")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][0]["type"] == "Texture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][0]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][0]["space"] == 1008)
-
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][1]["id"] == "m_texSRVb")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][1]["type"] == "Texture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][1]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][1]["space"] == 1009)
-
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][2]["id"] == "m_texSRVc")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][2]["type"] == "Texture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][2]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][2]["index"] == 2)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][2]["space"] == 1)
-
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][3]["id"] == "m_texSRVd")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][3]["type"] == "Texture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][3]["count"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][3]["index"] == 3)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][3]["space"] == 1)
-
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][4]["id"] == "m_texUAVa")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][4]["type"] == "RWTexture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][4]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][4]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][4]["space"] == 1010)
-
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][5]["id"] == "m_texUAVb")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][5]["type"] == "RWTexture2D<float4>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][5]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][5]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForImageViews"][5]["space"] == 1011)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][0]["id"] == "m_samplera")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][0]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][0]["space"] == 1012)
-
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][1]["id"] == "m_samplerb")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][1]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForSamplers"][1]["space"] == 1013)
-
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["id"] == "m_structArraya")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["type"] == "ConstantBuffer<MyStruct>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["index"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["space"] == 1014)
-
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["id"] == "m_structArrayb")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["type"] == "ConstantBuffer<MyStruct>")
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["count"] == -1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["index"] == 1)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["space"] == 1015)
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingDirectXMatrices(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--pack-dx12", "--no-alignment-validation", "--srg"])
- if ok:
- predicates = []
- # check all references of func()
- # Matches 2 (DX) emission here:
- # http://shader-playground.timjones.io/206f18e88f838720db8e3415362551df
- # struct T2
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 0]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 1]["constantByteOffset"] == 24)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 2]["constantByteOffset"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 3]["constantByteOffset"] == 72)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 4]["constantByteOffset"] == 80)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 5]["constantByteOffset"] == 136)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 6]["constantByteOffset"] == 144)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 7]["constantByteOffset"] == 168)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 8]["constantByteOffset"] == 176)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 9]["constantByteOffset"] == 204)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteOffset"] == 208)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteOffset"] == 240)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteOffset"] == 256)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteOffset"] == 280)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteOffset"] == 288)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteOffset"] == 328)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteOffset"] == 336)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteOffset"] == 392)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteOffset"] == 400)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteOffset"] == 424)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteOffset"] == 432)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteOffset"] == 464)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteOffset"] == 480)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23]["constantByteOffset"] == 512)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteSize"] == 520) # Complex type. Size & offset match previous entries' sum. Confirmed in Dxc
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["typeName"] == "/ExampleSRG/T2")
- # struct T3
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 0 + 25]["constantByteOffset"] == 0 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 1 + 25]["constantByteOffset"] == 28 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 2 + 25]["constantByteOffset"] == 32 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 3 + 25]["constantByteOffset"] == 76 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 4 + 25]["constantByteOffset"] == 80 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 5 + 25]["constantByteOffset"] == 140 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 6 + 25]["constantByteOffset"] == 144 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 7 + 25]["constantByteOffset"] == 184 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 8 + 25]["constantByteOffset"] == 192 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 9 + 25]["constantByteOffset"] == 236 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10 + 25]["constantByteOffset"] == 240 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11 + 25]["constantByteOffset"] == 288 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12 + 25]["constantByteOffset"] == 304 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13 + 25]["constantByteOffset"] == 336 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14 + 25]["constantByteOffset"] == 352 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15 + 25]["constantByteOffset"] == 400 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16 + 25]["constantByteOffset"] == 416 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17 + 25]["constantByteOffset"] == 480 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18 + 25]["constantByteOffset"] == 496 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19 + 25]["constantByteOffset"] == 536 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20 + 25]["constantByteOffset"] == 544 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21 + 25]["constantByteOffset"] == 592 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22 + 25]["constantByteOffset"] == 608 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23 + 25]["constantByteOffset"] == 656 + 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][49]["constantByteOffset"] == 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][49]["constantByteSize"] == 664) # Complex type. Size & offset match previous entries' sum. Confirmed in Dxc
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][49]["typeName"] == "/ExampleSRG/T3")
- # struct T4
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 0 + 50]["constantByteOffset"] == 0 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 1 + 50]["constantByteOffset"] == 32 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 2 + 50]["constantByteOffset"] == 48 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 3 + 50]["constantByteOffset"] == 96 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 4 + 50]["constantByteOffset"] == 112 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 5 + 50]["constantByteOffset"] == 176 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 6 + 50]["constantByteOffset"] == 192 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 7 + 50]["constantByteOffset"] == 248 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 8 + 50]["constantByteOffset"] == 256 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 9 + 50]["constantByteOffset"] == 316 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10 + 50]["constantByteOffset"] == 320 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11 + 50]["constantByteOffset"] == 384 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12 + 50]["constantByteOffset"] == 400 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13 + 50]["constantByteOffset"] == 432 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14 + 50]["constantByteOffset"] == 448 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15 + 50]["constantByteOffset"] == 496 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16 + 50]["constantByteOffset"] == 512 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17 + 50]["constantByteOffset"] == 576 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18 + 50]["constantByteOffset"] == 592 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19 + 50]["constantByteOffset"] == 648 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20 + 50]["constantByteOffset"] == 656 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21 + 50]["constantByteOffset"] == 720 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22 + 50]["constantByteOffset"] == 736 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23 + 50]["constantByteOffset"] == 800 + 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][74]["constantByteOffset"] == 1200)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][74]["constantByteSize"] == 808) # Complex type. Size & offset match previous entries' sum. Confirmed in Dxc
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][74]["typeName"] == "/ExampleSRG/T4")
- # struct TU
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 0 + 75]["constantByteOffset"] == 0 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 1 + 75]["constantByteOffset"] == 4 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 2 + 75]["constantByteOffset"] == 16 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 3 + 75]["constantByteOffset"] == 36 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 4 + 75]["constantByteOffset"] == 48 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 5 + 75]["constantByteOffset"] == 84 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 6 + 75]["constantByteOffset"] == 96 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 7 + 75]["constantByteOffset"] == 148 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 8 + 75]["constantByteOffset"] == 152 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 9 + 75]["constantByteOffset"] == 156 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10 + 75]["constantByteOffset"] == 160 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11 + 75]["constantByteOffset"] == 168 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12 + 75]["constantByteOffset"] == 176 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13 + 75]["constantByteOffset"] == 188 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14 + 75]["constantByteOffset"] == 192 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15 + 75]["constantByteOffset"] == 208 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16 + 75]["constantByteOffset"] == 212 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17 + 75]["constantByteOffset"] == 216 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18 + 75]["constantByteOffset"] == 224 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19 + 75]["constantByteOffset"] == 232 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20 + 75]["constantByteOffset"] == 240 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21 + 75]["constantByteOffset"] == 256 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22 + 75]["constantByteOffset"] == 272 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23 + 75]["constantByteOffset"] == 288 + 2016)
- # Special cases packing tests
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24 + 75]["constantByteOffset"] == 296 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][25 + 75]["constantByteOffset"] == 304 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][26 + 75]["constantByteOffset"] == 312 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][27 + 75]["constantByteOffset"] == 320 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][28 + 75]["constantByteOffset"] == 332 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][29 + 75]["constantByteOffset"] == 336 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][30 + 75]["constantByteOffset"] == 344 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31 + 75]["constantByteOffset"] == 352 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][32 + 75]["constantByteOffset"] == 368 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][33 + 75]["constantByteOffset"] == 384 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][34 + 75]["constantByteOffset"] == 392 + 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][110]["constantByteOffset"] == 2016)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][110]["constantByteSize"] == 400) # Complex type. Size & offset match previous entries' sum. Confirmed in Dxc
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][110]["typeName"] == "/ExampleSRG/TU")
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingVulkanMatrices(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--pack-vulkan", "--no-alignment-validation", "--srg"])
- if ok:
- predicates = []
- # check all references of func()
- # Matches Uniform Buffer 1 (VK) emission here:
- # http://shader-playground.timjones.io/206f18e88f838720db8e3415362551df
- # struct T2
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 0]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 1]["constantByteOffset"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 2]["constantByteOffset"] == 48)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 3]["constantByteOffset"] == 96)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 4]["constantByteOffset"] == 112)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 5]["constantByteOffset"] == 176)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 6]["constantByteOffset"] == 192)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 7]["constantByteOffset"] == 224)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 8]["constantByteOffset"] == 240)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 9]["constantByteOffset"] == 272)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10]["constantByteOffset"] == 288)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11]["constantByteOffset"] == 320)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12]["constantByteOffset"] == 336)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13]["constantByteOffset"] == 368)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14]["constantByteOffset"] == 384)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15]["constantByteOffset"] == 432)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16]["constantByteOffset"] == 448)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteOffset"] == 512)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18]["constantByteOffset"] == 528)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19]["constantByteOffset"] == 560)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20]["constantByteOffset"] == 576)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21]["constantByteOffset"] == 608)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22]["constantByteOffset"] == 624)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23]["constantByteOffset"] == 656)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["constantByteSize"] == 672) # Complex type. Size & offset match previous entries' sum. Confirmed in Dxc
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24]["typeName"] == "/ExampleSRG/T2")
- # struct T3
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 0 + 25]["constantByteOffset"] == 0 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 1 + 25]["constantByteOffset"] == 32 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 2 + 25]["constantByteOffset"] == 48 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 3 + 25]["constantByteOffset"] == 96 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 4 + 25]["constantByteOffset"] == 112 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 5 + 25]["constantByteOffset"] == 176 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 6 + 25]["constantByteOffset"] == 192 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 7 + 25]["constantByteOffset"] == 240 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 8 + 25]["constantByteOffset"] == 256 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 9 + 25]["constantByteOffset"] == 304 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10 + 25]["constantByteOffset"] == 320 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11 + 25]["constantByteOffset"] == 368 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12 + 25]["constantByteOffset"] == 384 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13 + 25]["constantByteOffset"] == 416 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14 + 25]["constantByteOffset"] == 432 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15 + 25]["constantByteOffset"] == 480 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16 + 25]["constantByteOffset"] == 496 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17 + 25]["constantByteOffset"] == 560 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18 + 25]["constantByteOffset"] == 576 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19 + 25]["constantByteOffset"] == 624 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20 + 25]["constantByteOffset"] == 640 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21 + 25]["constantByteOffset"] == 688 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22 + 25]["constantByteOffset"] == 704 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23 + 25]["constantByteOffset"] == 752 + 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][49]["constantByteOffset"] == 672)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][49]["constantByteSize"] == 768) # Complex type. Size & offset match previous entries' sum. Confirmed in Dxc
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][49]["typeName"] == "/ExampleSRG/T3")
- # struct T4
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 0 + 50]["constantByteOffset"] == 0 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 1 + 50]["constantByteOffset"] == 32 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 2 + 50]["constantByteOffset"] == 48 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 3 + 50]["constantByteOffset"] == 96 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 4 + 50]["constantByteOffset"] == 112 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 5 + 50]["constantByteOffset"] == 176 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 6 + 50]["constantByteOffset"] == 192 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 7 + 50]["constantByteOffset"] == 256 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 8 + 50]["constantByteOffset"] == 272 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 9 + 50]["constantByteOffset"] == 336 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10 + 50]["constantByteOffset"] == 352 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11 + 50]["constantByteOffset"] == 416 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12 + 50]["constantByteOffset"] == 432 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13 + 50]["constantByteOffset"] == 464 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14 + 50]["constantByteOffset"] == 480 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15 + 50]["constantByteOffset"] == 528 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16 + 50]["constantByteOffset"] == 544 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17 + 50]["constantByteOffset"] == 608 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18 + 50]["constantByteOffset"] == 624 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19 + 50]["constantByteOffset"] == 688 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20 + 50]["constantByteOffset"] == 704 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21 + 50]["constantByteOffset"] == 768 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22 + 50]["constantByteOffset"] == 784 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23 + 50]["constantByteOffset"] == 848 + 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][74]["constantByteOffset"] == 1440)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][74]["constantByteSize"] == 864) # Complex type. Size & offset match previous entries' sum. Confirmed in Dxc
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][74]["typeName"] == "/ExampleSRG/T4")
- # struct TU
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 0 + 75]["constantByteOffset"] == 0 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 1 + 75]["constantByteOffset"] == 4 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 2 + 75]["constantByteOffset"] == 8 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 3 + 75]["constantByteOffset"] == 16 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 4 + 75]["constantByteOffset"] == 20 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 5 + 75]["constantByteOffset"] == 32 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 6 + 75]["constantByteOffset"] == 48 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 7 + 75]["constantByteOffset"] == 64 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 8 + 75]["constantByteOffset"] == 68 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][ 9 + 75]["constantByteOffset"] == 72 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][10 + 75]["constantByteOffset"] == 80 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][11 + 75]["constantByteOffset"] == 88 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][12 + 75]["constantByteOffset"] == 96 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][13 + 75]["constantByteOffset"] == 108 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][14 + 75]["constantByteOffset"] == 112 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][15 + 75]["constantByteOffset"] == 128 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][16 + 75]["constantByteOffset"] == 132 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17 + 75]["constantByteOffset"] == 136 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][18 + 75]["constantByteOffset"] == 144 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][19 + 75]["constantByteOffset"] == 152 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][20 + 75]["constantByteOffset"] == 160 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][21 + 75]["constantByteOffset"] == 176 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][22 + 75]["constantByteOffset"] == 192 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][23 + 75]["constantByteOffset"] == 208 + 2304)
- # Special cases packing tests
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][24 + 75]["constantByteOffset"] == 216 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][25 + 75]["constantByteOffset"] == 224 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][26 + 75]["constantByteOffset"] == 232 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][27 + 75]["constantByteOffset"] == 240 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][28 + 75]["constantByteOffset"] == 252 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][29 + 75]["constantByteOffset"] == 256 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][30 + 75]["constantByteOffset"] == 264 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][31 + 75]["constantByteOffset"] == 272 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][32 + 75]["constantByteOffset"] == 288 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][33 + 75]["constantByteOffset"] == 304 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][34 + 75]["constantByteOffset"] == 312 + 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][110]["constantByteOffset"] == 2304)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][110]["constantByteSize"] == 320) # Complex type. Size & offset match previous entries' sum. Confirmed in Dxc
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][110]["typeName"] == "/ExampleSRG/TU")
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingDirectXStride(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--pack-dx12", "--no-alignment-validation", "--srg"])
- if ok:
- predicates = []
- # Column major Constant Buffers
- # Note that the stride here means size. ConstantBuffers should have stride of 0
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][0]["stride"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][1]["stride"] == 48)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][2]["stride"] == 36)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][3]["stride"] == 64)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][4]["stride"] == 40)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][5]["stride"] == 52)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][6]["stride"] == 68)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][7]["stride"] == 56)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForBufferViews"][8]["stride"] == 72)
- # Row major Constant Buffers
- # Note that the stride here means size. ConstantBuffers should have stride of 0
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][0]["stride"] == 32)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][1]["stride"] == 36)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][2]["stride"] == 48)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][3]["stride"] == 40)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][4]["stride"] == 64)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][5]["stride"] == 52)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][6]["stride"] == 56)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][7]["stride"] == 68)
- predicates.append(lambda: j["ShaderResourceGroups"][1]["inputsForBufferViews"][8]["stride"] == 72)
- # Column major Structured Buffers
- # Note that the stride is the size of a single element in the buffer. For DirectX packing layout majorness is ignored
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForBufferViews"][0]["stride"] == 16 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForBufferViews"][1]["stride"] == 24 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForBufferViews"][2]["stride"] == 24 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForBufferViews"][3]["stride"] == 32 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForBufferViews"][4]["stride"] == 32 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForBufferViews"][5]["stride"] == 36 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForBufferViews"][6]["stride"] == 48 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForBufferViews"][7]["stride"] == 48 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][2]["inputsForBufferViews"][8]["stride"] == 64 + 4)
- # Row major Structured Buffers
- # Note that the stride is the size of a single element in the buffer. For DirectX packing layout majorness is ignored
- predicates.append(lambda: j["ShaderResourceGroups"][3]["inputsForBufferViews"][0]["stride"] == 16 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][3]["inputsForBufferViews"][1]["stride"] == 24 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][3]["inputsForBufferViews"][2]["stride"] == 24 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][3]["inputsForBufferViews"][3]["stride"] == 32 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][3]["inputsForBufferViews"][4]["stride"] == 32 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][3]["inputsForBufferViews"][5]["stride"] == 36 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][3]["inputsForBufferViews"][6]["stride"] == 48 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][3]["inputsForBufferViews"][7]["stride"] == 48 + 4)
- predicates.append(lambda: j["ShaderResourceGroups"][3]["inputsForBufferViews"][8]["stride"] == 64 + 4)
- if not silent: print (fg.CYAN+ style.BRIGHT+ "input assembler layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingDirectXInlineConstants(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--pack-dx12", "--srg", "--root-const=52"])
- if ok:
- predicates = []
- # Inline constant buffer reflection data validation
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["count"] == 1)
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["index"] == 0)
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["space"] == 1)
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["usage"] == "Read")
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["sizeInBytes"] == 60)
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["id"] == "Root_Constants")
- # Inline constant structure members validation
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["constantByteOffset"] == 0)
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["constantByteSize"] == 16)
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["constantId"] == "varFloat4")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["qualifiedName"] == "/Root_Constants/varFloat4")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["typeDimensions"] == [])
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["typeKind"] == "Predefined")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["typeName"] == "?float4")
- # Inline constant structure members validation
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["constantByteOffset"] == 16)
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["constantByteSize"] == 44)
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["constantId"] == "mat3x3")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["qualifiedName"] == "/Root_Constants/mat3x3")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["typeDimensions"] == [])
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["typeKind"] == "Predefined")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["typeName"] == "?float3x3")
- if not silent: print (fg.CYAN+ style.BRIGHT+ "inline constant layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- def verifyPackingMetalInlineConstants(thefile, compilerPath, silent):
- j, ok = testfuncs.buildAndGetJson(thefile, compilerPath, silent, ["--namespace=mt", "--srg"])
- if ok:
- predicates = []
- # Inline constant buffer reflection data validation
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["count"] == 1)
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["index"] == 0)
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["space"] == 1)
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["usage"] == "Read")
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["sizeInBytes"] == 64)
- predicates.append(lambda: j["RootConstantBuffer"]["bufferForRootConstants"]["id"] == "Root_Constants")
- # Inline constant structure members validation
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["constantByteOffset"] == 0)
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["constantByteSize"] == 16)
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["constantId"] == "varFloat4")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["qualifiedName"] == "/Root_Constants/varFloat4")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["typeDimensions"] == [])
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["typeKind"] == "Predefined")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][0]["typeName"] == "?float4")
- # Inline constant structure members validation
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["constantByteOffset"] == 16)
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["constantByteSize"] == 44)
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["constantId"] == "mat3x3")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["qualifiedName"] == "/Root_Constants/mat3x3")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["typeDimensions"] == [])
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["typeKind"] == "Predefined")
- predicates.append(lambda: j["RootConstantBuffer"]["inputsForRootConstants"][1]["typeName"] == "?float3x3")
- if not silent: print (fg.CYAN+ style.BRIGHT+ "inline constant layouts verification..."+ style.RESET_ALL)
- ok = testfuncs.verifyAllPredicates(predicates, j)
- return True if ok else False
- result = 0 # to define for sub-tests
- resultFailed = 0
- def doTests(compiler, silent, azdxcpath):
- global result
- global resultFailed
- # Working directory should have been set to this script's directory by the calling parent
- # You can get it once doTests() is called, but not during initialization of the module,
- # because at that time it will still be set to the working directory of the calling script
- workDir = os.getcwd()
- # Relaxed packing needs to be reviewed
- #if verifyPackingRelaxed(os.path.join(workDir, "srg-layouts.azsl"), compiler, silent) : result += 1
- #else: resultFailed += 1
- if verifyPackingDirectX(os.path.join(workDir, "srg-layouts.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyPackingVulkan(os.path.join(workDir, "srg-layouts.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyStructsPackingVulkan(os.path.join(workDir, "srg-layouts-structs.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyPackingOpenGL(os.path.join(workDir, "srg-layouts.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyStructsPackingOpenGL(os.path.join(workDir, "srg-layouts-structs.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyPackingRelaxedUseSpaces(os.path.join(workDir, "srg-layouts-spaces.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyPackingRelaxedNoSpaces(os.path.join(workDir, "srg-layouts-spaces.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyPackingRelaxedUniqueIdx(os.path.join(workDir, "srg-layouts-spaces.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyPackingRelaxedUniqueIdxUseSpaces(os.path.join(workDir, "srg-layouts-spaces.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
-
- if verifyPackingUnboundedSpillSpaces(os.path.join(workDir, "srg-layouts-multiple-unbounded-arrays.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyPackingDirectXMatrices(os.path.join(workDir, "srg-layouts-matrices.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyPackingVulkanMatrices(os.path.join(workDir, "srg-layouts-matrices.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyPackingDirectXStride(os.path.join(workDir, "srg-layouts-strides.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyPackingDirectXInlineConstants(os.path.join(workDir, "inline-constant-layouts.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
- if verifyPackingMetalInlineConstants(os.path.join(workDir, "inline-constant-layouts.azsl"), compiler, silent) : result += 1
- else: resultFailed += 1
-
- if __name__ == "__main__":
- print ("please call from testapp.py")
|