12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433 |
- #!/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/m_CB")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["typeName"] == "/ExampleSRG/T")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteSize"] == 128)
- 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/m_CB")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["typeName"] == "/ExampleSRG/T")
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteOffset"] == 0)
- predicates.append(lambda: j["ShaderResourceGroups"][0]["inputsForSRGConstants"][17]["constantByteSize"] == 128)
- 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 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 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")
|