Refactor SPIR-V patching and strip debug instructions for Vulkan mobile except OpName instructions in --strip-reflect pass as UE always needs this reflection information.

Rebuild ShaderConductor for Win64, Mac, Linux.

#rb Carl.Lloyd, Rolando.Caloca, Ryan.Vance
#fyi Mihnea.Balta, Will.Damon, Dmitriy.Dyomin, Michael.Sartain, Brandon.Schaefer
#jira none
#rnx

[CL 16186169 by Lukas Hermanns in ue5-main branch]
This commit is contained in:
Lukas Hermanns
2021-05-03 15:22:38 -04:00
parent a21dd65e3c
commit c2eda93a8d
10 changed files with 378 additions and 229 deletions
+33 -32
View File
@@ -14067,18 +14067,18 @@
<File Name="Engine/Binaries/ThirdParty/Qualcomm/Win64/TextureConverter.dll" Hash="a99eaca9858f46cf82753552843cc45d6bfbc063" />
<File Name="Engine/Binaries/ThirdParty/SDL/Win64/SDL.dll" Hash="866856cdb08da85db47e3f8c5e3dbae0ebc6e29c" />
<File Name="Engine/Binaries/ThirdParty/SDL2/Win64/SDL2.dll" Hash="0f87fa15e4badf871594d49174ce2a0770e58894" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Linux/x86_64-unknown-linux-gnu/libShaderConductor.so" Hash="0cf12d2d0ec3746728fa63fe4dd5427420910201" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Linux/x86_64-unknown-linux-gnu/libdxcompiler.so" Hash="4b7326c74a9077e026feacf18aa59daac63f0dd7" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Mac/libShaderConductor.dylib" Hash="b502146adccc4b726641f37c1f2d0a06ea270f2e" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Linux/x86_64-unknown-linux-gnu/libShaderConductor.so" Hash="1c86d4e2ca7cd6b87ef289f13267bf72f20e96ab" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Linux/x86_64-unknown-linux-gnu/libdxcompiler.so" Hash="55f817940d9d37f302210b82a4f7d9318a8878c9" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Mac/libShaderConductor.dylib" Hash="c1467d12d080fc3e7bf5060c84e76723cfc0816a" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Mac/libShaderConductor.dylib.dSYM/Contents/Info.plist" Hash="1429adeea31f7271ee273c7300738d6d9b4afe80" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Mac/libShaderConductor.dylib.dSYM/Contents/Resources/DWARF/libShaderConductor.dylib" Hash="453de1080f83b0f81ffedc7f5b9a640a71394109" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Mac/libdxcompiler.dylib" Hash="8f8fa2d3d1e7889c340c7bbfebcaa6af6115df54" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Mac/libShaderConductor.dylib.dSYM/Contents/Resources/DWARF/libShaderConductor.dylib" Hash="a16c0c080d3fcb883222b97642e37af9a578ddef" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Mac/libdxcompiler.dylib" Hash="930d4649900c67e6fa9d12b2dac938270fbb074a" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Mac/libdxcompiler.dylib.dSYM/Contents/Info.plist" Hash="a4a3654fdf0397a324e95608951c38fd60a60e3f" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Mac/libdxcompiler.dylib.dSYM/Contents/Resources/DWARF/libdxcompiler.dylib" Hash="b8435799bf903deec580049ca9283700d43622be" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Win64/ShaderConductor.dll" Hash="bfa1f347635cec806e19d44b5a49ffd01660da3e" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Win64/ShaderConductorCmd.exe" Hash="3831be3036a49329097d1a7f0538c930e766961a" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Win64/dxc.exe" Hash="aacb473254ea7ec806cdf46d3d0f2bd7f400b02e" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Win64/dxcompiler.dll" Hash="92389ce10491cb33971010d637ae13e9b23b362f" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Mac/libdxcompiler.dylib.dSYM/Contents/Resources/DWARF/libdxcompiler.dylib" Hash="af0d8914a68e5266858ff9451b7592e1015d9a92" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Win64/ShaderConductor.dll" Hash="cd9971c48e67dd48c987a747cf4cd248a5ed3d93" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Win64/ShaderConductorCmd.exe" Hash="6eeae04ca7735363b959c9e0dd7cb034a9e0a181" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Win64/dxc.exe" Hash="aa72b1f8e1200a4a04ee97ccf4b18f8dba5c24c1" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Win64/dxcompiler.dll" Hash="e27076cc725d18cf17d6912d3e7011c34ea972d5" />
<File Name="Engine/Binaries/ThirdParty/ShaderConductor/Win64/dxil.dll" Hash="ebc4ce96058c171e3465c3a8ca4a5507a72b20a6" />
<File Name="Engine/Binaries/ThirdParty/Steamworks/Steamv146/Mac/libsteam_api.dylib" Hash="d71f7783ee4415d7df393c024adc2c486b5f64b8" />
<File Name="Engine/Binaries/ThirdParty/Steamworks/Steamv146/Win64/steam_api64.dll" Hash="c4b5b00b605e59c6fdcb6731f2e53069506e287a" />
@@ -68411,7 +68411,7 @@
<File Name="Engine/Source/ThirdParty/ShaderConductor/ShaderConductor/Source/Tests/Data/Input/Inc/HeaderB.hlsli" Hash="ba4e3f7158168ce3e7862f66bee36325a2055982" />
<File Name="Engine/Source/ThirdParty/ShaderConductor/ShaderConductor/Source/Tests/Data/Input/Inc/HeaderEmpty.hlsli" Hash="da39a3ee5e6b4b0d3255bfef95601890afd80709" />
<File Name="Engine/Source/ThirdParty/ShaderConductor/ShaderConductor/azure-pipelines.yml" Hash="39c4ef785ef65e11fc4f2035f078b99272687f03" />
<File Name="Engine/Source/ThirdParty/ShaderConductor/ShaderConductor/lib/Win64/ShaderConductor.lib" Hash="7f1c005cfed023e3cf8ffcb2ae8bf84fa4b879fd" />
<File Name="Engine/Source/ThirdParty/ShaderConductor/ShaderConductor/lib/Win64/ShaderConductor.lib" Hash="58cbdb630bfe1e3171c1142eddda5f554661c8e1" />
<File Name="Engine/Source/ThirdParty/SpeedTree/SpeedTreeSDK-v7.0/Lib/Linux/x86_64-unknown-linux-gnu/Release/libSpeedTreeCore.a" Hash="b6813c2fd7a8ba2f17044acb63b5b226e3c37044" />
<File Name="Engine/Source/ThirdParty/SpeedTree/SpeedTreeSDK-v7.0/Lib/Linux/x86_64-unknown-linux-gnu/Release/libSpeedTreeCore_fPIC.a" Hash="d50cbe2d64fe368979edc2354781a22ff0d68cb1" />
<File Name="Engine/Source/ThirdParty/SpeedTree/SpeedTreeSDK-v7.0/Lib/MacOSX/Debug/libSpeedTreeCore.a" Hash="4ebdf90531fdda5bf3fc5e03641959a0c96932cd" />
@@ -73854,7 +73854,6 @@
<Blob Hash="0ce9e126be489f7d02ec47dc50c391620ecdab1c" Size="100053" PackHash="e7431ecdcf6d5d4bbbc87af47035ed6bb3a61cd7" PackOffset="817502" />
<Blob Hash="0cedf77206b66174d1e49d36b21305dbb6f4b14d" Size="7844" PackHash="740468294ff5dc113d230e62ae67c145d10bfb6c" PackOffset="1236837" />
<Blob Hash="0cf03315021dd11554c3da924474f9a783f76833" Size="366448" PackHash="21c3b1ea8b9fd50d27f4777fa7ed390c772d1df6" PackOffset="1684520" />
<Blob Hash="0cf12d2d0ec3746728fa63fe4dd5427420910201" Size="39909608" PackHash="f1784900371932c65572368345160e91bc9d0b25" PackOffset="8" />
<Blob Hash="0cf2491548aeb9b9c2efacb1448dd6d84d83c8e1" Size="1008" PackHash="a74a1a5121db55028d0a9d281ca2e5d501761af4" PackOffset="191815" />
<Blob Hash="0cf3a6d54090e7ac7cf51c7ade207f5486b150db" Size="11264" PackHash="83284c2aeeba0244678d6c9a37fbfe5440739ca5" PackOffset="1909768" />
<Blob Hash="0cf6253bff39f40ca0991f9b06d3394bfea21ed2" Size="3377" PackHash="24aac461ee54420b2fbb50c17fba330abdd085e0" PackOffset="948135" />
@@ -76643,6 +76642,7 @@
<Blob Hash="1c8465e628b1722ca59d732274c3db3a19953823" Size="4157563" PackHash="14397d2480a7d56f86db4befff34a074fcb08b5f" PackOffset="8" />
<Blob Hash="1c84e7862224e206a0ffee2e96f8d52a81d6d004" Size="1580" PackHash="0a79b68fc843ff09e7eeffe5fafe58c90b6ece69" PackOffset="1020688" />
<Blob Hash="1c856c997488b1e962384ef1dcb566f5bd16850f" Size="21896" PackHash="ec47a61c9e578fd55eb52d1035235a98b560b026" PackOffset="708432" />
<Blob Hash="1c86d4e2ca7cd6b87ef289f13267bf72f20e96ab" Size="39916104" PackHash="d0ec82ea726432b81fc64641a132b0cf896e32af" PackOffset="8" />
<Blob Hash="1c8a9e20f9d398df6e4dcc32e1563f936c2ef15d" Size="7617" PackHash="529198f2ee46d987aeed3fff1a66a0ba7ab79765" PackOffset="2048604" />
<Blob Hash="1c8ace4754bec8812f52c278b5d0fcc302f18579" Size="79079" PackHash="53da7e351adfdc97c08f2be417bb9cfdd1d4bfb9" PackOffset="100834" />
<Blob Hash="1c8db37f2d17f9aefc4e562cb9601977635bef91" Size="4328" PackHash="a44dc4b35972b9dad88e2ad3e0a47c8db7399c27" PackOffset="355524" />
@@ -81747,7 +81747,6 @@
<Blob Hash="38313115c3373a8126164b8a91d8ed8e7e65bca0" Size="8782" PackHash="eef645665d668dc309bebdc77ca5e0d66043c9e6" PackOffset="442909" />
<Blob Hash="383179278cf373b860fb4971f624915c570be9fb" Size="2600" PackHash="33d0a2949662b327b35a881192e85107ecafc8ac" PackOffset="1348408" />
<Blob Hash="3831a8ed8e598f48142a86a321d3cd87d6cb4e1b" Size="117690" PackHash="54be6499114cd7da4004b4d1f0b7d1d71025fa04" PackOffset="117332" />
<Blob Hash="3831be3036a49329097d1a7f0538c930e766961a" Size="164352" PackHash="7aa13c0fcdcac4f68aa2db32000ebde9c3d580e5" PackOffset="8" />
<Blob Hash="3832bdabcc78e2eb11282f48220bd1795c093ec1" Size="103805" PackHash="d5bafdf3f50a35765f845dea41332e85db30f9ec" PackOffset="781277" />
<Blob Hash="383303a97b6f39e01642ab013cdda1db7045978f" Size="426172" PackHash="69015e5860a9cb630080cbf7562ee7e1caed7623" PackOffset="270505" />
<Blob Hash="3833fdcf682e82da5f93c222312e879fd975fae7" Size="100" PackHash="830cc93f966e96754b4b160b2d5ffbe64678ec80" PackOffset="526360" />
@@ -84241,7 +84240,6 @@
<Blob Hash="4539a77cf5b43457d002afd006c84026cfa093e1" Size="38262" PackHash="87b68506c5cd74f1611024f39f537980f02f4767" PackOffset="801030" />
<Blob Hash="4539ef4bdd9a089e0fc5af50b8b2f38bf7a7eb77" Size="6119" PackHash="8576d3684ee152fc333ab658c801045fbf2ff212" PackOffset="109963" />
<Blob Hash="453bdc531c36cbc6f60e0a0d203fe376b97b5f3c" Size="3641" PackHash="c96e9cd94a86b222bed132142b65c1d90314445d" PackOffset="743642" />
<Blob Hash="453de1080f83b0f81ffedc7f5b9a640a71394109" Size="39185046" PackHash="d51b35f55b82ce39a2c4671b081db889dfc75de7" PackOffset="8" />
<Blob Hash="453ea2556aae37090680cc7ca9a6379f58645925" Size="3907" PackHash="5cb17f3f8319e59e99cf89cdd430848948628eee" PackOffset="2080860" />
<Blob Hash="453fbf44246b592be9a43bbfb9abf2647d279c0e" Size="419" PackHash="d79e2c419c3600937a86cb72ce037d90883f7b4d" PackOffset="1585" />
<Blob Hash="453ff662c84cb1c0a9c14115d2166269a02a5638" Size="264" PackHash="16998ba77a57fa831f8275b32e96edd69f5d8a0f" PackOffset="14627" />
@@ -85384,7 +85382,6 @@
<Blob Hash="4b6fac14a1d46691443e78383f1149e50563f2a1" Size="32696" PackHash="8fd163c1f9dc9bf11ad958c41b095830489b938c" PackOffset="758702" />
<Blob Hash="4b713a8e29aaeeeb93949f74d342a87f3c265365" Size="3363" PackHash="5dbebfe34ab5c28eca7d7b6c57ff41cda029cf64" PackOffset="1131734" />
<Blob Hash="4b7141002d19b28b689a69dea23ace76b44145fa" Size="441368" PackHash="0ecfb87d8907ba6a963b5230ca824ebfb88b2855" PackOffset="8" />
<Blob Hash="4b7326c74a9077e026feacf18aa59daac63f0dd7" Size="666294584" PackHash="d85f88300a8261bff49b4039b693a45a94cd5e1a" PackOffset="8" />
<Blob Hash="4b73af1967b661fab31d3e2036315540ab85044a" Size="2372" PackHash="b6b24cab593e427acd38c261ee202078d3863826" PackOffset="8" />
<Blob Hash="4b74d8e0e231c97a2e1ac5c68541fd3624bfcc43" Size="16776" PackHash="14bc757da872181c2fd4e396e0d2ea26c343d6b5" PackOffset="1697864" />
<Blob Hash="4b765b882e24690326ed064c5a62d840b79af4ee" Size="13" PackHash="ed8660b81bbf13a8cb1fdf7aef3f08f00ad9aaa5" PackOffset="33557" />
@@ -87343,6 +87340,7 @@
<Blob Hash="55f2651e5b548bb894533c1ebdf317124e9808e2" Size="810584" PackHash="711ddb444576be9c5beab7e1c251c03d733be9db" PackOffset="1159296" />
<Blob Hash="55f32b2bceb4f1ee2d0dfab562b3701e52fd7a13" Size="4288" PackHash="ec47a61c9e578fd55eb52d1035235a98b560b026" PackOffset="1493936" />
<Blob Hash="55f71d1af76de655aa0af20477fbfcb65508ff10" Size="22312" PackHash="e3862bb6d8706a54d4bc17153141de98aaf49682" PackOffset="1701576" />
<Blob Hash="55f817940d9d37f302210b82a4f7d9318a8878c9" Size="666400688" PackHash="4649d1f9ec80ca19e1d3b4e1b28c0b608bf8e72c" PackOffset="8" />
<Blob Hash="55fb290d80887e8da7d816ff971210d257dd3d2f" Size="797" PackHash="170084810a00781d5fadc682cb19d61682643e6f" PackOffset="291915" />
<Blob Hash="55fd275166d337f4ace0a9b3f4103a67ed972cff" Size="505" PackHash="27121601acbe7178335d2b27550880f69147f685" PackOffset="1993306" />
<Blob Hash="55fdaec02283bde458d150e604853a415a636198" Size="3136" PackHash="fc72803a9439e161de25108be11e5429ed900f77" PackOffset="275879" />
@@ -87874,6 +87872,7 @@
<Blob Hash="58c8228e2c7fb2f2d6be75f32914f976e2872635" Size="2535" PackHash="7a6fe9c99d5d46d916c7c836c5c38b95826d6600" PackOffset="1080655" />
<Blob Hash="58c84c9a64c55100b9c5344bd79c91d7dd906a37" Size="4169" PackHash="ae87bc596c0972810869ce4ed5c19e21ff2a0819" PackOffset="2046019" />
<Blob Hash="58ca1107acbf735433eeb649ac41023862c99b9f" Size="11488" PackHash="bbd0d366aa5edcf7c89a18c6bcc1c936170ac171" PackOffset="2053155" />
<Blob Hash="58cbdb630bfe1e3171c1142eddda5f554661c8e1" Size="10754" PackHash="e671133b89daac5669a759c8a7127d1dd6406a89" PackOffset="164360" />
<Blob Hash="58ccffec7493dd4a75da5927b6199f1fb04e3833" Size="814364" PackHash="399af8b314c37ce0db04c4000b0fa643a9f42337" PackOffset="1264604" />
<Blob Hash="58ce4fe5843d53b352de28329ca8960b3dc18eb9" Size="136592" PackHash="e2fa2ac520eb51bd27214ee5bf3c3511f0803850" PackOffset="1065332" />
<Blob Hash="58cea20a802c68c981666da9b765426deb6ade21" Size="7261" PackHash="740468294ff5dc113d230e62ae67c145d10bfb6c" PackOffset="467418" />
@@ -91982,6 +91981,7 @@
<Blob Hash="6ee6daf7a8f72268ae7c5c621716a625eb69a416" Size="800" PackHash="4b0f6024494e02f2b2cdd75b48b059c81bde532c" PackOffset="1486321" />
<Blob Hash="6ee8766b1ebf1d0dda5ff95592479e94ccd3db90" Size="1580" PackHash="0a79b68fc843ff09e7eeffe5fafe58c90b6ece69" PackOffset="113768" />
<Blob Hash="6ee955fec6f27ee54c6c231c9c73e92dbbe53f65" Size="140" PackHash="56304ecbe66a10d054956a5d7d80624fec86a588" PackOffset="275079" />
<Blob Hash="6eeae04ca7735363b959c9e0dd7cb034a9e0a181" Size="164352" PackHash="4ba96a08b81a1e1eed87a439da53f26b95bc1979" PackOffset="8" />
<Blob Hash="6eee44dab3b6d1b33780ab03d35894484508267f" Size="6715" PackHash="fc9d37a2c0ab6854c6b039c509d86b9459982472" PackOffset="1213084" />
<Blob Hash="6eeec90785fc863c5d541950560badfa3b8f83d0" Size="38172" PackHash="6b6ea1539e3e10b995b117a201cd14188d7361cf" PackOffset="955034" />
<Blob Hash="6eef8437ae1ce12c9c860e77a7aeac194556b3d7" Size="156" PackHash="bf6ccb8b8cb10a5dfa1a4c6e7c988496d81ee69d" PackOffset="1674050" />
@@ -95004,7 +95004,6 @@
<Blob Hash="7f193f42dce5a55d668e83b50aad249d978375c6" Size="5016" PackHash="80b0abb480cbefe837006e9c68980e8f967a786a" PackOffset="278886" />
<Blob Hash="7f19df0aae65be36d3267940b60c3ca998035cbe" Size="1815" PackHash="a74a1a5121db55028d0a9d281ca2e5d501761af4" PackOffset="178728" />
<Blob Hash="7f1bcd01a313538b9bcdc85025922e325751a969" Size="181761" PackHash="fe9a5ed8a47afc956a08900be2c30c0821faec0d" PackOffset="1902343" />
<Blob Hash="7f1c005cfed023e3cf8ffcb2ae8bf84fa4b879fd" Size="11228" PackHash="7aa13c0fcdcac4f68aa2db32000ebde9c3d580e5" PackOffset="164360" />
<Blob Hash="7f1c383acfd7e13ef70a7be739c62bcc84b0dbfb" Size="934400" PackHash="647fcbc7da8071407056b7362a7420c87cad8e56" PackOffset="572936" />
<Blob Hash="7f1c811c0a6ef4588b0b4be15df2c67c3991433a" Size="244" PackHash="375fc7daadf4e7c57ed3fb499492997b710a6201" PackOffset="1612856" />
<Blob Hash="7f1c9d3c404cdcd6d26ee6d957dd793ba8455c26" Size="81531" PackHash="80b1ed9d73b730ec76f4b9fc8748c1a546beb644" PackOffset="8" />
@@ -98071,7 +98070,6 @@
<Blob Hash="8f89f748f76f96915ed7ecc1281b0c9284cdeffe" Size="2353" PackHash="58f83c3a10f51f7cb6cb19ef5e63fbe761bee904" PackOffset="2091607" />
<Blob Hash="8f8c1090a7276d18292b40f4fc95b8564c631bab" Size="9460" PackHash="2f143d8520d94bbf2cb250b35a8f79e3d3e8572c" PackOffset="189496" />
<Blob Hash="8f8d4485637c2631bd6987ee197b5a1c0d3a0b56" Size="94720" PackHash="a6ec6a3efb598d6f259b71685d63d93ca66e15eb" PackOffset="1832456" />
<Blob Hash="8f8fa2d3d1e7889c340c7bbfebcaa6af6115df54" Size="31154152" PackHash="37d7e003461f3426552689bdc123df6a8b2cbfd9" PackOffset="8" />
<Blob Hash="8f90333771fb71bcf03a02365147571e26279176" Size="69716" PackHash="8f8e30f60cc53500530e08545876ffd9d42e429e" PackOffset="78220" />
<Blob Hash="8f90fa1d874e8bd7d67b3f89d624af05bfe6fb14" Size="38786" PackHash="c9f7bd390be6e2f50469fcf024ace928b624a38d" PackOffset="1455800" />
<Blob Hash="8f93bd9c1ff211d5619b725c58a09e99f77b3e26" Size="4400128" PackHash="3651862ad29305d17e8132a2cc221f0548090547" PackOffset="8" />
@@ -98539,7 +98537,6 @@
<Blob Hash="923105d0123e3db28cc2f2f6aed3b2cbabff69ca" Size="13696" PackHash="f082f646bef50d7c9c7b83a14a16d9214425d916" PackOffset="1804272" />
<Blob Hash="9235a799aae1e9af3037e1166104d7058263242f" Size="3190" PackHash="8212eaa7fe42912eebf1b3693978258b9118178d" PackOffset="8" />
<Blob Hash="9237647e5a7b904586790159ae62e7f68c818123" Size="3987" PackHash="033de564e3140917933e681539fb93930731883e" PackOffset="1691680" />
<Blob Hash="92389ce10491cb33971010d637ae13e9b23b362f" Size="29623808" PackHash="49dd582b38f03b4240c22737ae2bb6d25713167b" PackOffset="8" />
<Blob Hash="923a2c9b8a69b541ecbe5cefd70afb3597f8cd78" Size="735" PackHash="c32457c25492d5aea637db77b43d65c83b449772" PackOffset="2096422" />
<Blob Hash="923a4f9f96510557b33cc01048406f178efdc4cc" Size="82604" PackHash="4ae8e0c422c823810d68402a116d0589ff144eb6" PackOffset="8" />
<Blob Hash="923d66dbc40af01846cb6d186ceb2255da8f8013" Size="116" PackHash="ec47a61c9e578fd55eb52d1035235a98b560b026" PackOffset="407676" />
@@ -98711,6 +98708,7 @@
<Blob Hash="930a6ef2a816e44c2045ed1106a4f1cef44b2140" Size="390" PackHash="dd3879c8412ca5655fecfb160744dc2f1032689a" PackOffset="733315" />
<Blob Hash="930aa68039c1136694e60c6af5535c6c5dd4fff4" Size="1608" PackHash="9753f4d06b8f7a28f9d5ab106a371b8d4fb7e8c4" PackOffset="974211" />
<Blob Hash="930c2109422e13e0f267e3a7d99413e99b413d3b" Size="29392" PackHash="59a22d89e715263368cd4cef014c11cb8f400878" PackOffset="37356" />
<Blob Hash="930d4649900c67e6fa9d12b2dac938270fbb074a" Size="31154152" PackHash="ec24c08817dc976356142d6c961a9422cc8c7d0f" PackOffset="8" />
<Blob Hash="930ff4de7cd6286de6552d4f4f3a550cbfa86fdb" Size="42488" PackHash="95711996c155cadd9d318eadb7345569858bde56" PackOffset="921960" />
<Blob Hash="9310e377c09a7d9d3e72c0c8de909421c5860373" Size="80" PackHash="830cc93f966e96754b4b160b2d5ffbe64678ec80" PackOffset="60712" />
<Blob Hash="93120c063af1f5399b4129137b03fabcafd079b9" Size="7924" PackHash="cca5a69a24718ef21c5a46099acf07d223f787fd" PackOffset="1756773" />
@@ -101430,6 +101428,7 @@
<Blob Hash="a1675fb7f1864f5ce83309f4554c98cb4093f024" Size="112" PackHash="2f143d8520d94bbf2cb250b35a8f79e3d3e8572c" PackOffset="584636" />
<Blob Hash="a168f5e755df6bbd4e1b467b17ed1d420b7f5c21" Size="418" PackHash="c6a87a27121ee980a108fbacde92cb925b2682d0" PackOffset="705605" />
<Blob Hash="a16a4139a3c21be8e98ed64f87ee3f0b77908274" Size="3695" PackHash="80aba82ae1c5a511f4ec1924f8f568af0c128b27" PackOffset="1212200" />
<Blob Hash="a16c0c080d3fcb883222b97642e37af9a578ddef" Size="39170910" PackHash="e5a495f573bb16acffa0dbc2e271e38ec29d532f" PackOffset="8" />
<Blob Hash="a16c45fc94596b31782bf1618f3bd6582a1fd202" Size="2996" PackHash="0255260ee4d81de161e877cdcc3af4d7fcf8d0e3" PackOffset="531032" />
<Blob Hash="a16e5fb69bd1dac27fb75c6e9fb7b6217e340fa7" Size="17996" PackHash="7a8446207acdf4eaf9676898ddacf9bdbf595de9" PackOffset="2075414" />
<Blob Hash="a16ed453c2e901c1e6c7cbf96c0d4cbc4e3cc04c" Size="2948" PackHash="cb73a430e097bac42d93ec902203b7888ed0b681" PackOffset="749093" />
@@ -103143,6 +103142,7 @@
<Blob Hash="aa6e0b957b63b0ea8c3d0a71dc3f596214fa834c" Size="4887936" PackHash="bb2ff670d95b6f8f5534de41999a489c9c8ea3a3" PackOffset="8" />
<Blob Hash="aa70cd28b8ea3ee696c1fbb019902bd58efaeeee" Size="2376" PackHash="95c9f70b2a087fabde73d50408cdf43f650b8559" PackOffset="2005816" />
<Blob Hash="aa70dd2db7b1fc1ecdfa06beab5542736fa8c0b9" Size="104207" PackHash="8e9f4f064b2f6f45f646dd4cf70c44afbf5623e6" PackOffset="1189089" />
<Blob Hash="aa72b1f8e1200a4a04ee97ccf4b18f8dba5c24c1" Size="2064896" PackHash="50392278f55222b70c4344c00ba504500719fa02" PackOffset="8" />
<Blob Hash="aa737af945e8cef1154357808ee8cb9da2bcf4a5" Size="3111" PackHash="eef645665d668dc309bebdc77ca5e0d66043c9e6" PackOffset="833009" />
<Blob Hash="aa76187a6cccbc4308d497e315d90cd8fd5e5012" Size="272" PackHash="bf6ccb8b8cb10a5dfa1a4c6e7c988496d81ee69d" PackOffset="1983376" />
<Blob Hash="aa76c97558ed290511ae96e2dc47da6175b45e1a" Size="2585" PackHash="751f6e9ae8c5b350826d25f093503a32f9686c6c" PackOffset="2092126" />
@@ -103192,7 +103192,6 @@
<Blob Hash="aac16eb9963a7f4ea25eee2a3eb01dfb3b9ddf70" Size="76" PackHash="d2a5fd36db8b15ae3778e1aee34cc6f737b9f2ac" PackOffset="1004088" />
<Blob Hash="aac22ed04fcef902223560c290b8af3e1f769957" Size="1845" PackHash="740468294ff5dc113d230e62ae67c145d10bfb6c" PackOffset="851081" />
<Blob Hash="aac92e06e5cca7d5a3372bca162831b403c66f93" Size="19042" PackHash="fe79883294e7b730b4ea0e6e72c662ced28e999b" PackOffset="368174" />
<Blob Hash="aacb473254ea7ec806cdf46d3d0f2bd7f400b02e" Size="2077184" PackHash="82823c56f9fe709ff72438d70ac36be23982119d" PackOffset="8" />
<Blob Hash="aacb951b10bbfccebccb226139b7119069900953" Size="7972" PackHash="2f143d8520d94bbf2cb250b35a8f79e3d3e8572c" PackOffset="2071400" />
<Blob Hash="aacefdee25914a7c404a3848ee7a98dc5c301d32" Size="34176" PackHash="21ba3122c15b5852897b883c39bf8b73d0d019fe" PackOffset="2023048" />
<Blob Hash="aad02a6294cf50bd1a23b3a9ffa75ba2126385de" Size="179" PackHash="bf6ccb8b8cb10a5dfa1a4c6e7c988496d81ee69d" PackOffset="1681649" />
@@ -104030,6 +104029,7 @@
<Blob Hash="af097405b097a600fd98ea8d05054d5e6511117f" Size="740216" PackHash="3f94c88cc085b9c6c809d07d8959d412e1553a1e" PackOffset="8" />
<Blob Hash="af09f4cd766d2029d121bca99108303ae92259ec" Size="304" PackHash="e458507f455e3bac9232d632426fc4b75f29841d" PackOffset="89424" />
<Blob Hash="af0d3c6e8f6bb8a2eddcc80d7b586827da179cbe" Size="5477" PackHash="bf6ccb8b8cb10a5dfa1a4c6e7c988496d81ee69d" PackOffset="1529274" />
<Blob Hash="af0d8914a68e5266858ff9451b7592e1015d9a92" Size="606456400" PackHash="91e578602ca98128503d5e69a6dfe9107c19b1ee" PackOffset="8" />
<Blob Hash="af0e0e8ea19206cfd09a1f598b2fa524d7531b52" Size="1467" PackHash="740468294ff5dc113d230e62ae67c145d10bfb6c" PackOffset="1994956" />
<Blob Hash="af0f535cc069a370370173c716332f158ad98035" Size="47" PackHash="07a773e8aaad86c7250a3889e41fb294b2d4fd8f" PackOffset="2096900" />
<Blob Hash="af0f944167f5e7c3d4c9de5a73df232fff0ee258" Size="1705" PackHash="625928fb7aba94121088d10c645b360f223ab12b" PackOffset="133083" />
@@ -105107,7 +105107,6 @@
<Blob Hash="b4ff45c1db2df8f07b324921a6a683266cea16a0" Size="14834" PackHash="602db0748724fe66fd5413c09f2b1f9cee4a3443" PackOffset="2047962" />
<Blob Hash="b50171f7173de6d66370e1582c6c9de9f1f789fe" Size="29984" PackHash="184d7313d2086bd45716906ab09f584ae6de8dd7" PackOffset="333256" />
<Blob Hash="b501e114833f86199c4e034958f82cff5ee199d0" Size="7358" PackHash="6a467413108651fd3be147f1f2cfbe29d032267c" PackOffset="2086625" />
<Blob Hash="b502146adccc4b726641f37c1f2d0a06ea270f2e" Size="3900560" PackHash="ba4f0a0c0d70197ccd162a8cf0565572d1553565" PackOffset="8" />
<Blob Hash="b502ddc15cfd67cb6518a89af7c03c0a63ff0e26" Size="196" PackHash="c6a87a27121ee980a108fbacde92cb925b2682d0" PackOffset="1908067" />
<Blob Hash="b504120990a654a5f6ce6dc5afc5a4b8c40525f0" Size="6359" PackHash="6e4f2760b5d09171b1caf834191e8eff91e09092" PackOffset="1889716" />
<Blob Hash="b50546d543a9c4532acc1260f5e100a9c18ccd55" Size="11142" PackHash="1ef50973202d367bcb5af25e0aa2b66e166d928d" PackOffset="1026434" />
@@ -105701,7 +105700,6 @@
<Blob Hash="b83ef3c5417b231a50c10791eec3ce1e0cbbb514" Size="9111" PackHash="740468294ff5dc113d230e62ae67c145d10bfb6c" PackOffset="1699119" />
<Blob Hash="b840321af0629a33f572c949f842c7955a59714a" Size="2926" PackHash="4f9629d19fa7928aaae10e4bb7c79195fb4f2436" PackOffset="87843" />
<Blob Hash="b8420194106d42fa469266d99daf58214889f53c" Size="15" PackHash="2448efda7650f275c69264ac43cdb4793f046dc3" PackOffset="2096326" />
<Blob Hash="b8435799bf903deec580049ca9283700d43622be" Size="606456308" PackHash="be59481dbb2a64a6a01fc599a1abfaa8f92c5903" PackOffset="8" />
<Blob Hash="b8443ced7b4784abe9b888e5fe7bda2295a3f010" Size="164698" PackHash="bda43ee65b03809e07aab62b837a3a07b33b0b11" PackOffset="491171" />
<Blob Hash="b846979390ed3c62aa1f332323602c02e7975bd0" Size="1580" PackHash="5cb17f3f8319e59e99cf89cdd430848948628eee" PackOffset="838632" />
<Blob Hash="b8478a9545507c048ae638d64d7a58dfde68d954" Size="51072" PackHash="f0c9b160ca6f10cfe0738f83528f8a9fcf4e6a8a" PackOffset="1239776" />
@@ -107062,7 +107060,6 @@
<Blob Hash="bfa0e27be1d56ba48918a9b7ca7090af7779a10e" Size="21192" PackHash="a2710772cf46bb6041ccd01ef68d73bf51c3cdc6" PackOffset="515968" />
<Blob Hash="bfa174e2d5c861e4dc0a537079b68e3675c15e2e" Size="7656" PackHash="c9f7bd390be6e2f50469fcf024ace928b624a38d" PackOffset="2030443" />
<Blob Hash="bfa177196ccbb52c7e8e7738dd246671ecae6353" Size="136" PackHash="830cc93f966e96754b4b160b2d5ffbe64678ec80" PackOffset="1143104" />
<Blob Hash="bfa1f347635cec806e19d44b5a49ffd01660da3e" Size="4143104" PackHash="921d84097fb9682f393648c2dbe0055056edb6fd" PackOffset="8" />
<Blob Hash="bfa3fe017bc6580327da5929ccc8a9ff4f77e942" Size="988" PackHash="375fc7daadf4e7c57ed3fb499492997b710a6201" PackOffset="1396292" />
<Blob Hash="bfa72c43bce0f37f795e974457fbe4a664687b38" Size="11248" PackHash="9ecde5d682a1fb9ca9bd5c995228d226cdb13860" PackOffset="1367038" />
<Blob Hash="bfa79bcb023e9fd827725d5373b6350e2bffda5a" Size="24928" PackHash="ec47a61c9e578fd55eb52d1035235a98b560b026" PackOffset="1980108" />
@@ -107343,6 +107340,7 @@
<Blob Hash="c142e25da9dbfd4cae1e64b3272ce380cdb7c760" Size="1714774" PackHash="60553aa9d00c3f2c0245ad446fca02a1c7b92962" PackOffset="8" />
<Blob Hash="c14347b11dcaaead16f9542c00d92db52cbe3e8b" Size="1577" PackHash="f9b9adede9a3330b968a0106f6160c829b65f2c3" PackOffset="33313" />
<Blob Hash="c1454ea58a52a29d0c3ae20b27d660d764aff77e" Size="4096" PackHash="d4b6bc525135e5f3997bc740127b9f8e5a064369" PackOffset="1396567" />
<Blob Hash="c1467d12d080fc3e7bf5060c84e76723cfc0816a" Size="3899800" PackHash="bd3373ec870550c413357cdc338798d8ddfff8d1" PackOffset="8" />
<Blob Hash="c1478576549bbaf4b38e496e605b2d73f6bb5847" Size="47" PackHash="4b0f6024494e02f2b2cdd75b48b059c81bde532c" PackOffset="578085" />
<Blob Hash="c148061008d651345a98cf0e891b33673ca94b9f" Size="15979" PackHash="6b6ea1539e3e10b995b117a201cd14188d7361cf" PackOffset="1727217" />
<Blob Hash="c148e573e8eff9734960b7c77e1cc51dbd19823e" Size="242" PackHash="575f74dfa9bbf700cb7b7a9af0f84b38e9990298" PackOffset="1004835" />
@@ -109698,6 +109696,7 @@
<Blob Hash="cd8d15f9f3459b43e136cc624b282a91305fb12e" Size="955" PackHash="afc5cb40d4e6c77d1775d83fce7636691d3fa748" PackOffset="685380" />
<Blob Hash="cd942555047c2bdea5d6184c02fd9a32490a17f9" Size="104" PackHash="efd73054c096cd4a5bc1ba2dbe16349a22f5f682" PackOffset="1622008" />
<Blob Hash="cd98de5a2f53123765954df204d96fadb4bc40ec" Size="2138" PackHash="7ca0e1410f00142dc9791ff1fb493669e443f644" PackOffset="819884" />
<Blob Hash="cd9971c48e67dd48c987a747cf4cd248a5ed3d93" Size="4129280" PackHash="3f7ad7069820f73d3fcb7dd3856da274f89062f3" PackOffset="8" />
<Blob Hash="cd9982bf23637884b9470211e671627fec04d55e" Size="315" PackHash="6974b9c6f99dd329465ca79c60ac6eebd6d448a5" PackOffset="437310" />
<Blob Hash="cd9c48bf32419bacdbcbf2065fc0228181abe80e" Size="2871" PackHash="5dbebfe34ab5c28eca7d7b6c57ff41cda029cf64" PackOffset="1002552" />
<Blob Hash="cd9d7fa2c3016282d31817b667c32ea7f844644b" Size="2530" PackHash="4ec97c61a133dc738ece2dd302e72269fbe285fa" PackOffset="2082824" />
@@ -113622,6 +113621,7 @@
<Blob Hash="e26911742fd4d397d2b7a4044fd6fda122550e6b" Size="12620" PackHash="b0bf59a9706561efcf54302bd733c03cc1bc5a78" PackOffset="145768" />
<Blob Hash="e26b177ff65926077e2087b4a682e5ed5bfed6da" Size="1580" PackHash="0a79b68fc843ff09e7eeffe5fafe58c90b6ece69" PackOffset="480328" />
<Blob Hash="e26f7a4d6fd0917caf34b77ba062d7999a439c5f" Size="10496" PackHash="dfc1e61f7c15ebc64562b0fe940440d5393205b8" PackOffset="956488" />
<Blob Hash="e27076cc725d18cf17d6912d3e7011c34ea972d5" Size="29624832" PackHash="192e6fffefeabd8817028d9934010e5598b1e361" PackOffset="8" />
<Blob Hash="e273949e7ee86a808bc7bb61b22bc96f32d2a47e" Size="3744" PackHash="c42b81378cff6ce0c7ef08835d2b480eefb9aac2" PackOffset="2076961" />
<Blob Hash="e273a301798cf9dc6b119aa15c93b4f7159ab8b3" Size="3689" PackHash="09365257939c24c4ae90b87ab72c645dfb299d72" PackOffset="1984366" />
<Blob Hash="e2743a58a8f1f636700f29c38ceb2603df9ae8e9" Size="32" PackHash="40a36bc9a21ed94016841bdb84eed7520b3255cc" PackOffset="1998905" />
@@ -119565,6 +119565,7 @@
<Pack Hash="191b967194579a3d4480b6cb6caf4e9540352d14" Size="10498472" CompressedSize="4521319" RemotePath="UnrealEngine-15635368" />
<Pack Hash="192ac3ddc122e77ccdfe7ea37e7b13db9e3155f6" Size="2086714" CompressedSize="470786" RemotePath="UnrealEngine-12345764-dd7122f3457a44758911a48976a14ddd" />
<Pack Hash="192c36d310b45029e1af5607bed97fb7c30b58c7" Size="2612254" CompressedSize="777535" RemotePath="UnrealEngine-3720923-5712cc719d4541ffbfdee6e387fdb8bb" />
<Pack Hash="192e6fffefeabd8817028d9934010e5598b1e361" Size="29624840" CompressedSize="10251484" RemotePath="UnrealEngine-16186169" />
<Pack Hash="193cd841dffea8ff5dbaf7781e36acb296b514c0" Size="2096985" CompressedSize="601514" RemotePath="UnrealEngine-12695928-ec5fb939b8a04dd2978f85c4a8255d95" />
<Pack Hash="1948ce50aa9b2dd9ccf26399c5355f29ef1c4824" Size="37447" CompressedSize="10261" RemotePath="UnrealEngine-14983761" />
<Pack Hash="195c11b04e6c4ebb8aeb4f7eaed712a18b8739a9" Size="2050602" CompressedSize="1800595" RemotePath="UnrealEngine-3665845-2db6f4cd59fc4db5985e58a4d96277a6" />
@@ -120108,7 +120109,6 @@
<Pack Hash="37c7a2925941d8b74f030d4a1978210022b11a01" Size="1985544" CompressedSize="364303" RemotePath="UnrealEngine-13614362-bb5cf6735987400cbe6c7728fa2c86c5" />
<Pack Hash="37d13f95d1f995b7c4635febde5b2104feefe929" Size="2097041" CompressedSize="418189" RemotePath="UnrealEngine-14728910-e7ed50e7eee14782807a430e8df9e331" />
<Pack Hash="37d53ef2d0df2faafab7c7c67a0c9d2b14c5d9e3" Size="1929460" CompressedSize="525154" RemotePath="UnrealEngine-7235308-3ea1d61ea5264fd9a0aba5ac630f4e2a" />
<Pack Hash="37d7e003461f3426552689bdc123df6a8b2cbfd9" Size="31154160" CompressedSize="10146866" RemotePath="UnrealEngine-16098805" />
<Pack Hash="37e4190607726e6ba810a226650d3941bf9f35bd" Size="2094960" CompressedSize="864304" RemotePath="UnrealEngine-14689227" />
<Pack Hash="37f051c48cfda32278f56274d237069423f3dbcd" Size="793171" CompressedSize="371798" RemotePath="UnrealEngine-14563826-6120a0588fe34e0286b7c294261d5e0a" />
<Pack Hash="380ee07407a7cd58dff0a44da1e427539850169e" Size="12507592" CompressedSize="4357208" RemotePath="UnrealEngine-14573744-dc9ec2a9428249708f92b3341d5ccca3" />
@@ -120253,6 +120253,7 @@
<Pack Hash="3f4cbf00af0438c956f74f514929e02e3e8d43bc" Size="6357512" CompressedSize="6357730" RemotePath="2616691-982be94b99b442419e99de37630ca843" />
<Pack Hash="3f6589a4d96334ab9e80c7809eca8064d188ec6e" Size="2095447" CompressedSize="1694602" RemotePath="2943240-c2a9d38c57e7438db3f8ee61341bdcec" />
<Pack Hash="3f75f49ccfcf87ae2a3bcc2a68cf49fb510ada09" Size="6462272" CompressedSize="2645148" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="3f7ad7069820f73d3fcb7dd3856da274f89062f3" Size="4129288" CompressedSize="1586372" RemotePath="UnrealEngine-16186169" />
<Pack Hash="3f897a66cf89084b498e413fadcfc7d9d5498917" Size="9433523" CompressedSize="9383851" RemotePath="UnrealEngine-6077015-cc78245e96c244c98cc27c8e8d667639" />
<Pack Hash="3f8a11dc1cc78565bafe247c10d7898ffb7d128d" Size="3967708" CompressedSize="1514695" RemotePath="3379345-1a4949fdb1ce4fd18339fec7c4e85c06" />
<Pack Hash="3f94c88cc085b9c6c809d07d8959d412e1553a1e" Size="2095944" CompressedSize="904302" RemotePath="UnrealEngine-14689227" />
@@ -120375,6 +120376,7 @@
<Pack Hash="4611458a53f888f3f6ddf8748a28d5fb829bfde3" Size="116205192" CompressedSize="28589701" RemotePath="UnrealEngine-14885582-734c7ec6587a42c8bca0afdbc35f8ef0" />
<Pack Hash="461df1c3bd49364d769da208f69a99c0c5e7760d" Size="709" CompressedSize="367" RemotePath="UnrealEngine-15948269" />
<Pack Hash="463c47839b132e9e92cba91e93c1123c4ce11b57" Size="2097154" CompressedSize="1998860" RemotePath="2937058-0f6110266df14ff29898e518624a1ecc" />
<Pack Hash="4649d1f9ec80ca19e1d3b4e1b28c0b608bf8e72c" Size="666400696" CompressedSize="190522058" RemotePath="UnrealEngine-16186169" />
<Pack Hash="464ef1b9360a0ab8c7c54c424cf2adfce4bb3c4b" Size="4540966" CompressedSize="552985" RemotePath="UnrealEngine-16060699" />
<Pack Hash="46519458ef900c77b2d5a6537b6c5ba962034911" Size="9739834" CompressedSize="1999769" RemotePath="UnrealEngine-8512965-dfe7d877969a41449c51dc791873402d" />
<Pack Hash="4653f71982a36f99d16331bbaebded3036eff50f" Size="2097146" CompressedSize="2059502" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
@@ -120441,7 +120443,6 @@
<Pack Hash="49bd4966c6ed797aab9323bd85f83acc632fbdec" Size="2085908" CompressedSize="2072872" RemotePath="UnrealEngine-14323288-84477a83e8cd4032a90f54c441aeba9b" />
<Pack Hash="49ca88b5b319bc0e8776ecef484e881fe59f22dc" Size="20321288" CompressedSize="6676427" RemotePath="3357449-09c4f579676d488ba551dba9f0fc3bc4" />
<Pack Hash="49d7eaf76b4f243057c59f3fda3310c655144a0e" Size="2097149" CompressedSize="2023096" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="49dd582b38f03b4240c22737ae2bb6d25713167b" Size="29623816" CompressedSize="10226863" RemotePath="UnrealEngine-16098805" />
<Pack Hash="49fb2fc446be766da821aa5d8d90fd86635a533e" Size="981397" CompressedSize="132498" RemotePath="UnrealEngine-15436771" />
<Pack Hash="4a1648bcb0a8ce59961b2c251a7046c1d43132e8" Size="1982637" CompressedSize="578451" RemotePath="UnrealEngine-14904776-c5a59c6ac6b9463aba5327e2d979359a" />
<Pack Hash="4a25e4817993f291da96d37a010005e4840a1e08" Size="1475575" CompressedSize="488215" RemotePath="UnrealEngine-12639888-396c3bb32c2a41c38bb5b7bdc0db1c17" />
@@ -120477,6 +120478,7 @@
<Pack Hash="4b8c0c6b48b2eb66f88a0295eca07439ea73d93f" Size="2335104" CompressedSize="952062" RemotePath="3379345-1a4949fdb1ce4fd18339fec7c4e85c06" />
<Pack Hash="4b912deb20804c4fcc58481a8d5517ad20b6af5b" Size="7789576" CompressedSize="2035589" RemotePath="2959226-1c0c786bb6a24aa1b5bd879cce117081" />
<Pack Hash="4ba7bd51b92bbbea7f47cede7dccb18ed74c4da9" Size="2097148" CompressedSize="2060539" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="4ba96a08b81a1e1eed87a439da53f26b95bc1979" Size="164360" CompressedSize="70017" RemotePath="UnrealEngine-16186169" />
<Pack Hash="4bb38d491f2b2742e04e10e06fe8210f50b3dbb9" Size="16077296" CompressedSize="6196178" RemotePath="UnrealEngine-6550956-1c306f258fd64028a871dd92ab6159f3" />
<Pack Hash="4bb528c4f5eb8ac3294efaca21007471c8a1508c" Size="2094042" CompressedSize="1744164" RemotePath="UnrealEngine-15741166" />
<Pack Hash="4bb6b75cb6e9f6176e172a97be29828c22c435f5" Size="752731" CompressedSize="165028" RemotePath="UnrealEngine-13885276-e1a0731479f3431293b8ea59cc90c662" />
@@ -120569,6 +120571,7 @@
<Pack Hash="4fe4df8201f5dcd65ceaf2f0460de0aa28c23843" Size="3262128" CompressedSize="1070490" RemotePath="UnrealEngine-16056428" />
<Pack Hash="4ff3caa47af07ea9d5572d575589a55b18ba4401" Size="149748" CompressedSize="28880" RemotePath="UnrealEngine-14539451-824d52611eb54236b0d64b1939d82858" />
<Pack Hash="500d8fbd7f26a0588deea0687abf1167a6e33f1b" Size="2530402" CompressedSize="529221" RemotePath="UnrealEngine-5711189-90391b3014da455db2b422c11a5e1a10" />
<Pack Hash="50392278f55222b70c4344c00ba504500719fa02" Size="2064904" CompressedSize="594433" RemotePath="UnrealEngine-15978123" />
<Pack Hash="504c0a6da5f49d4bcd18f11ee59db45e32d6c143" Size="2092791" CompressedSize="1536000" RemotePath="2656980-c015aab7e6de49c3934683485cd56429" />
<Pack Hash="508c81cc7438fb6522fec3a4e24a23a3428dd7b4" Size="3283856" CompressedSize="1147882" RemotePath="UnrealEngine-14445373" />
<Pack Hash="508e8154479bb81150de133cb56dd635fb05de14" Size="2056819" CompressedSize="144197" RemotePath="UnrealEngine-14448996-2eb60521abc842a7b14a9b0ef0a02b1e" />
@@ -121347,7 +121350,6 @@
<Pack Hash="7a8080359c039bde96fcbd9313cca1cba27e4c86" Size="74874000" CompressedSize="16971872" RemotePath="UnrealEngine-15836085" />
<Pack Hash="7a8446207acdf4eaf9676898ddacf9bdbf595de9" Size="2097115" CompressedSize="2069239" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="7a92e7999c118d3d11bbc26282e8bc420c5f89d4" Size="1412511" CompressedSize="1217834" RemotePath="UnrealEngine-4149775-4f459591652d4523b92d8a4be600997d" />
<Pack Hash="7aa13c0fcdcac4f68aa2db32000ebde9c3d580e5" Size="175588" CompressedSize="71501" RemotePath="UnrealEngine-16098805" />
<Pack Hash="7abcfd36a7f02b075eee065ffd47d76fdf48bf61" Size="2097130" CompressedSize="717021" RemotePath="UnrealEngine-3851379-9574459699d54a468d422fafe2380ede" />
<Pack Hash="7acbc36743e7750c989dd6b0024764009f198f7d" Size="2094728" CompressedSize="1916342" RemotePath="UnrealEngine-15741166" />
<Pack Hash="7ae38239e565d82c09561cab47be28f6397f06b2" Size="188" CompressedSize="197" RemotePath="UnrealEngine-10855098-f1f6d595c6234bc59fefc0c82ff9f720" />
@@ -121490,7 +121492,6 @@
<Pack Hash="82648ae9fbcaf58b64ce7fac5b8b470d908f4ceb" Size="2681398" CompressedSize="818163" RemotePath="UnrealEngine-7312987-0ad2049677f34445af16c2d8fca0dc3c" />
<Pack Hash="826e566c4fb8202c68522f87a938d812912157e5" Size="2096186" CompressedSize="2094061" RemotePath="UnrealEngine-9954827-b7c45323c9f34d9abe0bddc50d4c769c" />
<Pack Hash="8276b8a224a461f082c21d1091311a41d4330fab" Size="2096648" CompressedSize="1150407" RemotePath="UnrealEngine-14641038" />
<Pack Hash="82823c56f9fe709ff72438d70ac36be23982119d" Size="2077192" CompressedSize="598650" RemotePath="UnrealEngine-16098805" />
<Pack Hash="82b62aece92bf448ebb5d9461ffdf057ede6f29c" Size="3181788" CompressedSize="3180899" RemotePath="UnrealEngine-15741166" />
<Pack Hash="82c2bc34d0183299b8e58fbd5ffa54096d81201f" Size="4461458" CompressedSize="4460993" RemotePath="UnrealEngine-9420574-738cb264e193473ba730e0cfc0a3e1bd" />
<Pack Hash="82cb21b227e582936389d89d9046bc819223c778" Size="1738793" CompressedSize="271599" RemotePath="UnrealEngine-12693651-847f74a7ed3946708a6c6b3241cad87d" />
@@ -121764,8 +121765,8 @@
<Pack Hash="91bc8b5792b46eb9ed342c026f0518ce0c432ad2" Size="24798" CompressedSize="6472" RemotePath="UnrealEngine-14691342-f26b92c2d44a498dbf4ab02dbaba53fd" />
<Pack Hash="91c479c44c7f55cc1d511befe2b33e210582ac08" Size="5698940" CompressedSize="1614311" RemotePath="UnrealEngine-15901317" />
<Pack Hash="91e50c3b361a61191bea5120e084ca47af848a03" Size="1586296" CompressedSize="467536" RemotePath="UnrealEngine-6960242-9676469577454cfb88111175cb9c2bf5" />
<Pack Hash="91e578602ca98128503d5e69a6dfe9107c19b1ee" Size="606456408" CompressedSize="159909469" RemotePath="UnrealEngine-16186169" />
<Pack Hash="9211a63f19ba96a016d545bb413a6e2077917d23" Size="240582" CompressedSize="176001" RemotePath="UnrealEngine-15669913" />
<Pack Hash="921d84097fb9682f393648c2dbe0055056edb6fd" Size="4143112" CompressedSize="1590289" RemotePath="UnrealEngine-16098805" />
<Pack Hash="921fbfa65d6eb0d681fd36a0e1c5b456ba0a25c4" Size="56153" CompressedSize="13259" RemotePath="UnrealEngine-14412921-38990816a81f415c9aec8bc6e261d55b" />
<Pack Hash="92264046926dbcf1c60be703935611cac5122762" Size="2097138" CompressedSize="819987" RemotePath="UnrealEngine-7235151-e146c7734bc34f90b913cd9df5ae476f" />
<Pack Hash="9234e57d7b61e4ba158d3a66762e647b3914b587" Size="2352000" CompressedSize="693763" RemotePath="UnrealEngine-6654056-657e01ec03a04bd4b0894946198ba2e1" />
@@ -122478,7 +122479,6 @@
<Pack Hash="ba148d72aae2fe049cb85188ca66d39f39d61aa7" Size="7506824" CompressedSize="1865216" RemotePath="UnrealEngine-12372358-6ad1aa6e82dd46b6b809750a9e8e1e65" />
<Pack Hash="ba2d9ded971802bdf3986013b08817182ae8e101" Size="2094802" CompressedSize="753145" RemotePath="UnrealEngine-10885572-2d7ca69a78634a22ae4885a23eeeb190" />
<Pack Hash="ba47d77dd6ce1abb3dd8d2f92b348fcdaa96b6af" Size="7135776" CompressedSize="2609267" RemotePath="UnrealEngine-6858184-d0bca3f2f2944dfca240ca56e782ef70" />
<Pack Hash="ba4f0a0c0d70197ccd162a8cf0565572d1553565" Size="3900568" CompressedSize="1099638" RemotePath="UnrealEngine-16098805" />
<Pack Hash="ba59a62dae63fc2d143e0cf4c7c65185055b6cfc" Size="2097155" CompressedSize="641097" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="ba61a4144971a4cd6030491ccfc914599b7ff127" Size="7019936" CompressedSize="1954530" RemotePath="UnrealEngine-15635368" />
<Pack Hash="ba6727b717bd4b698cdc46d88737dfc58c7d0871" Size="2095277" CompressedSize="590393" RemotePath="UnrealEngine-15946789" />
@@ -122535,6 +122535,7 @@
<Pack Hash="bd18e5026039f0929d20b69206d04e4989d3d8e4" Size="7166392" CompressedSize="2506920" RemotePath="UnrealEngine-11588050-b4cf6edf1faa41af9fbd96d0f62325a9" />
<Pack Hash="bd1d6bfd4c9d2a48d97a6081583d6a276241b465" Size="18823" CompressedSize="5171" RemotePath="UnrealEngine-4467704-d5140b4a21c94626a33d25d3c05d09ab" />
<Pack Hash="bd25e033badf2f5ccc6c3f3d7d91ad64f8011401" Size="3046728" CompressedSize="1075774" RemotePath="UnrealEngine-4275973-72ff8320bef14ccb95425cb871c10376" />
<Pack Hash="bd3373ec870550c413357cdc338798d8ddfff8d1" Size="3899808" CompressedSize="1098958" RemotePath="UnrealEngine-16186169" />
<Pack Hash="bd3d734af2cffb17381ff98361d85e9166a3cf26" Size="2485216" CompressedSize="583517" RemotePath="UnrealEngine-6654056-657e01ec03a04bd4b0894946198ba2e1" />
<Pack Hash="bd3eb70a6e8e06013406a11237e86bd18b2fe38b" Size="16243" CompressedSize="4175" RemotePath="UnrealEngine-3590156-de6bc7d13617494db609c5ab21d679bf" />
<Pack Hash="bd3fcc8eb43ffa8de8fb767422022deeb782b05f" Size="2095280" CompressedSize="1460131" RemotePath="UnrealEngine-15635368" />
@@ -122554,7 +122555,6 @@
<Pack Hash="be2fe35dd46b3f9d11384aa53a4ee610e0dbed87" Size="2710480" CompressedSize="828520" RemotePath="UnrealEngine-4230863-392cf2ad192447589d7851be27c5bdfb" />
<Pack Hash="be34e7f56d991b989eb2e474a5ec6434382dee3b" Size="3263" CompressedSize="3286" RemotePath="UnrealEngine-8747220-5f435db6b16e45a290eea287a946ea8b" />
<Pack Hash="be4768b67a246ceb3ad6975787f6f784bc2510a5" Size="15775752" CompressedSize="6441890" RemotePath="UnrealEngine-14445373" />
<Pack Hash="be59481dbb2a64a6a01fc599a1abfaa8f92c5903" Size="606456316" CompressedSize="159906078" RemotePath="UnrealEngine-16098805" />
<Pack Hash="be816bb10d5bf7a9912bf27863fd0c892d4ba5b5" Size="182150536" CompressedSize="39680163" RemotePath="UnrealEngine-15836085" />
<Pack Hash="be8c418c6c2cd699e4f4a30c2250228b9f623727" Size="2096224" CompressedSize="1452182" RemotePath="3226598-a942cefcafa14264ac608ce1535f9731" />
<Pack Hash="be8c79c4a34df2ac1fb05c9b8379747cd4a2fba1" Size="1625812" CompressedSize="354556" RemotePath="UnrealEngine-11541251-6f66a97cd7674bba9c72b982c6a960c1" />
@@ -122911,6 +122911,7 @@
<Pack Hash="d0a262143cc00cf6affe748b7f4b05119594baf0" Size="5454680" CompressedSize="2874889" RemotePath="3020245-ac585a3d7e1b4b7da88b690a32e1ee82" />
<Pack Hash="d0ade28dadb4d60ab86f8da7688d027bbd6f364f" Size="408488" CompressedSize="64997" RemotePath="UnrealEngine-14506467-0461b0a87ed3422ba08ddb03ce594320" />
<Pack Hash="d0e70f2ac972a06175ec11c475e2326a4d0432bd" Size="6197113" CompressedSize="575576" RemotePath="UnrealEngine-15409908" />
<Pack Hash="d0ec82ea726432b81fc64641a132b0cf896e32af" Size="39916112" CompressedSize="7588559" RemotePath="UnrealEngine-16186169" />
<Pack Hash="d0f6841bbcc6d991e0a20ddfa93ed294221e10e2" Size="2343288" CompressedSize="275310" RemotePath="UnrealEngine-16091036" />
<Pack Hash="d111d246a5dff2d0eed94cb2592bfe277ad9e0ea" Size="6498522" CompressedSize="1613053" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="d119212fd40a7e5b5b065826c991a7df94aa9888" Size="1290" CompressedSize="688" RemotePath="UnrealEngine-6100736-d53d7e0a15104370b318cccd686b3be7" />
@@ -122992,7 +122993,6 @@
<Pack Hash="d4f5183f0b0dbcdd750144216c988e4227831fee" Size="2094600" CompressedSize="991792" RemotePath="UnrealEngine-14445373" />
<Pack Hash="d4fa42896200166ae744675552eff8501cb1becf" Size="5078112" CompressedSize="1930335" RemotePath="UnrealEngine-6550419-5b15c7c1f0a44c4f83c440737d93b283" />
<Pack Hash="d51260d1ef0025bd3b93b2c7b00ff5340b0c8cbb" Size="1709650" CompressedSize="666334" RemotePath="UnrealEngine-16036076" />
<Pack Hash="d51b35f55b82ce39a2c4671b081db889dfc75de7" Size="39185054" CompressedSize="7809812" RemotePath="UnrealEngine-16098805" />
<Pack Hash="d52390dbb691d4e6a77292998b1af87bbc636aaf" Size="1770393" CompressedSize="747528" RemotePath="UnrealEngine-4508974-a785f129cd624979915a561b5d4e8e7c" />
<Pack Hash="d5300790dac3cc619f89851b34f424d123202d88" Size="551589" CompressedSize="494005" RemotePath="UnrealEngine-3503486-1d5f9328de214edda653a39de04f2a9b" />
<Pack Hash="d547e6d9d37c80e6d1887468170119f4a1ba9f22" Size="9440844" CompressedSize="1401417" RemotePath="UnrealEngine-15805898" />
@@ -123045,7 +123045,6 @@
<Pack Hash="d842c3b28220aed92b0167198fc1f0bb77121d72" Size="1625967" CompressedSize="316513" RemotePath="UnrealEngine-14414263-578790395e4f444594ad50923227ca64" />
<Pack Hash="d852eca7663f1c36dab87cbd527dbfac895faf97" Size="2097157" CompressedSize="2081114" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="d857deb21bc78fed5755ba3d3f25c20788ac47c4" Size="4715862" CompressedSize="1091231" RemotePath="UnrealEngine-15836085" />
<Pack Hash="d85f88300a8261bff49b4039b693a45a94cd5e1a" Size="666294592" CompressedSize="190505076" RemotePath="UnrealEngine-15978123" />
<Pack Hash="d860db4d3ddd2fb2b1c7f3379cffcb5ad6dd1985" Size="13626112" CompressedSize="2152136" RemotePath="UnrealEngine-11555526-7ef0cce9fd8948b9a5ed55430703db86" />
<Pack Hash="d889e4d65d962a36e5839fedc6a70a00ac10fafd" Size="4343852" CompressedSize="2387949" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="d88e99fae972e69a1a5898bae776c89b2469d693" Size="4736126" CompressedSize="818765" RemotePath="UnrealEngine-5711189-90391b3014da455db2b422c11a5e1a10" />
@@ -123275,6 +123274,7 @@
<Pack Hash="e5927ece61f410f0e3e7cf2ce02b3ef3ba6cda4f" Size="2164460" CompressedSize="166362" RemotePath="UnrealEngine-9374448-381b5d8df45d4910a0022f8ec25be38a" />
<Pack Hash="e592b9d24af543c311a6499d73973ee8283edfdb" Size="2097104" CompressedSize="866799" RemotePath="UnrealEngine-14445373" />
<Pack Hash="e59e437ea2d70a8f56859860672903e5002e4925" Size="2097111" CompressedSize="461799" RemotePath="2636758-e606e606851e4693b1729dd35dcef7ae" />
<Pack Hash="e5a495f573bb16acffa0dbc2e271e38ec29d532f" Size="39170918" CompressedSize="7804724" RemotePath="UnrealEngine-16186169" />
<Pack Hash="e5bfba5fe3cce40159df51e1915e3c209ffbc5e2" Size="6413750" CompressedSize="1532614" RemotePath="UnrealEngine-15901317" />
<Pack Hash="e5cdcd6e137f76c62b086ae9202f4baadd2fcf12" Size="2093064" CompressedSize="819553" RemotePath="UnrealEngine-14689227" />
<Pack Hash="e5ddfdb1be8a742ba96cc556a8949919239c5e49" Size="1793922" CompressedSize="517779" RemotePath="UnrealEngine-7235308-3ea1d61ea5264fd9a0aba5ac630f4e2a" />
@@ -123290,6 +123290,7 @@
<Pack Hash="e64cbb8d1cc1a0a266ac356a05219219cf801326" Size="331132" CompressedSize="268059" RemotePath="UnrealEngine-14665888-8fe682e59e3d42a5a8ded3398982465f" />
<Pack Hash="e654390713668de0b68a38a99c52a4c931bc8a23" Size="1635046" CompressedSize="469831" RemotePath="UnrealEngine-15087116-0623fb31a75b455496d28992537ac145" />
<Pack Hash="e66d21ec4939ebcbd3babcae7230420591365d83" Size="15836362" CompressedSize="47317" RemotePath="3362661-c42b75bbdfa5405597d5cca909cf2e91" />
<Pack Hash="e671133b89daac5669a759c8a7127d1dd6406a89" Size="175114" CompressedSize="71535" RemotePath="UnrealEngine-15850443" />
<Pack Hash="e679512d14770bc7167ae6ad5aeae4866c09b29f" Size="1717883" CompressedSize="488612" RemotePath="UnrealEngine-15628105" />
<Pack Hash="e6832f4862e32ba6d233f8751ae36937f2889e5b" Size="2120" CompressedSize="1381" RemotePath="UnrealEngine-13762337" />
<Pack Hash="e6853b4df1e2c2928dbc2d71602a0d78eb449fc9" Size="5428620" CompressedSize="1990601" RemotePath="UnrealEngine-14659620-696b798fed1e4fc48e48bccfc5ac5bd4" />
@@ -123402,6 +123403,7 @@
<Pack Hash="ec16dff36969ff2631eacf8731fb117ebd796c3d" Size="9666712" CompressedSize="4177333" RemotePath="UnrealEngine-14481336" />
<Pack Hash="ec176452749f5ab812e9c42f3f784b343f659ef5" Size="245258" CompressedSize="31210" RemotePath="UnrealEngine-15876750" />
<Pack Hash="ec198df1281435d9fb64b809439ba8cd3420cbeb" Size="651478" CompressedSize="100105" RemotePath="UnrealEngine-14771425-1593035ea4e84a6f92d9455ae0d9ed3d" />
<Pack Hash="ec24c08817dc976356142d6c961a9422cc8c7d0f" Size="31154160" CompressedSize="10147020" RemotePath="UnrealEngine-16186169" />
<Pack Hash="ec364bc2aa3967380e541a8081d292d5c4971eae" Size="1556308" CompressedSize="233542" RemotePath="UnrealEngine-14485895-3a14137c92a641cd9e3140f7b8b593d8" />
<Pack Hash="ec3ea962fc2e8f0577a58fede5db358e8e024aa0" Size="1889483" CompressedSize="208406" RemotePath="UnrealEngine-16062885" />
<Pack Hash="ec43681668e17eb8fcd6134b4f0f102266626db8" Size="2083357" CompressedSize="508928" RemotePath="UnrealEngine-15198989" />
@@ -123501,7 +123503,6 @@
<Pack Hash="f13164dc2af82892acb7b9d5631c8b53aa4cc4a4" Size="1895407" CompressedSize="1874601" RemotePath="UnrealEngine-13780982-81329c2676b6416ba02c4a9ad8ff4a0d" />
<Pack Hash="f16ff71bbb4c29c59c79b187390caca118c524dc" Size="1941383" CompressedSize="401920" RemotePath="UnrealEngine-14325932-fd4522200d8f465186daabf1b763df0e" />
<Pack Hash="f1774905574c3ef49b2fa31a3ad69d48424556fd" Size="2096052" CompressedSize="1385389" RemotePath="UnrealEngine-13502876-670adc5cbc054639a73f0888827fe650" />
<Pack Hash="f1784900371932c65572368345160e91bc9d0b25" Size="39909616" CompressedSize="7587972" RemotePath="UnrealEngine-15978123" />
<Pack Hash="f18c5bf5f98f5ac31f466572a4592e22dae16ddc" Size="39164616" CompressedSize="6484505" RemotePath="UnrealEngine-16115434" />
<Pack Hash="f1932e6479830de4c4fb0d4cd432ed4df954e8cc" Size="30023424" CompressedSize="13759646" RemotePath="UnrealEngine-3903710-c0a431f3a7fa47508c57a1b68a0c1c20" />
<Pack Hash="f1c25bfcf045e2b3ac942792b0f41bd2d643d070" Size="7202872" CompressedSize="2519704" RemotePath="UnrealEngine-11588050-b4cf6edf1faa41af9fbd96d0f62325a9" />
@@ -0,0 +1,76 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#include "SpirvCommon.h"
SHADERCOMPILERCOMMON_API void FindOffsetToSpirvEntryPoint(const FSpirv& Spirv, const ANSICHAR* EntryPointName, uint32& OutWordOffsetToEntryPoint, uint32& OutWordOffsetToMainName)
{
// Iterate over all SPIR-V instructions until we have what we need
for (FSpirvConstIterator Iter = Spirv.begin(); Iter != Spirv.end(); ++Iter)
{
switch (Iter.Opcode())
{
case SpvOpEntryPoint:
{
// Check if we found our entry point.
// With RayTracing, there can be multiple entry point declarations in a single SPIR-V module.
const ANSICHAR* Name = Iter.OperandAsString(3);
if (FCStringAnsi::Strcmp(Name, EntryPointName) == 0)
{
// Return word offset to OpEntryPoint instruction
check(OutWordOffsetToEntryPoint == 0);
OutWordOffsetToEntryPoint = Spirv.GetWordOffset(Iter, 3);
}
}
break;
case SpvOpName:
{
const ANSICHAR* Name = Iter.OperandAsString(2);
if (FCStringAnsi::Strcmp(Name, EntryPointName) == 0)
{
// Return word offset to OpName instruction that refers to the main entry point
check(OutWordOffsetToMainName == 0);
OutWordOffsetToMainName = Spirv.GetWordOffset(Iter, 2);
}
}
break;
case SpvOpDecorate:
case SpvOpMemberDecorate:
case SpvOpFunction:
{
// With the first annotation, type declaration, or function declaration,
// there can't be any more entry point or debug instructions (i.e. OpEntryPoint and OpName).
// However, only the OpFunction is guaranteed to appear.
return;
}
}
}
}
static const ANSICHAR* GSpirvPlaceholderEntryPointName = "main_00000000_00000000";
static void RenameFixedSizeSpirvString(FSpirv& Spirv, uint32 WordOffsetToString, uint32 CRC)
{
char* TargetString = reinterpret_cast<char*>(Spirv.Data.GetData() + WordOffsetToString);
check(!FCStringAnsi::Strcmp(TargetString, GSpirvPlaceholderEntryPointName));
const uint32 SpirvByteSize = static_cast<uint32>(Spirv.GetByteSize());
FCStringAnsi::Sprintf(TargetString, "main_%0.8x_%0.8x", SpirvByteSize, CRC);
};
SHADERCOMPILERCOMMON_API const ANSICHAR* PatchSpirvEntryPointWithCRC(FSpirv& Spirv, uint32& OutCRC)
{
// Find offsets to entry point strings and generate CRC over the module
uint32 OffsetToEntryPoint = 0, OffsetToMainName = 0;
FindOffsetToSpirvEntryPoint(Spirv, GSpirvPlaceholderEntryPointName, OffsetToEntryPoint, OffsetToMainName);
OutCRC = FCrc::MemCrc32(Spirv.GetByteData(), Spirv.GetByteSize());
// Patch the (optional) entry point name decoration; this can be stripped out by some optimization passes
RenameFixedSizeSpirvString(Spirv, OffsetToEntryPoint, OutCRC);
if (OffsetToMainName != 0)
{
RenameFixedSizeSpirvString(Spirv, OffsetToMainName, OutCRC);
}
return reinterpret_cast<const ANSICHAR*>(Spirv.Data.GetData() + OffsetToEntryPoint);
}
@@ -4,6 +4,119 @@
#include "CoreMinimal.h"
THIRD_PARTY_INCLUDES_START
#include "spirv_reflect.h"
THIRD_PARTY_INCLUDES_END
/** Template forward iterator for SPIR-V instructions. */
template <typename T>
class TSpirvForwardIterator
{
public:
/** Initializes the iterator with a null pointer. */
TSpirvForwardIterator() :
Ptr(nullptr)
{
}
TSpirvForwardIterator(const TSpirvForwardIterator& Other) = default;
TSpirvForwardIterator& operator = (const TSpirvForwardIterator& Other) = default;
/** Initializes the iterator with the specified pointer. */
TSpirvForwardIterator(T* InPtr, bool bPointsAtHeader = false) :
Ptr(InPtr)
{
if (bPointsAtHeader)
{
// Validate header of SPIR-V module
const uint32 MagicNumberValue = Ptr[0];
check(MagicNumberValue == SpvMagicNumber);
//const uint32 Version = Ptr[1];
//const uint32 Generator = Ptr[2];
//const uint32 Bound = Ptr[3];
const uint32 ZeroCheckValue = Ptr[4];
check(ZeroCheckValue == 0);
// Move pointer to first instruction
Ptr += 5;
}
}
/** Returns the opcode of the current instruction. */
SpvOp Opcode() const
{
return static_cast<SpvOp>(*Ptr & SpvOpCodeMask);
}
/** Returns the word count of the current instruction. A valid SPIR-V instruction must have a word count greater zero. */
uint32 WordCount() const
{
return (*Ptr >> SpvWordCountShift) & SpvOpCodeMask;
}
/** Dereferences the value the current operand points to. */
uint32 Operand(int32 WordOffset) const
{
return Ptr[WordOffset];
}
/** Returns the operand as the specified reinterpreted type. */
template <typename TDst>
TDst OperandAs(int32 WordOffset) const
{
return *reinterpret_cast<const TDst*>(&(Ptr[WordOffset]));
}
/** Returns the operand pointer as ANSI C string. */
const ANSICHAR* OperandAsString(int32 WordOffset) const
{
return reinterpret_cast<const ANSICHAR*>(&(Ptr[WordOffset]));
}
/** Returns a pointer to the beginning of the SPIR-V instruction this iterator currently points to. */
T* operator * () const
{
return Ptr;
}
/** Increments the iterator to point to the next SPIR-V instruction. */
TSpirvForwardIterator& operator ++ ()
{
const uint32 Words = WordCount();
checkf(Words > 0, TEXT("Invalid SPIR-V instruction with word count of zero"));
Ptr += Words;
return *this;
}
/** Increments the iterator to point to the next SPIR-V instruction and returns the previous iterator state. */
TSpirvForwardIterator operator ++ (int)
{
TSpirvForwardIterator Current(*this);
this->operator++();
return Current;
}
/** Returns whether this iterator points to the same address as the other iterator. */
bool operator == (const TSpirvForwardIterator& Other) const
{
return Ptr == Other.Ptr;
}
/** Returns whether this iterator does not point to the same address as the other iterator. */
bool operator != (const TSpirvForwardIterator& Other) const
{
return Ptr != Other.Ptr;
}
private:
T* Ptr;
};
using FSpirvIterator = TSpirvForwardIterator<uint32>;
using FSpirvConstIterator = TSpirvForwardIterator<const uint32>;
/** Base structure for SPIR-V modules in the shader backends. */
struct FSpirv
{
@@ -26,6 +139,55 @@ struct FSpirv
{
return Data.Num() * sizeof(uint32);
}
/** Returns the word offset to the instruction the specified iterator points to plus additional operand word offset. */
FORCEINLINE uint32 GetWordOffset(const FSpirvConstIterator& Iter, uint32 OperandWordOffset = 0) const
{
return static_cast<uint32>(*Iter + OperandWordOffset - Data.GetData());
}
public:
/** Returns a constant iterator to the first instruction in this SPIR-V module. */
FORCEINLINE FSpirvConstIterator cbegin() const
{
return FSpirvConstIterator(Data.GetData(), /*bPointsAtHeader:*/ true);
}
/** Returns a constant iterator to the first instruction in this SPIR-V module. */
FORCEINLINE FSpirvConstIterator begin() const
{
return FSpirvConstIterator(Data.GetData(), /*bPointsAtHeader:*/ true);
}
/** Returns an iterator to the first instruction in this SPIR-V module. */
FORCEINLINE FSpirvIterator begin()
{
return FSpirvIterator(Data.GetData(), /*bPointsAtHeader:*/ true);
}
/** Returns a constant iterator to the end of this SPIR-V module. */
FORCEINLINE FSpirvConstIterator cend() const
{
return FSpirvConstIterator(Data.GetData() + Data.Num());
}
/** Returns a constant iterator to the end of this SPIR-V module. */
FORCEINLINE FSpirvConstIterator end() const
{
return FSpirvConstIterator(Data.GetData() + Data.Num());
}
/** Returns an iterator to the end of this SPIR-V module. */
FORCEINLINE FSpirvIterator end()
{
return FSpirvIterator(Data.GetData() + Data.Num());
}
};
/** Returns word offset to the entry point (OpEntryPoint) and name of the entry point (OpName). If the respective entry has not been found, the output offset is 0. */
extern SHADERCOMPILERCOMMON_API void FindOffsetToSpirvEntryPoint(const FSpirv& Spirv, const ANSICHAR* EntryPointName, uint32& OutWordOffsetToEntryPoint, uint32& OutWordOffsetToMainName);
/** Renames the fixed-size entry point name (which must be "main_00000000_00000000") to the formatted name including a CRC over the module. Returns the new entry point name. */
extern SHADERCOMPILERCOMMON_API const ANSICHAR* PatchSpirvEntryPointWithCRC(FSpirv& Spirv, uint32& OutCRC);
@@ -1,6 +1,7 @@
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
using System.IO;
public class ShaderCompilerCommon : ModuleRules
{
@@ -20,7 +21,7 @@ public class ShaderCompilerCommon : ModuleRules
}
// We only need a header containing definitions
PublicSystemIncludePaths.Add("ThirdParty/hlslcc/hlslcc/src/hlslcc_lib");
PublicSystemIncludePaths.Add("ThirdParty/SPIRV-Reflect/SPIRV-Reflect");
PublicSystemIncludePaths.Add(Path.Combine(Target.UEThirdPartySourceDirectory, "hlslcc/hlslcc/src/hlslcc_lib"));
PublicSystemIncludePaths.Add(Path.Combine(Target.UEThirdPartySourceDirectory, "SPIRV-Reflect/SPIRV-Reflect"));
}
}
@@ -24,7 +24,6 @@ THIRD_PARTY_INCLUDES_START
#include "SPIRV/GLSL.std.450.h"
#include "SPIRV/doc.h"
#include "SPIRV/disassemble.h"
#include "SPIRV/spirv.hpp"
THIRD_PARTY_INCLUDES_END
#if defined(_MSC_VER) && _MSC_VER >= 1800
@@ -166,33 +165,8 @@ static EShLanguage GetStage(EHlslShaderFrequency Frequency)
return EShLangCount;
}
static void ComputeMovableWordIndices(FVulkanSpirv& Spirv)
void PatchSpirvReflectionEntries(FVulkanSpirv& Spirv)
{
// SPIRV Header
const uint32* PtrStart = Spirv.Data.GetData();
const uint32* Ptr = PtrStart;
const uint32* PtrEnd = Spirv.Data.GetData() + Spirv.Data.Num();
const uint32_t MagicNumberValue = *Ptr++;
check(MagicNumberValue == spv::MagicNumber);
uint32_t Version = *Ptr++;
uint32_t Generator = *Ptr++;
uint32_t Bound = *Ptr++;
const uint32_t ZeroCheckValue = *Ptr++;
check(ZeroCheckValue == 0);
auto ReadLiteralString = [](const uint32_t* Ptr)
{
FString S;
const char* Str = (const char*)Ptr;
// Empty string is allowed...
while (*Str)
{
S += *Str;
++Str;
}
return S;
};
TMap<uint32, FString> Names;
struct FDecorations
{
@@ -204,57 +178,38 @@ static void ComputeMovableWordIndices(FVulkanSpirv& Spirv)
TMap<uint32, FDecorations> Decorations;
TMap<uint32, uint32> TypePointerUniforms;
TMap<uint32, uint32> VariableUniformTypes;
bool bFoundEntry = false;
while (Ptr < PtrEnd)
bool bDone = false;
for (FSpirvConstIterator Iter = Spirv.cbegin(); Iter != Spirv.cend() && !bDone; ++Iter)
{
uint32_t WordCount = (*Ptr >> spv::WordCountShift) & spv::OpCodeMask;
spv::Op OpCode = (spv::Op)(*Ptr & spv::OpCodeMask);
switch (OpCode)
switch (Iter.Opcode())
{
case spv::OpEntryPoint:
case SpvOpName:
{
uint32 ExecModel = Ptr[1];
uint32 EntryPoint = Ptr[2];
FString Name = ReadLiteralString(Ptr + 3);
if (Name == TEXT("main_00000000_00000000"))
{
check(Spirv.OffsetToEntryPoint == 0);
Spirv.OffsetToEntryPoint = (uint32)(&Ptr[3] - PtrStart);
bFoundEntry = true;
}
uint32 TargetId = Iter.Operand(1);
FString Name = ANSI_TO_TCHAR(Iter.OperandAsString(2));
Names.Add(TargetId, MoveTemp(Name));
}
break;
case spv::OpName:
case SpvOpDecorate:
{
uint32 TargetId = Ptr[1];
FString Name = ReadLiteralString(Ptr + 2);
if (Name == TEXT("main_00000000_00000000"))
{
check(Spirv.OffsetToMainName == 0);
Spirv.OffsetToMainName = (uint32)(&Ptr[2] - PtrStart);
}
Names.Add(TargetId, Name);
}
break;
case spv::OpDecorate:
{
uint32 TargetId = Ptr[1];
spv::Decoration Decoration = (spv::Decoration)Ptr[2];
uint32 TargetId = Iter.Operand(1);
SpvDecoration Decoration = Iter.OperandAs<SpvDecoration>(2);
switch (Decoration)
{
case spv::DecorationDescriptorSet:
case SpvDecorationDescriptorSet:
{
uint32 Value = Ptr[3];
uint32 WordValueIndex = (uint32)(&Ptr[3] - PtrStart);
uint32 Value = Iter.Operand(3);
uint32 WordValueIndex = Spirv.GetWordOffset(Iter, 3);
FDecorations& UBDecoration = Decorations.FindOrAdd(TargetId);
UBDecoration.DescriptorSet = Value;
UBDecoration.WordDescriptorSet = WordValueIndex;
break;
}
case spv::DecorationBinding:
case SpvDecorationBinding:
{
uint32 Value = Ptr[3];
uint32 WordValueIndex = (uint32)(&Ptr[3] - PtrStart);
uint32 Value = Iter.Operand(3);
uint32 WordValueIndex = Spirv.GetWordOffset(Iter, 3);
FDecorations& UBDecoration = Decorations.FindOrAdd(TargetId);
UBDecoration.BindingIndex = Value;
UBDecoration.WordBindingIndex = WordValueIndex;
@@ -265,37 +220,36 @@ static void ComputeMovableWordIndices(FVulkanSpirv& Spirv)
}
}
break;
case spv::OpTypePointer:
case SpvOpTypePointer:
{
uint32 Result = Ptr[1];
spv::StorageClass Storage = (spv::StorageClass)Ptr[2];
if (Storage == spv::StorageClassUniform || Storage == spv::StorageClassUniformConstant)
uint32 Result = Iter.Operand(1);
SpvStorageClass Storage = Iter.OperandAs<SpvStorageClass>(2);
if (Storage == SpvStorageClassUniform || Storage == SpvStorageClassUniformConstant)
{
uint32 Type = Ptr[3];
uint32 Type = Iter.Operand(3);
TypePointerUniforms.Add(Result, Type);
}
}
break;
case spv::OpVariable:
case SpvOpVariable:
{
uint32 Type = Ptr[1];
uint32 Id = Ptr[2];
spv::StorageClass Storage = (spv::StorageClass)Ptr[3];
if (Storage == spv::StorageClassUniform || Storage == spv::StorageClassUniformConstant)
uint32 Type = Iter.Operand(1);
uint32 Id = Iter.Operand(2);
SpvStorageClass Storage = Iter.OperandAs<SpvStorageClass>(3);
if (Storage == SpvStorageClassUniform || Storage == SpvStorageClassUniformConstant)
{
VariableUniformTypes.Add(Id, Type);
}
}
break;
case SpvOpFunction:
bDone = true;
break;
default:
break;
}
Ptr += WordCount;
}
check(bFoundEntry);
// Go through all found uniform variables and make sure we found the right info
for (const auto& Pair : VariableUniformTypes)
{
@@ -335,25 +289,6 @@ static void ComputeMovableWordIndices(FVulkanSpirv& Spirv)
}
}
static void PatchSpirvEntryPoint(FVulkanSpirv& OutSpirv, uint32 OffsetToName)
{
char* EntryPointName = (char*)(OutSpirv.Data.GetData() + OffsetToName);
check(!FCStringAnsi::Strcmp(EntryPointName, "main_00000000_00000000"));
FCStringAnsi::Sprintf(EntryPointName, "main_%0.8x_%0.8x", OutSpirv.Data.Num() * sizeof(uint32), OutSpirv.CRC);
};
bool PatchSpirvReflectionEntriesAndEntryPoint(FVulkanSpirv& OutSpirv)
{
// Re-compute movable word indices and update CRC code
ComputeMovableWordIndices(OutSpirv);
OutSpirv.CRC = FCrc::MemCrc32(OutSpirv.Data.GetData(), OutSpirv.Data.Num() * sizeof(uint32));
// Patch the entry point name
PatchSpirvEntryPoint(OutSpirv, OutSpirv.OffsetToMainName);
PatchSpirvEntryPoint(OutSpirv, OutSpirv.OffsetToEntryPoint);
return true;
}
bool GenerateSpirv(const ANSICHAR* Source, FCompilerInfo& CompilerInfo, FString& OutErrors, const FString& DumpDebugInfoPath, FVulkanSpirv& OutSpirv)
{
glslang::TProgram* Program = new glslang::TProgram;
@@ -444,7 +379,8 @@ bool GenerateSpirv(const ANSICHAR* Source, FCompilerInfo& CompilerInfo, FString&
OutSpirv.ReflectionInfo.Add(Entry);
}
PatchSpirvReflectionEntriesAndEntryPoint(OutSpirv);
PatchSpirvReflectionEntries(OutSpirv);
OutSpirv.EntryPointName = PatchSpirvEntryPointWithCRC(OutSpirv, OutSpirv.CRC);
// Copy back to original spirv data as it is used for dumping information
FMemory::Memcpy(&Spirv[0], OutSpirv.Data.GetData(), SizeInWords * sizeof(uint32));
@@ -9,21 +9,6 @@
#include "hlslcc.h"
#include "SpirvReflectCommon.h"
#if PLATFORM_MAC || PLATFORM_WINDOWS || PLATFORM_LINUX
THIRD_PARTY_INCLUDES_START
#include "SPIRV/GlslangToSpv.h"
#include "SPIRV/doc.h"
#include "SPIRV/disassemble.h"
THIRD_PARTY_INCLUDES_END
#if PLATFORM_WINDOWS
#include "Windows/AllowWindowsPlatformTypes.h"
// For excpt.h
#include <D3Dcompiler.h>
#include "Windows/HideWindowsPlatformTypes.h"
#endif
#endif // PLATFORM_MAC || PLATFORM_WINDOWS || PLATFORM_LINUX
#if PLATFORM_MAC
// Horrible hack as we need the enum available but the Vulkan headers do not compile on Mac
enum VkDescriptorType {
@@ -1563,7 +1548,7 @@ static void BuildShaderOutput(
{
if (IsVulkanMobilePlatform((EShaderPlatform)ShaderInput.Target.Platform))
{
CompileOfflineMali(ShaderInput, ShaderOutput, (const ANSICHAR*)Spirv.GetByteData(), Spirv.GetByteSize(), true, (const ANSICHAR*)(Spirv.GetByteData() + Spirv.OffsetToMainName));
CompileOfflineMali(ShaderInput, ShaderOutput, (const ANSICHAR*)Spirv.GetByteData(), Spirv.GetByteSize(), true, Spirv.EntryPointName);
}
}
@@ -1919,15 +1904,17 @@ static void GatherSpirvReflectionBindings(
}
}
static void BuildShaderOutputFromSpirv(
static bool BuildShaderOutputFromSpirv(
CrossCompiler::FShaderConductorContext& CompilerContext,
FVulkanSpirv& Spirv,
const FShaderCompilerInput& Input,
FShaderCompilerOutput& Output,
FVulkanBindingTable& BindingTable,
const FString& EntryPointName,
bool bHasRealUBs,
bool bDebugDump,
bool bIsRayTracingShader)
bool bStripReflect,
bool bIsRayTracingShader,
bool bDebugDump)
{
FShaderParameterMap& ParameterMap = Output.ParameterMap;
@@ -2299,7 +2286,20 @@ static void BuildShaderOutputFromSpirv(
// Overwrite updated SPIRV code
Spirv.Data = TArray<uint32>(Reflection.GetCode(), Reflection.GetCodeSize() / 4);
PatchSpirvReflectionEntriesAndEntryPoint(Spirv);
// We have to strip out most debug instructions (except OpName) for Vulkan mobile
if (bStripReflect)
{
const char* OptArgs[] = { "--strip-reflect" };
if (!CompilerContext.OptimizeSpirv(Spirv.Data, OptArgs, UE_ARRAY_COUNT(OptArgs)))
{
UE_LOG(LogVulkanShaderCompiler, Error, TEXT("Failed to strip debug instructions from SPIR-V module"));
return false;
}
}
PatchSpirvReflectionEntries(Spirv);
Spirv.EntryPointName = PatchSpirvEntryPointWithCRC(Spirv, Spirv.CRC);
BuildShaderOutput(
Output,
@@ -2321,6 +2321,8 @@ static void BuildShaderOutputFromSpirv(
DumpDebugShaderBinary(Input, Spirv.GetByteData(), Spirv.GetByteSize(), TEXT("spv"));
DumpDebugShaderDisassembledSpirv(Input, Spirv.GetByteData(), Spirv.GetByteSize(), TEXT("spvasm"));
}
return true;
}
static bool CompileWithShaderConductor(
@@ -2330,7 +2332,8 @@ static bool CompileWithShaderConductor(
EHlslCompileTarget HlslCompilerTarget,
FShaderCompilerOutput& Output,
FVulkanBindingTable& BindingTable,
bool bHasRealUBs)
bool bHasRealUBs,
bool bStripReflect)
{
const FShaderCompilerInput& Input = CompilerInfo.Input;
@@ -2384,15 +2387,13 @@ static bool CompileWithShaderConductor(
}
// Build shader output and binding table
BuildShaderOutputFromSpirv(Spirv, Input, Output, BindingTable, EntryPointName, bHasRealUBs, bDebugDump, bIsRayTracingShader);
Output.bSucceeded = BuildShaderOutputFromSpirv(CompilerContext, Spirv, Input, Output, BindingTable, EntryPointName, bHasRealUBs, bStripReflect, bIsRayTracingShader, bDebugDump);
if (Input.Environment.CompilerFlags.Contains(CFLAG_KeepDebugInfo))
{
Output.ShaderCode.AddOptionalData(FShaderCodeName::Key, TCHAR_TO_UTF8(*Input.GenerateShaderName()));
}
Output.bSucceeded = true;
if (bDebugDump)
{
DumpDebugShaderBinary(Input, Spirv.GetByteData(), Spirv.GetByteSize(), TEXT("spv"));
@@ -2414,6 +2415,7 @@ void DoCompileVulkanShader(const FShaderCompilerInput& Input, FShaderCompilerOut
const bool bHasRealUBs = !Input.Environment.CompilerFlags.Contains(CFLAG_UseEmulatedUB);
const bool bIsSM5 = (Version == EVulkanShaderVersion::SM5);
const bool bIsMobile = (Version == EVulkanShaderVersion::ES3_1 || Version == EVulkanShaderVersion::ES3_1_ANDROID);
const bool bStripReflect = (IsVulkanMobilePlatform(ShaderPlatform) || IsVulkanMobileSM5Platform(ShaderPlatform));
const bool bForceDXC = Input.Environment.CompilerFlags.Contains(CFLAG_ForceDXC);
const EHlslShaderFrequency FrequencyTable[] =
@@ -2564,7 +2566,7 @@ void DoCompileVulkanShader(const FShaderCompilerInput& Input, FShaderCompilerOut
if (bForceDXC)
{
// Cross-compile shader via ShaderConductor (DXC, SPIRV-Tools, SPIRV-Cross)
bSuccess = CompileWithShaderConductor(PreprocessedShaderSource, EntryPointName, CompilerInfo, HlslCompilerTarget, Output, BindingTable, bHasRealUBs);
bSuccess = CompileWithShaderConductor(PreprocessedShaderSource, EntryPointName, CompilerInfo, HlslCompilerTarget, Output, BindingTable, bHasRealUBs, bStripReflect);
}
else
#endif // PLATFORM_MAC || PLATFORM_WINDOWS || PLATFORM_LINUX
@@ -52,10 +52,10 @@ struct FVulkanSpirv : FSpirv
// Index into the Spirv Word containing the binding index decoration
uint32 WordBindingIndex = UINT32_MAX;
};
TArray<FEntry> ReflectionInfo;
uint32 OffsetToMainName = 0;
uint32 OffsetToEntryPoint = 0;
uint32 CRC = 0;
const ANSICHAR* EntryPointName = nullptr;
int32 FindBinding(const FString& Name, bool bOuter = false) const
{
@@ -135,7 +135,7 @@ struct FVulkanSpirv : FSpirv
};
// Updates all reflection entries in the specified SPIR-V module.
extern bool PatchSpirvReflectionEntriesAndEntryPoint(FVulkanSpirv& OutSpirv);
extern void PatchSpirvReflectionEntries(FVulkanSpirv& OutSpirv);
// Generates SPIR-V out of the specified GLSL source code.
extern bool GenerateSpirv(const ANSICHAR* Source, FCompilerInfo& CompilerInfo, FString& OutErrors, const FString& DumpDebugInfoPath, FVulkanSpirv& OutSpirv);
@@ -90,7 +90,11 @@ Pass::Status StripReflectInfoPass::Process() {
// clear all debug data now if it hasn't been cleared already, to remove any
// remaining OpString that may have been referenced by non-semantic extinsts
for (auto& dbg : context()->debugs1()) to_remove.push_back(&dbg);
for (auto& dbg : context()->debugs2()) to_remove.push_back(&dbg);
// UE Change Begin: OpName is required in UE
for (auto& dbg : context()->debugs2()) {
if (dbg.opcode() != SpvOpName) to_remove.push_back(&dbg);
}
// UE Change Begin: OpName is required in UE
for (auto& dbg : context()->debugs3()) to_remove.push_back(&dbg);
for (auto& dbg : context()->ext_inst_debuginfo()) to_remove.push_back(&dbg);
@@ -282,9 +282,6 @@ namespace ShaderConductor
// UE Change Begin: Allow optimization after source-to-spirv conversion and before spirv-to-source cross-compilation
static ResultDesc Optimize(const ResultDesc& binaryResult, const char* const* optConfigs, uint32_t numOptConfigs);
// UE Change End: Allow optimization after source-to-spirv conversion and before spirv-to-source cross-compilation
// UE Change Begin: Add disassembler to public interface
static ResultDesc Disassemble(const ResultDesc& binaryResult);
// UE Change End: Add disassembler to public interface
// Currently only Dxil on Windows supports linking
static bool LinkSupport();
@@ -1012,7 +1012,9 @@ namespace
opts.flatten_multidimensional_arrays = false;
opts.enable_420pack_extension =
(target.language == ShadingLanguage::Glsl) && ((target.version == nullptr) || (opts.version >= 420));
opts.vulkan_semantics = true;// false; //WIP
// UE Change Begin: Always enable Vulkan semantics
opts.vulkan_semantics = true;
// UE Change End: Always enable Vulkan semantics
opts.vertex.fixup_clipspace = opts.es;
opts.vertex.flip_vert_y = opts.es;
opts.vertex.support_nonzero_base_instance = true;
@@ -1478,7 +1480,10 @@ namespace ShaderConductor
const size_t spirvSize = source.binarySize / sizeof(uint32_t);
spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3);
uint32_t options = SPV_BINARY_TO_TEXT_OPTION_NONE | SPV_BINARY_TO_TEXT_OPTION_INDENT | SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES;
// UE Change Begin: Enable comments to improve readability for SPIR-V disassembly
uint32_t options =
SPV_BINARY_TO_TEXT_OPTION_COMMENT | SPV_BINARY_TO_TEXT_OPTION_INDENT | SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES;
// UE Change End: Enable comments to improve readability for SPIR-V disassembly
spv_text text = nullptr;
spv_diagnostic diagnostic = nullptr;
@@ -1582,41 +1587,6 @@ namespace ShaderConductor
}
// UE Change End: Allow optimization after source-to-spirv conversion and before spirv-to-source cross-compilation
// UE Change Begin: Add disassembler to public interface
Compiler::ResultDesc Compiler::Disassemble(const ResultDesc& binaryResult)
{
ResultDesc textResult;
textResult.isText = false;
textResult.hasError = false;
if (binaryResult.isText || binaryResult.hasError)
{
textResult.hasError = true;
return textResult;
}
spvtools::SpirvTools tools(SPV_ENV_UNIVERSAL_1_3);
const uint32_t* spirvData = reinterpret_cast<const uint32_t*>(binaryResult.target.Data());
const size_t spirvDataSize = binaryResult.target.Size();
const size_t spirvDataWordSize = spirvDataSize / sizeof(uint32_t);
std::string text;
const uint32_t options =
SPV_BINARY_TO_TEXT_OPTION_INDENT | SPV_BINARY_TO_TEXT_OPTION_COMMENT | SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES;
if (!tools.Disassemble(spirvData, spirvDataWordSize, &text, options))
{
textResult.hasError = true;
return textResult;
}
textResult.isText = true;
textResult.target = Blob(text.data(), static_cast<uint32_t>(text.size()));
return textResult;
}
// UE Change End: Add disassembler to public interface
bool Compiler::LinkSupport()
{
return Dxcompiler::Instance().LinkerSupport();