No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ShaderScriptableStripperTests.cs 154KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437
  1. using System;
  2. using System.Collections.Generic;
  3. using NUnit.Framework;
  4. using UnityEditor.Rendering;
  5. using UnityEditor.Rendering.Universal;
  6. using UnityEditor.VersionControl;
  7. using UnityEngine;
  8. using UnityEngine.Rendering;
  9. using UnityEngine.Rendering.Universal;
  10. using UnityEngine.SocialPlatforms;
  11. using IShaderScriptableStrippingData = UnityEditor.Rendering.Universal.ShaderScriptableStripper.IShaderScriptableStrippingData;
  12. namespace ShaderStrippingAndPrefiltering
  13. {
  14. class ShaderScriptableStripperTests
  15. {
  16. internal struct TestStrippingData : IShaderScriptableStrippingData
  17. {
  18. public ShaderFeatures shaderFeatures { get; set; }
  19. public VolumeFeatures volumeFeatures { get; set; }
  20. public bool isGLDevice { get; set; }
  21. public bool stripSoftShadowQualityLevels { get; set; }
  22. public bool strip2DPasses { get; set; }
  23. public bool stripDebugDisplayShaders { get; set; }
  24. public bool stripScreenCoordOverrideVariants { get; set; }
  25. public bool stripUnusedVariants { get; set; }
  26. public bool stripUnusedPostProcessingVariants { get; set; }
  27. public bool stripUnusedXRVariants { get; set; }
  28. public bool IsHDRDisplaySupportEnabled { get; set; }
  29. public Shader shader { get; set; }
  30. public ShaderType shaderType { get; set; }
  31. public ShaderCompilerPlatform shaderCompilerPlatform { get; set; }
  32. public string passName { get; set; }
  33. public PassType passType { get; set; }
  34. public PassIdentifier passIdentifier { get; set; }
  35. public bool IsHDRShaderVariantValid { get; set; }
  36. public bool IsKeywordEnabled(LocalKeyword keyword)
  37. {
  38. return TestHelper.s_EnabledKeywords != null && TestHelper.s_EnabledKeywords.Contains(keyword.name);
  39. }
  40. public bool IsShaderFeatureEnabled(ShaderFeatures feature)
  41. {
  42. return (shaderFeatures & feature) != 0;
  43. }
  44. public bool IsVolumeFeatureEnabled(VolumeFeatures feature)
  45. {
  46. return (volumeFeatures & feature) != 0;
  47. }
  48. public bool PassHasKeyword(LocalKeyword keyword)
  49. {
  50. return TestHelper.s_PassKeywords != null && TestHelper.s_PassKeywords.Contains(keyword.name);
  51. }
  52. }
  53. class TestHelper
  54. {
  55. public static List<string> s_EnabledKeywords;
  56. public static List<string> s_PassKeywords;
  57. public ShaderScriptableStripper stripper;
  58. public IShaderScriptableStrippingData data;
  59. public ShaderStripTool<ShaderFeatures> featureStripTool;
  60. private Shader shader;
  61. public static readonly VolumeFeatures s_AllBloomFeatures = VolumeFeatures.BloomLQ | VolumeFeatures.BloomLQDirt
  62. | VolumeFeatures.BloomHQ | VolumeFeatures.BloomHQDirt;
  63. public TestHelper(Shader shader, ShaderFeatures shaderFeatures, VolumeFeatures volumeFeatures = VolumeFeatures.None, bool stripUnusedVariants = true, bool stripUnusedXRVariants = true)
  64. {
  65. s_PassKeywords = new List<string>() { };
  66. s_EnabledKeywords = new List<string>() { };
  67. stripper = new();
  68. stripper.BeforeShaderStripping(shader);
  69. data = new TestStrippingData();
  70. data.shader = shader;
  71. data.shaderFeatures = shaderFeatures;
  72. data.volumeFeatures = volumeFeatures;
  73. data.stripUnusedVariants = stripUnusedVariants;
  74. data.strip2DPasses = false;
  75. data.stripUnusedXRVariants = stripUnusedXRVariants;
  76. featureStripTool = new ShaderStripTool<ShaderFeatures>(data.shaderFeatures, ref data);
  77. }
  78. public void AreEqual(bool expected, bool actual)
  79. {
  80. Assert.AreEqual(expected, actual);
  81. }
  82. public void IsTrue(bool actual)
  83. {
  84. Assert.IsTrue(actual);
  85. }
  86. public void IsFalse(bool actual)
  87. {
  88. Assert.IsFalse(actual);
  89. }
  90. }
  91. /*****************************************************
  92. * Strip Unused Shaders...
  93. *****************************************************/
  94. [TestCase(null, false, false)]
  95. [TestCase("", false, false)]
  96. [TestCase("Universal Render Pipeline/Lit", false, false)]
  97. [TestCase("Universal Render Pipeline/Simple Lit", false, false)]
  98. [TestCase("Universal Render Pipeline/Unlit", false, false)]
  99. [TestCase("Universal Render Pipeline/Terrain/Lit", false, false)]
  100. [TestCase("Universal Render Pipeline/Particles/Lit", false, false)]
  101. [TestCase("Universal Render Pipeline/Particles/Simple Lit", false, false)]
  102. [TestCase("Universal Render Pipeline/Particles/Unlit", false, false)]
  103. [TestCase("Universal Render Pipeline/Baked Lit", false, false)]
  104. [TestCase("Universal Render Pipeline/Nature/SpeedTree7", false, false)]
  105. [TestCase("Universal Render Pipeline/Nature/SpeedTree7 Billboard", false, false)]
  106. [TestCase("Universal Render Pipeline/Nature/SpeedTree8_PBRLit", false, false)]
  107. [TestCase("Universal Render Pipeline/Complex Lit", false, false)]
  108. [TestCase("Hidden/Universal Render Pipeline/BokehDepthOfField", false, false)]
  109. [TestCase("Hidden/Universal Render Pipeline/GaussianDepthOfField", false, false)]
  110. [TestCase("Hidden/Universal Render Pipeline/CameraMotionBlur", false, false)]
  111. [TestCase("Hidden/Universal Render Pipeline/PaniniProjection", false, false)]
  112. [TestCase("Hidden/Universal Render Pipeline/Bloom", false, false)]
  113. [TestCase("Hidden/Universal Render Pipeline/StencilDeferred", true, false)]
  114. [TestCase("Hidden/Universal Render Pipeline/UberPost", false, false)]
  115. [TestCase("Hidden/Universal Render Pipeline/ScreenSpaceShadows", false, false)]
  116. [TestCase("Hidden/Universal Render Pipeline/ScreenSpaceAmbientOcclusion", false, false)]
  117. [TestCase("Hidden/Universal Render Pipeline/DBufferClear", false, false)]
  118. [TestCase("Hidden/Universal Render Pipeline/CameraMotionVectors", false, false)]
  119. [TestCase("Hidden/Universal Render Pipeline/CopyDepth", false, false)]
  120. [TestCase("Hidden/Universal Render Pipeline/SubpixelMorphologicalAntialiasing", false, false)]
  121. public void TestStripUnusedShaders(string shaderName, bool expectedNoFeatures, bool expectedWithDeferredShading)
  122. {
  123. TestHelper helper;
  124. Shader shader = Shader.Find(shaderName);
  125. ShaderScriptableStripper scriptableStripper = new();
  126. // Test each individual function...
  127. TestStripUnusedShaders_Deferred(shader, expectedNoFeatures, expectedWithDeferredShading);
  128. // Test the parent function...
  129. // Strip unused variants enabled/disabled
  130. helper = new TestHelper(shader, ShaderFeatures.None);
  131. helper.AreEqual(expectedNoFeatures, scriptableStripper.StripUnusedShaders(ref helper.data));
  132. helper = new TestHelper(shader, ShaderFeatures.None, stripUnusedVariants:false);
  133. helper.IsFalse(scriptableStripper.StripUnusedShaders(ref helper.data));
  134. }
  135. public void TestStripUnusedShaders_Deferred(Shader shader, bool expectedNoFeatures, bool expectedWithDeferredShading)
  136. {
  137. TestHelper helper;
  138. // Currently only StencilDeferred is stripped out (when deferred is not in use)
  139. helper = new TestHelper(shader, ShaderFeatures.None);
  140. helper.AreEqual(expectedNoFeatures, helper.stripper.StripUnusedShaders_Deferred(ref helper.data));
  141. helper = new TestHelper(shader, ShaderFeatures.DeferredShading);
  142. helper.AreEqual(expectedWithDeferredShading, helper.stripper.StripUnusedShaders_Deferred(ref helper.data));
  143. }
  144. /*****************************************************
  145. * Strip Unused passes...
  146. *****************************************************/
  147. [TestCase(null)]
  148. [TestCase("")]
  149. [TestCase("Universal Render Pipeline/Lit")]
  150. [TestCase("Universal Render Pipeline/Simple Lit")]
  151. [TestCase("Universal Render Pipeline/Unlit")]
  152. [TestCase("Universal Render Pipeline/Terrain/Lit")]
  153. [TestCase("Universal Render Pipeline/Particles/Lit")]
  154. [TestCase("Universal Render Pipeline/Particles/Simple Lit")]
  155. [TestCase("Universal Render Pipeline/Particles/Unlit")]
  156. [TestCase("Universal Render Pipeline/Baked Lit")]
  157. [TestCase("Universal Render Pipeline/Nature/SpeedTree7")]
  158. [TestCase("Universal Render Pipeline/Nature/SpeedTree7 Billboard")]
  159. [TestCase("Universal Render Pipeline/Nature/SpeedTree8_PBRLit")]
  160. [TestCase("Universal Render Pipeline/Complex Lit")]
  161. [TestCase("Hidden/Universal Render Pipeline/BokehDepthOfField")]
  162. [TestCase("Hidden/Universal Render Pipeline/GaussianDepthOfField")]
  163. [TestCase("Hidden/Universal Render Pipeline/CameraMotionBlur")]
  164. [TestCase("Hidden/Universal Render Pipeline/PaniniProjection")]
  165. [TestCase("Hidden/Universal Render Pipeline/Bloom")]
  166. [TestCase("Hidden/Universal Render Pipeline/StencilDeferred")]
  167. [TestCase("Hidden/Universal Render Pipeline/UberPost")]
  168. [TestCase("Hidden/Universal Render Pipeline/ScreenSpaceShadows")]
  169. [TestCase("Hidden/Universal Render Pipeline/ScreenSpaceAmbientOcclusion")]
  170. [TestCase("Hidden/Universal Render Pipeline/DBufferClear")]
  171. [TestCase("Hidden/Universal Render Pipeline/CameraMotionVectors")]
  172. [TestCase("Hidden/Universal Render Pipeline/CopyDepth")]
  173. [TestCase("Hidden/Universal Render Pipeline/SubpixelMorphologicalAntialiasing")]
  174. public void TestStripUnusedPass(string shaderName)
  175. {
  176. Shader shader = Shader.Find(shaderName);
  177. TestHelper helper;
  178. // Check Nulls
  179. helper = new TestHelper(shader, ShaderFeatures.None);
  180. helper.data.passName = null;
  181. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  182. TestStripUnusedPass_2D(shader);
  183. TestStripUnusedPass_XR(shader);
  184. TestStripUnusedPass_ShadowCaster(shader);
  185. TestStripUnusedPass_Decals(shader);
  186. }
  187. public void TestStripUnusedPass_2D(Shader shader)
  188. {
  189. TestHelper helper;
  190. helper = new TestHelper(shader, ShaderFeatures.None);
  191. helper.data.strip2DPasses = false;
  192. helper.data.passName = ShaderScriptableStripper.kPassNameUniversal2D;
  193. helper.IsFalse(helper.stripper.StripUnusedPass_2D(ref helper.data));
  194. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  195. helper = new TestHelper(shader, ShaderFeatures.None);
  196. helper.data.strip2DPasses = true;
  197. helper.data.passName = ShaderScriptableStripper.kPassNameUniversal2D;
  198. helper.IsTrue(helper.stripper.StripUnusedPass_2D(ref helper.data));
  199. helper.IsTrue(helper.stripper.StripUnusedPass(ref helper.data));
  200. }
  201. public void TestStripUnusedPass_XR(Shader shader)
  202. {
  203. TestHelper helper;
  204. helper = new TestHelper(shader, ShaderFeatures.None);
  205. helper.data.stripUnusedXRVariants = false;
  206. helper.data.passName = ShaderScriptableStripper.kPassNameXRMotionVectors;
  207. helper.IsFalse(helper.stripper.StripUnusedPass_XRMotionVectors(ref helper.data));
  208. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  209. helper = new TestHelper(shader, ShaderFeatures.None);
  210. helper.data.stripUnusedXRVariants = true;
  211. helper.data.passName = ShaderScriptableStripper.kPassNameXRMotionVectors;
  212. helper.IsTrue(helper.stripper.StripUnusedPass_XRMotionVectors(ref helper.data));
  213. helper.IsTrue(helper.stripper.StripUnusedPass(ref helper.data));
  214. }
  215. public void TestStripUnusedPass_ShadowCaster(Shader shader)
  216. {
  217. TestHelper helper;
  218. helper = new TestHelper(shader, ShaderFeatures.None);
  219. helper.data.passType = PassType.ShadowCaster;
  220. helper.IsTrue(helper.stripper.StripUnusedPass_ShadowCaster(ref helper.data));
  221. helper.IsTrue(helper.stripper.StripUnusedPass(ref helper.data));
  222. helper = new TestHelper(shader, ShaderFeatures.MainLightShadows);
  223. helper.data.passType = PassType.ShadowCaster;
  224. helper.IsFalse(helper.stripper.StripUnusedPass_ShadowCaster(ref helper.data));
  225. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  226. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightShadows);
  227. helper.data.passType = PassType.ShadowCaster;
  228. helper.IsFalse(helper.stripper.StripUnusedPass_ShadowCaster(ref helper.data));
  229. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  230. }
  231. public void TestStripUnusedPass_Decals(Shader shader)
  232. {
  233. TestHelper helper;
  234. // Currently only Decals are stripped in this part
  235. helper = new TestHelper(shader, ShaderFeatures.None);
  236. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  237. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  238. helper = new TestHelper(shader, ShaderFeatures.None);
  239. helper.data.isGLDevice = true;
  240. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  241. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  242. // DBuffer
  243. helper = new TestHelper(shader, ShaderFeatures.None);
  244. helper.data.passName = DecalShaderPassNames.DBufferMesh;
  245. helper.IsTrue(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  246. helper.IsTrue(helper.stripper.StripUnusedPass(ref helper.data));
  247. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT1);
  248. helper.data.passName = DecalShaderPassNames.DBufferMesh;
  249. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  250. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  251. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT2);
  252. helper.data.passName = DecalShaderPassNames.DBufferMesh;
  253. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  254. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  255. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT3);
  256. helper.data.passName = DecalShaderPassNames.DBufferMesh;
  257. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  258. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  259. helper = new TestHelper(shader, ShaderFeatures.None);
  260. helper.data.passName = DecalShaderPassNames.DBufferProjector;
  261. helper.IsTrue(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  262. helper.IsTrue(helper.stripper.StripUnusedPass(ref helper.data));
  263. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT1);
  264. helper.data.passName = DecalShaderPassNames.DBufferProjector;
  265. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  266. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  267. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT2);
  268. helper.data.passName = DecalShaderPassNames.DBufferProjector;
  269. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  270. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  271. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT3);
  272. helper.data.passName = DecalShaderPassNames.DBufferProjector;
  273. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  274. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  275. helper = new TestHelper(shader, ShaderFeatures.None);
  276. helper.data.passName = DecalShaderPassNames.DecalMeshForwardEmissive;
  277. helper.IsTrue(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  278. helper.IsTrue(helper.stripper.StripUnusedPass(ref helper.data));
  279. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT1);
  280. helper.data.passName = DecalShaderPassNames.DecalMeshForwardEmissive;
  281. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  282. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  283. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT2);
  284. helper.data.passName = DecalShaderPassNames.DecalMeshForwardEmissive;
  285. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  286. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  287. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT3);
  288. helper.data.passName = DecalShaderPassNames.DecalMeshForwardEmissive;
  289. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  290. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  291. helper = new TestHelper(shader, ShaderFeatures.None);
  292. helper.data.passName = DecalShaderPassNames.DecalProjectorForwardEmissive;
  293. helper.IsTrue(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  294. helper.IsTrue(helper.stripper.StripUnusedPass(ref helper.data));
  295. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT1);
  296. helper.data.passName = DecalShaderPassNames.DecalProjectorForwardEmissive;
  297. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  298. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  299. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT2);
  300. helper.data.passName = DecalShaderPassNames.DecalProjectorForwardEmissive;
  301. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  302. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  303. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT3);
  304. helper.data.passName = DecalShaderPassNames.DecalProjectorForwardEmissive;
  305. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  306. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  307. // Decal Screen Space
  308. helper = new TestHelper(shader, ShaderFeatures.None);
  309. helper.data.passName = DecalShaderPassNames.DecalScreenSpaceMesh;
  310. helper.IsTrue(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  311. helper.IsTrue(helper.stripper.StripUnusedPass(ref helper.data));
  312. helper = new TestHelper(shader, ShaderFeatures.DecalScreenSpace);
  313. helper.data.passName = DecalShaderPassNames.DecalScreenSpaceMesh;
  314. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  315. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  316. helper = new TestHelper(shader, ShaderFeatures.None);
  317. helper.data.passName = DecalShaderPassNames.DecalScreenSpaceProjector;
  318. helper.IsTrue(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  319. helper.IsTrue(helper.stripper.StripUnusedPass(ref helper.data));
  320. helper = new TestHelper(shader, ShaderFeatures.DecalScreenSpace);
  321. helper.data.passName = DecalShaderPassNames.DecalScreenSpaceProjector;
  322. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  323. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  324. // Decal Gbuffer
  325. helper = new TestHelper(shader, ShaderFeatures.None);
  326. helper.data.passName = DecalShaderPassNames.DecalGBufferMesh;
  327. helper.IsTrue(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  328. helper.IsTrue(helper.stripper.StripUnusedPass(ref helper.data));
  329. helper = new TestHelper(shader, ShaderFeatures.DecalGBuffer);
  330. helper.data.passName = DecalShaderPassNames.DecalGBufferMesh;
  331. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  332. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  333. helper = new TestHelper(shader, ShaderFeatures.None);
  334. helper.data.passName = DecalShaderPassNames.DecalGBufferProjector;
  335. helper.IsTrue(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  336. helper.IsTrue(helper.stripper.StripUnusedPass(ref helper.data));
  337. helper = new TestHelper(shader, ShaderFeatures.DecalGBuffer);
  338. helper.data.passName = DecalShaderPassNames.DecalGBufferProjector;
  339. helper.IsFalse(helper.stripper.StripUnusedPass_Decals(ref helper.data));
  340. helper.IsFalse(helper.stripper.StripUnusedPass(ref helper.data));
  341. }
  342. /*****************************************************
  343. * Strip Invalid Variant passes...
  344. *****************************************************/
  345. [TestCase(null, false, false, false)]
  346. [TestCase("", false, false, false)]
  347. [TestCase("Universal Render Pipeline/Lit", false, false, true)]
  348. [TestCase("Universal Render Pipeline/Simple Lit", false, false, true)]
  349. [TestCase("Universal Render Pipeline/Unlit", false, false, true)]
  350. [TestCase("Universal Render Pipeline/Terrain/Lit", false, true, true)]
  351. [TestCase("Universal Render Pipeline/Particles/Lit", false, false, true)]
  352. [TestCase("Universal Render Pipeline/Particles/Simple Lit", false, false, true)]
  353. [TestCase("Universal Render Pipeline/Particles/Unlit", false, false, true)]
  354. [TestCase("Universal Render Pipeline/Baked Lit", false, false, true)]
  355. [TestCase("Universal Render Pipeline/Nature/SpeedTree7", false, false, true)]
  356. [TestCase("Universal Render Pipeline/Nature/SpeedTree7 Billboard", false, false, true)]
  357. [TestCase("Universal Render Pipeline/Nature/SpeedTree8_PBRLit", false, false, true)]
  358. [TestCase("Universal Render Pipeline/Complex Lit", false, false, true)]
  359. [TestCase("Hidden/Universal Render Pipeline/BokehDepthOfField", false, false, true)]
  360. [TestCase("Hidden/Universal Render Pipeline/GaussianDepthOfField", false, false, true)]
  361. [TestCase("Hidden/Universal Render Pipeline/CameraMotionBlur", false, false, true)]
  362. [TestCase("Hidden/Universal Render Pipeline/PaniniProjection", false, false, true)]
  363. [TestCase("Hidden/Universal Render Pipeline/Bloom", false, false, true)]
  364. [TestCase("Hidden/Universal Render Pipeline/StencilDeferred", false, false, true)]
  365. [TestCase("Hidden/Universal Render Pipeline/UberPost", false, false, true)]
  366. [TestCase("Hidden/Universal Render Pipeline/ScreenSpaceShadows", false, false, true)]
  367. [TestCase("Hidden/Universal Render Pipeline/ScreenSpaceAmbientOcclusion", false, false, true)]
  368. [TestCase("Hidden/Universal Render Pipeline/DBufferClear", false, false, true)]
  369. [TestCase("Hidden/Universal Render Pipeline/CameraMotionVectors", false, false, true)]
  370. [TestCase("Hidden/Universal Render Pipeline/CopyDepth", false, false, true)]
  371. [TestCase("Hidden/Universal Render Pipeline/SubpixelMorphologicalAntialiasing", false, false, true)]
  372. public void TestStripInvalidVariants(string shaderName, bool expectedTerrainHoles, bool expectedTerrainHolesWithAlphaTestOn, bool expectedSoftShadows)
  373. {
  374. Shader shader = Shader.Find(shaderName);
  375. TestStripInvalidVariants_HDR(shader);
  376. StripInvalidVariants_TerrainHoles(shader, expectedTerrainHoles, expectedTerrainHolesWithAlphaTestOn);
  377. TestStripInvalidVariants_Shadows(shader, expectedSoftShadows);
  378. }
  379. public void TestStripInvalidVariants_HDR(Shader shader)
  380. {
  381. TestHelper helper;
  382. helper = new TestHelper(shader, ShaderFeatures.None);
  383. helper.data.IsHDRDisplaySupportEnabled = false;
  384. helper.data.IsHDRShaderVariantValid = false;
  385. helper.IsTrue(helper.stripper.StripInvalidVariants_HDR(ref helper.data));
  386. helper.IsTrue(helper.stripper.StripInvalidVariants(ref helper.data));
  387. helper = new TestHelper(shader, ShaderFeatures.None);
  388. helper.data.IsHDRDisplaySupportEnabled = false;
  389. helper.data.IsHDRShaderVariantValid = true;
  390. helper.IsFalse(helper.stripper.StripInvalidVariants_HDR(ref helper.data));
  391. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  392. helper = new TestHelper(shader, ShaderFeatures.None);
  393. helper.data.IsHDRDisplaySupportEnabled = true;
  394. helper.data.IsHDRShaderVariantValid = false;
  395. helper.IsFalse(helper.stripper.StripInvalidVariants_HDR(ref helper.data));
  396. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  397. helper = new TestHelper(shader, ShaderFeatures.None);
  398. helper.data.IsHDRDisplaySupportEnabled = true;
  399. helper.data.IsHDRShaderVariantValid = true;
  400. helper.IsFalse(helper.stripper.StripInvalidVariants_HDR(ref helper.data));
  401. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  402. helper = new TestHelper(shader, ShaderFeatures.DecalGBuffer);
  403. helper.data.IsHDRDisplaySupportEnabled = false;
  404. helper.data.IsHDRShaderVariantValid = false;
  405. helper.IsTrue(helper.stripper.StripInvalidVariants_HDR(ref helper.data));
  406. helper.IsTrue(helper.stripper.StripInvalidVariants(ref helper.data));
  407. helper = new TestHelper(shader, ShaderFeatures.DecalGBuffer);
  408. helper.data.IsHDRDisplaySupportEnabled = false;
  409. helper.data.IsHDRShaderVariantValid = true;
  410. helper.IsFalse(helper.stripper.StripInvalidVariants_HDR(ref helper.data));
  411. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  412. helper = new TestHelper(shader, ShaderFeatures.DecalGBuffer);
  413. helper.data.IsHDRDisplaySupportEnabled = true;
  414. helper.data.IsHDRShaderVariantValid = false;
  415. helper.IsFalse(helper.stripper.StripInvalidVariants_HDR(ref helper.data));
  416. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  417. helper = new TestHelper(shader, ShaderFeatures.DecalGBuffer);
  418. helper.data.IsHDRDisplaySupportEnabled = true;
  419. helper.data.IsHDRShaderVariantValid = true;
  420. helper.IsFalse(helper.stripper.StripInvalidVariants_HDR(ref helper.data));
  421. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  422. }
  423. public void StripInvalidVariants_TerrainHoles(Shader shader, bool expectedTerrainHoles, bool expectedTerrainHolesWithAlphaTestOn)
  424. {
  425. TestHelper helper;
  426. // Disabled m_AlphaTestOn
  427. helper = new TestHelper(shader, ShaderFeatures.None);
  428. helper.data.IsHDRShaderVariantValid = true;
  429. helper.AreEqual(expectedTerrainHoles, helper.stripper.StripInvalidVariants_TerrainHoles(ref helper.data));
  430. helper.AreEqual(expectedTerrainHoles, helper.stripper.StripInvalidVariants(ref helper.data));
  431. helper = new TestHelper(shader, ShaderFeatures.TerrainHoles);
  432. helper.data.IsHDRShaderVariantValid = true;
  433. helper.AreEqual(expectedTerrainHoles, helper.stripper.StripInvalidVariants_TerrainHoles(ref helper.data));
  434. helper.AreEqual(expectedTerrainHoles, helper.stripper.StripInvalidVariants(ref helper.data));
  435. // Enabled m_AlphaTestOn
  436. helper = new TestHelper(shader, ShaderFeatures.None);
  437. helper.data.IsHDRShaderVariantValid = true;
  438. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings._ALPHATEST_ON};
  439. helper.AreEqual(expectedTerrainHolesWithAlphaTestOn, helper.stripper.StripInvalidVariants_TerrainHoles(ref helper.data));
  440. helper.AreEqual(expectedTerrainHolesWithAlphaTestOn, helper.stripper.StripInvalidVariants(ref helper.data));
  441. helper = new TestHelper(shader, ShaderFeatures.TerrainHoles);
  442. helper.data.IsHDRShaderVariantValid = true;
  443. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings._ALPHATEST_ON};
  444. helper.IsFalse(helper.stripper.StripInvalidVariants_TerrainHoles(ref helper.data));
  445. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  446. }
  447. public void TestStripInvalidVariants_Shadows(Shader shader, bool expectedSoftShadows)
  448. {
  449. TestHelper helper;
  450. // Soft Shadows
  451. helper = new TestHelper(shader, ShaderFeatures.None);
  452. helper.data.IsHDRShaderVariantValid = true;
  453. helper.IsFalse(helper.stripper.StripInvalidVariants_Shadows(ref helper.data));
  454. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  455. helper = new TestHelper(shader, ShaderFeatures.None);
  456. helper.data.IsHDRShaderVariantValid = true;
  457. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.SoftShadows};
  458. helper.AreEqual(expectedSoftShadows, helper.stripper.StripInvalidVariants_Shadows(ref helper.data));
  459. helper.AreEqual(expectedSoftShadows, helper.stripper.StripInvalidVariants(ref helper.data));
  460. // MainLightShadows
  461. helper = new TestHelper(shader, ShaderFeatures.None);
  462. helper.data.IsHDRShaderVariantValid = true;
  463. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.MainLightShadows};
  464. helper.IsFalse(helper.stripper.StripInvalidVariants_Shadows(ref helper.data));
  465. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  466. helper = new TestHelper(shader, ShaderFeatures.None);
  467. helper.data.IsHDRShaderVariantValid = true;
  468. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.SoftShadows};
  469. helper.IsFalse(helper.stripper.StripInvalidVariants_Shadows(ref helper.data));
  470. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  471. // MainLightShadowCascades
  472. helper = new TestHelper(shader, ShaderFeatures.None);
  473. helper.data.IsHDRShaderVariantValid = true;
  474. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.MainLightShadowCascades};
  475. helper.IsFalse(helper.stripper.StripInvalidVariants_Shadows(ref helper.data));
  476. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  477. helper = new TestHelper(shader, ShaderFeatures.None);
  478. helper.data.IsHDRShaderVariantValid = true;
  479. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.SoftShadows};
  480. helper.IsFalse(helper.stripper.StripInvalidVariants_Shadows(ref helper.data));
  481. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  482. // MainLightShadowScreen
  483. helper = new TestHelper(shader, ShaderFeatures.None);
  484. helper.data.IsHDRShaderVariantValid = true;
  485. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.MainLightShadowScreen};
  486. helper.IsFalse(helper.stripper.StripInvalidVariants_Shadows(ref helper.data));
  487. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  488. helper = new TestHelper(shader, ShaderFeatures.None);
  489. helper.data.IsHDRShaderVariantValid = true;
  490. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.MainLightShadowScreen, ShaderKeywordStrings.SoftShadows};
  491. helper.IsFalse(helper.stripper.StripInvalidVariants_Shadows(ref helper.data));
  492. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  493. // AdditionalLightShadows
  494. helper = new TestHelper(shader, ShaderFeatures.None);
  495. helper.data.IsHDRShaderVariantValid = true;
  496. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.AdditionalLightShadows};
  497. helper.IsFalse(helper.stripper.StripInvalidVariants_Shadows(ref helper.data));
  498. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  499. helper = new TestHelper(shader, ShaderFeatures.None);
  500. helper.data.IsHDRShaderVariantValid = true;
  501. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.AdditionalLightShadows, ShaderKeywordStrings.SoftShadows};
  502. helper.IsFalse(helper.stripper.StripInvalidVariants_Shadows(ref helper.data));
  503. helper.IsFalse(helper.stripper.StripInvalidVariants(ref helper.data));
  504. }
  505. /*****************************************************
  506. * Unsupported Variants
  507. *****************************************************/
  508. [TestCase(null, false, false, false)]
  509. [TestCase("", false, false, false)]
  510. [TestCase("Universal Render Pipeline/Lit", true, true, true)]
  511. [TestCase("Universal Render Pipeline/Simple Lit", true, true, true)]
  512. [TestCase("Universal Render Pipeline/Unlit", true, true, true)]
  513. [TestCase("Universal Render Pipeline/Terrain/Lit", true, true, true)]
  514. [TestCase("Universal Render Pipeline/Particles/Lit", true, true, true)]
  515. [TestCase("Universal Render Pipeline/Particles/Simple Lit", true, true, true)]
  516. [TestCase("Universal Render Pipeline/Particles/Unlit", true, true, true)]
  517. [TestCase("Universal Render Pipeline/Baked Lit", true, true, true)]
  518. [TestCase("Universal Render Pipeline/Nature/SpeedTree7", true, true, true)]
  519. [TestCase("Universal Render Pipeline/Nature/SpeedTree7 Billboard", true, true, true)]
  520. [TestCase("Universal Render Pipeline/Nature/SpeedTree8_PBRLit", true, true, true)]
  521. [TestCase("Universal Render Pipeline/Complex Lit", true, true, true)]
  522. [TestCase("Hidden/Universal Render Pipeline/BokehDepthOfField", true, true, true)]
  523. [TestCase("Hidden/Universal Render Pipeline/GaussianDepthOfField", true, true, true)]
  524. [TestCase("Hidden/Universal Render Pipeline/CameraMotionBlur", true, true, true)]
  525. [TestCase("Hidden/Universal Render Pipeline/PaniniProjection", true, true, true)]
  526. [TestCase("Hidden/Universal Render Pipeline/Bloom", true, true, true)]
  527. [TestCase("Hidden/Universal Render Pipeline/StencilDeferred", true, true, true)]
  528. [TestCase("Hidden/Universal Render Pipeline/UberPost", true, true, true)]
  529. [TestCase("Hidden/Universal Render Pipeline/ScreenSpaceShadows", true, true, true)]
  530. [TestCase("Hidden/Universal Render Pipeline/ScreenSpaceAmbientOcclusion", true, true, true)]
  531. [TestCase("Hidden/Universal Render Pipeline/DBufferClear", true, true, true)]
  532. [TestCase("Hidden/Universal Render Pipeline/CameraMotionVectors", true, true, true)]
  533. [TestCase("Hidden/Universal Render Pipeline/CopyDepth", true, true, true)]
  534. [TestCase("Hidden/Universal Render Pipeline/SubpixelMorphologicalAntialiasing", true, true, true)]
  535. public void TestStripUnsupportedVariants(string shaderName, bool expectedDirLightmap, bool expectedLightmapProbes, bool expectedEditorVizualization)
  536. {
  537. Shader shader = Shader.Find(shaderName);
  538. StripUnsupportedVariants_DirectionalLightmap(shader, expectedDirLightmap);
  539. StripUnsupportedVariants_EditorVisualization(shader, expectedEditorVizualization);
  540. }
  541. public void StripUnsupportedVariants_DirectionalLightmap(Shader shader, bool expectedDirLightmap)
  542. {
  543. TestHelper helper;
  544. helper = new TestHelper(shader, ShaderFeatures.None);
  545. helper.IsFalse(helper.stripper.StripUnsupportedVariants_DirectionalLightmap(ref helper.data));
  546. helper.IsFalse(helper.stripper.StripUnsupportedVariants(ref helper.data));
  547. helper = new TestHelper(shader, ShaderFeatures.None);
  548. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.DIRLIGHTMAP_COMBINED};
  549. helper.AreEqual(expectedDirLightmap, helper.stripper.StripUnsupportedVariants_DirectionalLightmap(ref helper.data));
  550. helper.AreEqual(expectedDirLightmap, helper.stripper.StripUnsupportedVariants(ref helper.data));
  551. helper = new TestHelper(shader, ShaderFeatures.None);
  552. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.DIRLIGHTMAP_COMBINED, ShaderKeywordStrings.LIGHTMAP_ON};
  553. helper.IsFalse(helper.stripper.StripUnsupportedVariants_DirectionalLightmap(ref helper.data));
  554. helper.IsFalse(helper.stripper.StripUnsupportedVariants(ref helper.data));
  555. helper = new TestHelper(shader, ShaderFeatures.None);
  556. TestHelper.s_EnabledKeywords = new List<string>{ShaderKeywordStrings.DIRLIGHTMAP_COMBINED, ShaderKeywordStrings.DYNAMICLIGHTMAP_ON};
  557. helper.IsFalse(helper.stripper.StripUnsupportedVariants_DirectionalLightmap(ref helper.data));
  558. helper.IsFalse(helper.stripper.StripUnsupportedVariants(ref helper.data));
  559. }
  560. public void StripUnsupportedVariants_EditorVisualization(Shader shader, bool expectedEditorVizualization)
  561. {
  562. TestHelper helper;
  563. helper = new TestHelper(shader, ShaderFeatures.None);
  564. helper.IsFalse(helper.stripper.StripUnsupportedVariants_EditorVisualization(ref helper.data));
  565. helper.IsFalse(helper.stripper.StripUnsupportedVariants(ref helper.data));
  566. helper = new TestHelper(shader, ShaderFeatures.None);
  567. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.EDITOR_VISUALIZATION };
  568. helper.AreEqual(expectedEditorVizualization, helper.stripper.StripUnsupportedVariants_EditorVisualization(ref helper.data));
  569. helper.AreEqual(expectedEditorVizualization, helper.stripper.StripUnsupportedVariants(ref helper.data));
  570. }
  571. /*****************************************************
  572. * Unused Features
  573. *****************************************************/
  574. [TestCase(null)]
  575. [TestCase("")]
  576. [TestCase("Universal Render Pipeline/Lit")]
  577. [TestCase("Universal Render Pipeline/Simple Lit")]
  578. [TestCase("Universal Render Pipeline/Unlit")]
  579. [TestCase("Universal Render Pipeline/Terrain/Lit")]
  580. [TestCase("Universal Render Pipeline/Particles/Lit")]
  581. [TestCase("Universal Render Pipeline/Particles/Simple Lit")]
  582. [TestCase("Universal Render Pipeline/Particles/Unlit")]
  583. [TestCase("Universal Render Pipeline/Baked Lit")]
  584. [TestCase("Universal Render Pipeline/Nature/SpeedTree7")]
  585. [TestCase("Universal Render Pipeline/Nature/SpeedTree7 Billboard")]
  586. [TestCase("Universal Render Pipeline/Nature/SpeedTree8_PBRLit")]
  587. [TestCase("Universal Render Pipeline/Complex Lit")]
  588. [TestCase("Hidden/Universal Render Pipeline/BokehDepthOfField")]
  589. [TestCase("Hidden/Universal Render Pipeline/GaussianDepthOfField")]
  590. [TestCase("Hidden/Universal Render Pipeline/CameraMotionBlur")]
  591. [TestCase("Hidden/Universal Render Pipeline/PaniniProjection")]
  592. [TestCase("Hidden/Universal Render Pipeline/Bloom")]
  593. [TestCase("Hidden/Universal Render Pipeline/StencilDeferred")]
  594. [TestCase("Hidden/Universal Render Pipeline/UberPost")]
  595. [TestCase("Hidden/Universal Render Pipeline/ScreenSpaceShadows")]
  596. [TestCase("Hidden/Universal Render Pipeline/ScreenSpaceAmbientOcclusion")]
  597. [TestCase("Hidden/Universal Render Pipeline/DBufferClear")]
  598. [TestCase("Hidden/Universal Render Pipeline/CameraMotionVectors")]
  599. [TestCase("Hidden/Universal Render Pipeline/CopyDepth")]
  600. [TestCase("Hidden/Universal Render Pipeline/SubpixelMorphologicalAntialiasing")]
  601. [TestCase("Hidden/Universal Render Pipeline/LensFlareDataDriven")]
  602. [TestCase("Hidden/Universal Render Pipeline/LensFlareScreenSpace")]
  603. [TestCase("Hidden/Universal Render Pipeline/XR/XROcclusionMesh")]
  604. [TestCase("Hidden/Universal Render Pipeline/XR/XRMirrorView")]
  605. [TestCase("Hidden/Universal Render Pipeline/XR/XRMotionVector")]
  606. public void TestStripUnusedFeatures(string shaderName)
  607. {
  608. Shader shader = Shader.Find(shaderName);
  609. TestStripUnusedFeatures_DebugDisplay(shader);
  610. TestStripUnusedFeatures_ScreenCoordOverride(shader);
  611. TestStripUnusedFeatures_PunctualLightShadows(shader);
  612. TestStripUnusedFeatures_FoveatedRendering(shader);
  613. TestStripUnusedFeatures_DeferredRendering(shader);
  614. TestStripUnusedFeatures_MainLightShadows(shader);
  615. TestStripUnusedFeatures_AdditionalLightShadows(shader);
  616. TestStripUnusedFeatures_MixedLighting(shader);
  617. TestStripUnusedFeatures_SoftShadows(shader);
  618. TestStripUnusedFeatures_HDRGrading(shader);
  619. TestStripUnusedFeatures_UseFastSRGBLinearConversion(shader);
  620. TestStripUnusedFeatures_LightLayers(shader);
  621. TestStripUnusedFeatures_RenderPassEnabled(shader);
  622. TestStripUnusedFeatures_ReflectionProbes(shader);
  623. TestStripUnusedFeatures_ForwardPlus(shader);
  624. TestStripUnusedFeatures_AdditionalLights(shader);
  625. TestStripUnusedFeatures_ScreenSpaceOcclusion(shader);
  626. TestStripUnusedFeatures_DecalsDbuffer(shader);
  627. TestStripUnusedFeatures_DecalsNormalBlend(shader);
  628. TestStripUnusedFeatures_DecalLayers(shader);
  629. TestStripUnusedFeatures_WriteRenderingLayers(shader);
  630. TestStripUnusedFeatures_AccurateGbufferNormals(shader);
  631. TestStripUnusedFeatures_LightCookies(shader);
  632. TestStripUnusedFeatures_ProbesVolumes(shader);
  633. TestStripUnusedFeatures_SHAuto(shader);
  634. TestStripUnusedFeatures_DataDrivenLensFlare(shader);
  635. TestStripUnusedFeatures_ScreenSpaceLensFlare(shader);
  636. TestStripUnusedFeatures_XR(shader);
  637. }
  638. public void TestStripUnusedFeatures_DebugDisplay(Shader shader)
  639. {
  640. TestHelper helper;
  641. helper = new TestHelper(shader, ShaderFeatures.None);
  642. helper.data.stripDebugDisplayShaders = false;
  643. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DEBUG_DISPLAY};
  644. helper.IsFalse(helper.stripper.StripUnusedFeatures_DebugDisplay(ref helper.data));
  645. helper = new TestHelper(shader, ShaderFeatures.None);
  646. helper.data.stripDebugDisplayShaders = false;
  647. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DEBUG_DISPLAY};
  648. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DEBUG_DISPLAY};
  649. helper.IsFalse(helper.stripper.StripUnusedFeatures_DebugDisplay(ref helper.data));
  650. helper = new TestHelper(shader, ShaderFeatures.None);
  651. helper.data.stripDebugDisplayShaders = true;
  652. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DEBUG_DISPLAY};
  653. helper.IsFalse(helper.stripper.StripUnusedFeatures_DebugDisplay(ref helper.data));
  654. helper = new TestHelper(shader, ShaderFeatures.None);
  655. helper.data.stripDebugDisplayShaders = true;
  656. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DEBUG_DISPLAY};
  657. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DEBUG_DISPLAY};
  658. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DebugDisplay(ref helper.data));
  659. }
  660. public void TestStripUnusedFeatures_ScreenCoordOverride(Shader shader)
  661. {
  662. TestHelper helper;
  663. helper = new TestHelper(shader, ShaderFeatures.None);
  664. helper.data.stripScreenCoordOverrideVariants = false;
  665. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.SCREEN_COORD_OVERRIDE};
  666. helper.IsFalse(helper.stripper.StripUnusedFeatures_ScreenCoordOverride(ref helper.data));
  667. helper = new TestHelper(shader, ShaderFeatures.None);
  668. helper.data.stripScreenCoordOverrideVariants = false;
  669. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.SCREEN_COORD_OVERRIDE};
  670. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.SCREEN_COORD_OVERRIDE};
  671. helper.IsFalse(helper.stripper.StripUnusedFeatures_ScreenCoordOverride(ref helper.data));
  672. helper = new TestHelper(shader, ShaderFeatures.None);
  673. helper.data.stripScreenCoordOverrideVariants = true;
  674. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.SCREEN_COORD_OVERRIDE};
  675. helper.IsFalse(helper.stripper.StripUnusedFeatures_ScreenCoordOverride(ref helper.data));
  676. helper = new TestHelper(shader, ShaderFeatures.None);
  677. helper.data.stripScreenCoordOverrideVariants = true;
  678. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.SCREEN_COORD_OVERRIDE};
  679. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.SCREEN_COORD_OVERRIDE};
  680. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ScreenCoordOverride(ref helper.data));
  681. }
  682. public void TestStripUnusedFeatures_PunctualLightShadows(Shader shader)
  683. {
  684. TestHelper helper;
  685. helper = new TestHelper(shader, ShaderFeatures.None);
  686. helper.data.passType = PassType.ForwardBase;
  687. helper.IsFalse(helper.stripper.StripUnusedFeatures_PunctualLightShadows(ref helper.data));
  688. helper = new TestHelper(shader, ShaderFeatures.None);
  689. helper.data.passType = PassType.ShadowCaster;
  690. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.CastingPunctualLightShadow };
  691. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_PunctualLightShadows(ref helper.data));
  692. helper = new TestHelper(shader, ShaderFeatures.MainLightShadows);
  693. helper.data.passType = PassType.ShadowCaster;
  694. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.CastingPunctualLightShadow };
  695. helper.IsFalse(helper.stripper.StripUnusedFeatures_PunctualLightShadows(ref helper.data));
  696. helper = new TestHelper(shader, ShaderFeatures.MainLightShadows);
  697. helper.data.passType = PassType.ShadowCaster;
  698. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.CastingPunctualLightShadow };
  699. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.CastingPunctualLightShadow };
  700. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_PunctualLightShadows(ref helper.data));
  701. helper = new TestHelper(shader, ShaderFeatures.MainLightShadowsCascade);
  702. helper.data.passType = PassType.ShadowCaster;
  703. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.CastingPunctualLightShadow };
  704. helper.IsFalse(helper.stripper.StripUnusedFeatures_PunctualLightShadows(ref helper.data));
  705. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceShadows);
  706. helper.data.passType = PassType.ShadowCaster;
  707. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.CastingPunctualLightShadow };
  708. helper.IsFalse(helper.stripper.StripUnusedFeatures_PunctualLightShadows(ref helper.data));
  709. helper = new TestHelper(shader, ShaderFeatures.MainLightShadows | ShaderFeatures.AdditionalLightShadows);
  710. helper.data.passType = PassType.ShadowCaster;
  711. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.CastingPunctualLightShadow };
  712. helper.IsFalse(helper.stripper.StripUnusedFeatures_PunctualLightShadows(ref helper.data));
  713. helper = new TestHelper(shader, ShaderFeatures.MainLightShadows | ShaderFeatures.AdditionalLightShadows);
  714. helper.data.passType = PassType.ShadowCaster;
  715. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.CastingPunctualLightShadow };
  716. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.CastingPunctualLightShadow };
  717. helper.IsFalse(helper.stripper.StripUnusedFeatures_PunctualLightShadows(ref helper.data));
  718. }
  719. public void TestStripUnusedFeatures_FoveatedRendering(Shader shader)
  720. {
  721. TestHelper helper;
  722. helper = new TestHelper(shader, ShaderFeatures.None);
  723. helper.data.shaderCompilerPlatform = ShaderCompilerPlatform.None;
  724. helper.IsFalse(helper.stripper.StripUnusedFeatures_FoveatedRendering(ref helper.data));
  725. helper = new TestHelper(shader, ShaderFeatures.None);
  726. helper.data.shaderCompilerPlatform = ShaderCompilerPlatform.None;
  727. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.FoveatedRenderingNonUniformRaster};
  728. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_FoveatedRendering(ref helper.data));
  729. }
  730. public void TestStripUnusedFeatures_SHAuto(Shader shader)
  731. {
  732. TestHelper helper;
  733. List<string> shShaderKeywords = new List<string>() { ShaderKeywordStrings.EVALUATE_SH_VERTEX, ShaderKeywordStrings.EVALUATE_SH_MIXED };
  734. // None, should not strip any variant(stripping handled by ShaderKeywordFilter system instead).
  735. helper = new TestHelper(shader, ShaderFeatures.None);
  736. TestHelper.s_PassKeywords = shShaderKeywords;
  737. helper.IsFalse(helper.stripper.StripUnusedFeatures_SHAuto(ref helper.data, ref helper.featureStripTool));
  738. helper = new TestHelper(shader, ShaderFeatures.None);
  739. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.EVALUATE_SH_VERTEX };
  740. TestHelper.s_PassKeywords = shShaderKeywords;
  741. helper.IsFalse(helper.stripper.StripUnusedFeatures_SHAuto(ref helper.data, ref helper.featureStripTool));
  742. helper = new TestHelper(shader, ShaderFeatures.None);
  743. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.EVALUATE_SH_MIXED };
  744. TestHelper.s_PassKeywords = shShaderKeywords;
  745. helper.IsFalse(helper.stripper.StripUnusedFeatures_SHAuto(ref helper.data, ref helper.featureStripTool));
  746. // ShaderFeatures.AutoSHMode | AutoSHModePerVertex
  747. helper = new TestHelper(shader, ShaderFeatures.AutoSHMode | ShaderFeatures.AutoSHModePerVertex);
  748. TestHelper.s_PassKeywords = shShaderKeywords;
  749. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_SHAuto(ref helper.data, ref helper.featureStripTool));
  750. helper = new TestHelper(shader, ShaderFeatures.AutoSHMode | ShaderFeatures.AutoSHModePerVertex);
  751. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.EVALUATE_SH_VERTEX };
  752. TestHelper.s_PassKeywords = shShaderKeywords;
  753. helper.IsFalse(helper.stripper.StripUnusedFeatures_SHAuto(ref helper.data, ref helper.featureStripTool));
  754. helper = new TestHelper(shader, ShaderFeatures.AutoSHMode | ShaderFeatures.AutoSHModePerVertex);
  755. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.EVALUATE_SH_MIXED };
  756. TestHelper.s_PassKeywords = shShaderKeywords;
  757. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_SHAuto(ref helper.data, ref helper.featureStripTool));
  758. // ShaderFeatures.AutoSHMode
  759. helper = new TestHelper(shader, ShaderFeatures.AutoSHMode);
  760. TestHelper.s_PassKeywords = shShaderKeywords;
  761. helper.IsFalse(helper.stripper.StripUnusedFeatures_SHAuto(ref helper.data, ref helper.featureStripTool));
  762. helper = new TestHelper(shader, ShaderFeatures.AutoSHMode);
  763. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.EVALUATE_SH_VERTEX };
  764. TestHelper.s_PassKeywords = shShaderKeywords;
  765. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_SHAuto(ref helper.data, ref helper.featureStripTool));
  766. helper = new TestHelper(shader, ShaderFeatures.AutoSHMode);
  767. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.EVALUATE_SH_MIXED };
  768. TestHelper.s_PassKeywords = shShaderKeywords;
  769. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_SHAuto(ref helper.data, ref helper.featureStripTool));
  770. }
  771. public void TestStripUnusedFeatures_ScreenSpaceLensFlare(Shader shader)
  772. {
  773. TestHelper helper;
  774. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceLensFlare);
  775. helper.IsFalse(helper.stripper.StripUnusedFeatures_ScreenSpaceLensFlare(ref helper.data));
  776. helper = new TestHelper(shader, ShaderFeatures.None);
  777. bool isLensFlareScreenSpace = shader != null && shader.name == "Hidden/Universal Render Pipeline/LensFlareScreenSpace";
  778. //We should strip the shader only if it's the lens flare one.
  779. helper.IsTrue(isLensFlareScreenSpace ? helper.stripper.StripUnusedFeatures_ScreenSpaceLensFlare(ref helper.data) : !helper.stripper.StripUnusedFeatures_ScreenSpaceLensFlare(ref helper.data));
  780. }
  781. public void TestStripUnusedFeatures_DataDrivenLensFlare(Shader shader)
  782. {
  783. TestHelper helper;
  784. helper = new TestHelper(shader, ShaderFeatures.DataDrivenLensFlare);
  785. helper.IsFalse(helper.stripper.StripUnusedFeatures_DataDrivenLensFlare(ref helper.data));
  786. helper = new TestHelper(shader, ShaderFeatures.None);
  787. bool isLensFlareDataDriven = shader != null && shader.name == "Hidden/Universal Render Pipeline/LensFlareDataDriven";
  788. //We should strip the shader only if it's the lens flare one.
  789. helper.IsTrue(isLensFlareDataDriven ? helper.stripper.StripUnusedFeatures_DataDrivenLensFlare(ref helper.data) : !helper.stripper.StripUnusedFeatures_DataDrivenLensFlare(ref helper.data));
  790. }
  791. public void TestStripUnusedFeatures_XR(Shader shader)
  792. {
  793. TestHelper helper;
  794. helper = new TestHelper(shader, ShaderFeatures.None, stripUnusedXRVariants: false);
  795. helper.IsFalse(helper.stripper.StripUnusedFeatures_XROcclusionMesh(ref helper.data));
  796. helper.IsFalse(helper.stripper.StripUnusedFeatures_XRMirrorView(ref helper.data));
  797. helper.IsFalse(helper.stripper.StripUnusedFeatures_XRMotionVector(ref helper.data));
  798. helper = new TestHelper(shader, ShaderFeatures.None, stripUnusedXRVariants: true);
  799. bool isXROcclusion = shader != null && shader.name == "Hidden/Universal Render Pipeline/XR/XROcclusionMesh";
  800. bool isXRMirror = shader != null && shader.name == "Hidden/Universal Render Pipeline/XR/XRMirrorView";
  801. bool isXRMotionVector = shader != null && shader.name == "Hidden/Universal Render Pipeline/XR/XRMotionVector";
  802. //We should strip the shader only if it's the XR shader.
  803. helper.IsTrue(isXROcclusion ? helper.stripper.StripUnusedFeatures_XROcclusionMesh(ref helper.data) : !helper.stripper.StripUnusedFeatures_XROcclusionMesh(ref helper.data));
  804. helper.IsTrue(isXRMirror ? helper.stripper.StripUnusedFeatures_XRMirrorView(ref helper.data) : !helper.stripper.StripUnusedFeatures_XRMirrorView(ref helper.data));
  805. helper.IsTrue(isXRMotionVector ? helper.stripper.StripUnusedFeatures_XRMotionVector(ref helper.data) : !helper.stripper.StripUnusedFeatures_XRMotionVector(ref helper.data));
  806. }
  807. public void TestStripUnusedFeatures_DeferredRendering(Shader shader)
  808. {
  809. TestHelper helper;
  810. helper = new TestHelper(shader, ShaderFeatures.None);
  811. helper.data.passName = ShaderScriptableStripper.kPassNameUniversal2D;
  812. helper.IsFalse(helper.stripper.StripUnusedFeatures_DeferredRendering(ref helper.data));
  813. helper = new TestHelper(shader, ShaderFeatures.None);
  814. helper.data.passName = ShaderScriptableStripper.kPassNameGBuffer;
  815. helper.IsTrue(helper.stripper.StripUnusedFeatures_DeferredRendering(ref helper.data));
  816. helper = new TestHelper(shader, ShaderFeatures.DeferredShading);
  817. helper.data.passName = ShaderScriptableStripper.kPassNameUniversal2D;
  818. helper.IsFalse(helper.stripper.StripUnusedFeatures_DeferredRendering(ref helper.data));
  819. helper = new TestHelper(shader, ShaderFeatures.DeferredShading);
  820. helper.data.passName = ShaderScriptableStripper.kPassNameGBuffer;
  821. helper.IsFalse(helper.stripper.StripUnusedFeatures_DeferredRendering(ref helper.data));
  822. }
  823. public void TestStripUnusedFeatures_MainLightShadows(Shader shader)
  824. {
  825. TestHelper helper;
  826. List<string> mainLightShadowKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen };
  827. helper = new TestHelper(shader, ShaderFeatures.None, stripUnusedVariants:false);
  828. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  829. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  830. helper = new TestHelper(shader, ShaderFeatures.None);
  831. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  832. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  833. // None
  834. helper = new TestHelper(shader, ShaderFeatures.None);
  835. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadows };
  836. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  837. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  838. helper = new TestHelper(shader, ShaderFeatures.None);
  839. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowCascades };
  840. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  841. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  842. helper = new TestHelper(shader, ShaderFeatures.None);
  843. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowScreen };
  844. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  845. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  846. // MainLightShadows
  847. helper = new TestHelper(shader, ShaderFeatures.MainLightShadows);
  848. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  849. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  850. helper = new TestHelper(shader, ShaderFeatures.MainLightShadows);
  851. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadows };
  852. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  853. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  854. helper = new TestHelper(shader, ShaderFeatures.MainLightShadows);
  855. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowCascades };
  856. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  857. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  858. helper = new TestHelper(shader, ShaderFeatures.MainLightShadows);
  859. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowScreen };
  860. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  861. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  862. // MainLightShadowsCascade
  863. helper = new TestHelper(shader, ShaderFeatures.MainLightShadowsCascade);
  864. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  865. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  866. helper = new TestHelper(shader, ShaderFeatures.MainLightShadowsCascade);
  867. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadows };
  868. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  869. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  870. helper = new TestHelper(shader, ShaderFeatures.MainLightShadowsCascade);
  871. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowCascades };
  872. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  873. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  874. helper = new TestHelper(shader, ShaderFeatures.MainLightShadowsCascade);
  875. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowScreen };
  876. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  877. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  878. // ScreenSpaceShadows
  879. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceShadows);
  880. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  881. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  882. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceShadows);
  883. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadows };
  884. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  885. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  886. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceShadows);
  887. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowCascades };
  888. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  889. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  890. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceShadows);
  891. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowScreen };
  892. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  893. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  894. // ShadowsKeepOffVariants
  895. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants);
  896. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  897. // ShaderFeatures.ShadowsKeepOffVariants
  898. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants);
  899. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  900. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  901. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants);
  902. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadows };
  903. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  904. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  905. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants);
  906. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowCascades };
  907. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  908. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  909. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants);
  910. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowScreen };
  911. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  912. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  913. // ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.MainLightShadows
  914. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.MainLightShadows);
  915. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  916. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  917. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.MainLightShadows);
  918. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadows };
  919. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  920. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  921. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.MainLightShadows);
  922. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowCascades };
  923. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  924. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  925. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.MainLightShadows);
  926. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowScreen };
  927. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  928. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  929. // ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.MainLightShadowsCascade
  930. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.MainLightShadowsCascade);
  931. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  932. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  933. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.MainLightShadowsCascade);
  934. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadows };
  935. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  936. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  937. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.MainLightShadowsCascade);
  938. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowCascades };
  939. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  940. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  941. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.MainLightShadowsCascade);
  942. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowScreen };
  943. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  944. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  945. // ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.
  946. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.ScreenSpaceShadows);
  947. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  948. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  949. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.ScreenSpaceShadows);
  950. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadows };
  951. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  952. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  953. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.ScreenSpaceShadows);
  954. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowCascades };
  955. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  956. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  957. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.ScreenSpaceShadows);
  958. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MainLightShadowScreen };
  959. TestHelper.s_PassKeywords = mainLightShadowKeywords;
  960. helper.IsFalse(helper.stripper.StripUnusedFeatures_MainLightShadows(ref helper.data, ref helper.featureStripTool));
  961. }
  962. public void TestStripUnusedFeatures_AdditionalLightShadows(Shader shader)
  963. {
  964. TestHelper helper;
  965. List<string> additionalLightShadowKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightShadows };
  966. // None
  967. helper = new TestHelper(shader, ShaderFeatures.None);
  968. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLightShadows(ref helper.data, ref helper.featureStripTool));
  969. helper = new TestHelper(shader, ShaderFeatures.None);
  970. TestHelper.s_PassKeywords = additionalLightShadowKeywords;
  971. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLightShadows(ref helper.data, ref helper.featureStripTool));
  972. helper = new TestHelper(shader, ShaderFeatures.None);
  973. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightShadows };
  974. TestHelper.s_PassKeywords = additionalLightShadowKeywords;
  975. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLightShadows(ref helper.data, ref helper.featureStripTool));
  976. // AdditionalLightShadows
  977. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightShadows);
  978. TestHelper.s_PassKeywords = additionalLightShadowKeywords;
  979. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLightShadows(ref helper.data, ref helper.featureStripTool));
  980. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightShadows);
  981. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightShadows };
  982. TestHelper.s_PassKeywords = additionalLightShadowKeywords;
  983. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLightShadows(ref helper.data, ref helper.featureStripTool));
  984. // ShadowsKeepOffVariants
  985. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants);
  986. TestHelper.s_PassKeywords = additionalLightShadowKeywords;
  987. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLightShadows(ref helper.data, ref helper.featureStripTool));
  988. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants);
  989. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightShadows };
  990. TestHelper.s_PassKeywords = additionalLightShadowKeywords;
  991. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLightShadows(ref helper.data, ref helper.featureStripTool));
  992. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.AdditionalLightShadows);
  993. TestHelper.s_PassKeywords = additionalLightShadowKeywords;
  994. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLightShadows(ref helper.data, ref helper.featureStripTool));
  995. helper = new TestHelper(shader, ShaderFeatures.ShadowsKeepOffVariants | ShaderFeatures.AdditionalLightShadows);
  996. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightShadows };
  997. TestHelper.s_PassKeywords = additionalLightShadowKeywords;
  998. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLightShadows(ref helper.data, ref helper.featureStripTool));
  999. }
  1000. public void TestStripUnusedFeatures_MixedLighting(Shader shader)
  1001. {
  1002. TestHelper helper;
  1003. // None
  1004. helper = new TestHelper(shader, ShaderFeatures.None);
  1005. helper.IsFalse(helper.stripper.StripUnusedFeatures_MixedLighting(ref helper.data));
  1006. helper = new TestHelper(shader, ShaderFeatures.None);
  1007. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MixedLightingSubtractive };
  1008. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MixedLighting(ref helper.data));
  1009. helper = new TestHelper(shader, ShaderFeatures.None);
  1010. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.LightmapShadowMixing };
  1011. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MixedLighting(ref helper.data));
  1012. helper = new TestHelper(shader, ShaderFeatures.None);
  1013. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ShadowsShadowMask };
  1014. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_MixedLighting(ref helper.data));
  1015. // MixedLighting
  1016. helper = new TestHelper(shader, ShaderFeatures.MixedLighting);
  1017. helper.IsFalse(helper.stripper.StripUnusedFeatures_MixedLighting(ref helper.data));
  1018. helper = new TestHelper(shader, ShaderFeatures.MixedLighting);
  1019. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.MixedLightingSubtractive };
  1020. helper.IsFalse(helper.stripper.StripUnusedFeatures_MixedLighting(ref helper.data));
  1021. helper = new TestHelper(shader, ShaderFeatures.MixedLighting);
  1022. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.LightmapShadowMixing };
  1023. helper.IsFalse(helper.stripper.StripUnusedFeatures_MixedLighting(ref helper.data));
  1024. helper = new TestHelper(shader, ShaderFeatures.MixedLighting);
  1025. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ShadowsShadowMask };
  1026. helper.IsFalse(helper.stripper.StripUnusedFeatures_MixedLighting(ref helper.data));
  1027. }
  1028. public void TestStripUnusedFeatures_SoftShadows(Shader shader)
  1029. {
  1030. TestHelper helper;
  1031. helper = new TestHelper(shader, ShaderFeatures.None);
  1032. helper.IsFalse(helper.stripper.StripUnusedFeatures_SoftShadows(ref helper.featureStripTool));
  1033. helper = new TestHelper(shader, ShaderFeatures.None);
  1034. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.SoftShadows };
  1035. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_SoftShadows(ref helper.featureStripTool));
  1036. helper = new TestHelper(shader, ShaderFeatures.SoftShadows);
  1037. helper.IsFalse(helper.stripper.StripUnusedFeatures_SoftShadows(ref helper.featureStripTool));
  1038. helper = new TestHelper(shader, ShaderFeatures.SoftShadows);
  1039. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.SoftShadows };
  1040. helper.IsFalse(helper.stripper.StripUnusedFeatures_SoftShadows(ref helper.featureStripTool));
  1041. helper = new TestHelper(shader, ShaderFeatures.SoftShadows);
  1042. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.SoftShadowsLow };
  1043. helper.IsFalse(helper.stripper.StripUnusedFeatures_SoftShadows(ref helper.featureStripTool));
  1044. helper = new TestHelper(shader, ShaderFeatures.None);
  1045. helper.IsFalse(helper.stripper.StripUnusedFeatures_SoftShadowsQualityLevels(ref helper.data, ref helper.featureStripTool));
  1046. helper = new TestHelper(shader, ShaderFeatures.None);
  1047. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.SoftShadowsLow };
  1048. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_SoftShadowsQualityLevels(ref helper.data, ref helper.featureStripTool));
  1049. helper = new TestHelper(shader, ShaderFeatures.SoftShadowsLow);
  1050. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.SoftShadowsLow };
  1051. helper.IsFalse(helper.stripper.StripUnusedFeatures_SoftShadowsQualityLevels(ref helper.data, ref helper.featureStripTool));
  1052. helper = new TestHelper(shader, ShaderFeatures.SoftShadowsLow);
  1053. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.SoftShadowsLow};
  1054. helper.data.stripSoftShadowQualityLevels = true;
  1055. helper.IsTrue(helper.stripper.StripUnusedFeatures_SoftShadowsQualityLevels(ref helper.data, ref helper.featureStripTool));
  1056. helper = new TestHelper(shader, ShaderFeatures.SoftShadowsLow);
  1057. helper.data.stripSoftShadowQualityLevels = true;
  1058. helper.IsTrue(helper.stripper.StripUnusedFeatures_SoftShadowsQualityLevels(ref helper.data, ref helper.featureStripTool));
  1059. }
  1060. public void TestStripUnusedFeatures_HDRGrading(Shader shader)
  1061. {
  1062. TestHelper helper;
  1063. helper = new TestHelper(shader, ShaderFeatures.None);
  1064. helper.IsFalse(helper.stripper.StripUnusedFeatures_HDRGrading(ref helper.featureStripTool));
  1065. helper = new TestHelper(shader, ShaderFeatures.None);
  1066. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.HDRGrading };
  1067. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_HDRGrading(ref helper.featureStripTool));
  1068. helper = new TestHelper(shader, ShaderFeatures.HdrGrading);
  1069. helper.IsFalse(helper.stripper.StripUnusedFeatures_HDRGrading(ref helper.featureStripTool));
  1070. helper = new TestHelper(shader, ShaderFeatures.HdrGrading);
  1071. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.HDRGrading };
  1072. helper.IsFalse(helper.stripper.StripUnusedFeatures_HDRGrading(ref helper.featureStripTool));
  1073. }
  1074. public void TestStripUnusedFeatures_UseFastSRGBLinearConversion(Shader shader)
  1075. {
  1076. TestHelper helper;
  1077. helper = new TestHelper(shader, ShaderFeatures.None);
  1078. helper.IsFalse(helper.stripper.StripUnusedFeatures_UseFastSRGBLinearConversion(ref helper.featureStripTool));
  1079. helper = new TestHelper(shader, ShaderFeatures.None);
  1080. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.UseFastSRGBLinearConversion };
  1081. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_UseFastSRGBLinearConversion(ref helper.featureStripTool));
  1082. helper = new TestHelper(shader, ShaderFeatures.UseFastSRGBLinearConversion);
  1083. helper.IsFalse(helper.stripper.StripUnusedFeatures_UseFastSRGBLinearConversion(ref helper.featureStripTool));
  1084. helper = new TestHelper(shader, ShaderFeatures.UseFastSRGBLinearConversion);
  1085. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.UseFastSRGBLinearConversion };
  1086. helper.IsFalse(helper.stripper.StripUnusedFeatures_UseFastSRGBLinearConversion(ref helper.featureStripTool));
  1087. }
  1088. public void TestStripUnusedFeatures_LightLayers(Shader shader)
  1089. {
  1090. TestHelper helper;
  1091. helper = new TestHelper(shader, ShaderFeatures.None);
  1092. helper.IsFalse(helper.stripper.StripUnusedFeatures_LightLayers(ref helper.featureStripTool));
  1093. helper = new TestHelper(shader, ShaderFeatures.None);
  1094. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.LightLayers };
  1095. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_LightLayers(ref helper.featureStripTool));
  1096. helper = new TestHelper(shader, ShaderFeatures.LightLayers);
  1097. helper.IsFalse(helper.stripper.StripUnusedFeatures_LightLayers(ref helper.featureStripTool));
  1098. helper = new TestHelper(shader, ShaderFeatures.LightLayers);
  1099. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.LightLayers };
  1100. helper.IsFalse(helper.stripper.StripUnusedFeatures_LightLayers(ref helper.featureStripTool));
  1101. }
  1102. public void TestStripUnusedFeatures_RenderPassEnabled(Shader shader)
  1103. {
  1104. TestHelper helper;
  1105. helper = new TestHelper(shader, ShaderFeatures.None);
  1106. helper.IsFalse(helper.stripper.StripUnusedFeatures_RenderPassEnabled(ref helper.featureStripTool));
  1107. helper = new TestHelper(shader, ShaderFeatures.None);
  1108. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.RenderPassEnabled };
  1109. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_RenderPassEnabled(ref helper.featureStripTool));
  1110. helper = new TestHelper(shader, ShaderFeatures.RenderPassEnabled);
  1111. helper.IsFalse(helper.stripper.StripUnusedFeatures_RenderPassEnabled(ref helper.featureStripTool));
  1112. helper = new TestHelper(shader, ShaderFeatures.RenderPassEnabled);
  1113. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.RenderPassEnabled };
  1114. helper.IsFalse(helper.stripper.StripUnusedFeatures_RenderPassEnabled(ref helper.featureStripTool));
  1115. }
  1116. public void TestStripUnusedFeatures_ReflectionProbes(Shader shader)
  1117. {
  1118. TestHelper helper;
  1119. helper = new TestHelper(shader, ShaderFeatures.None);
  1120. helper.IsFalse(helper.stripper.StripUnusedFeatures_ReflectionProbes(ref helper.featureStripTool));
  1121. helper = new TestHelper(shader, ShaderFeatures.None);
  1122. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ReflectionProbeBlending };
  1123. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ReflectionProbes(ref helper.featureStripTool));
  1124. helper = new TestHelper(shader, ShaderFeatures.None);
  1125. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ReflectionProbeBoxProjection };
  1126. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ReflectionProbes(ref helper.featureStripTool));
  1127. helper = new TestHelper(shader, ShaderFeatures.ReflectionProbeBlending);
  1128. helper.IsFalse(helper.stripper.StripUnusedFeatures_ReflectionProbes(ref helper.featureStripTool));
  1129. helper = new TestHelper(shader, ShaderFeatures.ReflectionProbeBlending);
  1130. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ReflectionProbeBlending };
  1131. helper.IsFalse(helper.stripper.StripUnusedFeatures_ReflectionProbes(ref helper.featureStripTool));
  1132. helper = new TestHelper(shader, ShaderFeatures.ReflectionProbeBlending);
  1133. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ReflectionProbeBoxProjection };
  1134. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ReflectionProbes(ref helper.featureStripTool));
  1135. helper = new TestHelper(shader, ShaderFeatures.ReflectionProbeBoxProjection);
  1136. helper.IsFalse(helper.stripper.StripUnusedFeatures_ReflectionProbes(ref helper.featureStripTool));
  1137. helper = new TestHelper(shader, ShaderFeatures.ReflectionProbeBoxProjection);
  1138. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ReflectionProbeBlending };
  1139. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ReflectionProbes(ref helper.featureStripTool));
  1140. helper = new TestHelper(shader, ShaderFeatures.ReflectionProbeBoxProjection);
  1141. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ReflectionProbeBoxProjection };
  1142. helper.IsFalse(helper.stripper.StripUnusedFeatures_ReflectionProbes(ref helper.featureStripTool));
  1143. }
  1144. public void TestStripUnusedFeatures_ForwardPlus(Shader shader)
  1145. {
  1146. TestHelper helper;
  1147. helper = new TestHelper(shader, ShaderFeatures.None);
  1148. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.ForwardPlus };
  1149. helper.IsFalse(helper.stripper.StripUnusedFeatures_ForwardPlus(ref helper.featureStripTool));
  1150. helper = new TestHelper(shader, ShaderFeatures.None);
  1151. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ForwardPlus };
  1152. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.ForwardPlus };
  1153. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ForwardPlus(ref helper.featureStripTool));
  1154. helper = new TestHelper(shader, ShaderFeatures.ForwardPlus);
  1155. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.ForwardPlus };
  1156. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ForwardPlus(ref helper.featureStripTool));
  1157. helper = new TestHelper(shader, ShaderFeatures.ForwardPlus);
  1158. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ForwardPlus };
  1159. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.ForwardPlus };
  1160. helper.IsFalse(helper.stripper.StripUnusedFeatures_ForwardPlus(ref helper.featureStripTool));
  1161. }
  1162. public void TestStripUnusedFeatures_AdditionalLights(Shader shader)
  1163. {
  1164. TestHelper helper;
  1165. List<string> additionalLightKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel };
  1166. // None
  1167. helper = new TestHelper(shader, ShaderFeatures.None);
  1168. TestHelper.s_PassKeywords = additionalLightKeywords;
  1169. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1170. helper = new TestHelper(shader, ShaderFeatures.None);
  1171. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsVertex };
  1172. TestHelper.s_PassKeywords = additionalLightKeywords;
  1173. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1174. helper = new TestHelper(shader, ShaderFeatures.None);
  1175. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsPixel };
  1176. TestHelper.s_PassKeywords = additionalLightKeywords;
  1177. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1178. // AdditionalLightsVertex
  1179. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsVertex);
  1180. TestHelper.s_PassKeywords = additionalLightKeywords;
  1181. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1182. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsVertex);
  1183. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsVertex };
  1184. TestHelper.s_PassKeywords = additionalLightKeywords;
  1185. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1186. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsVertex);
  1187. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsPixel };
  1188. TestHelper.s_PassKeywords = additionalLightKeywords;
  1189. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1190. // AdditionalLightsPixel
  1191. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsPixel);
  1192. TestHelper.s_PassKeywords = additionalLightKeywords;
  1193. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1194. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsPixel);
  1195. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsVertex };
  1196. TestHelper.s_PassKeywords = additionalLightKeywords;
  1197. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1198. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsPixel);
  1199. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsPixel };
  1200. TestHelper.s_PassKeywords = additionalLightKeywords;
  1201. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1202. // AdditionalLightsKeepOffVariants
  1203. // AdditionalLightsKeepOffVariants
  1204. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsKeepOffVariants);
  1205. TestHelper.s_PassKeywords = additionalLightKeywords;
  1206. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1207. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsKeepOffVariants);
  1208. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsVertex };
  1209. TestHelper.s_PassKeywords = additionalLightKeywords;
  1210. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1211. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsKeepOffVariants);
  1212. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsPixel };
  1213. TestHelper.s_PassKeywords = additionalLightKeywords;
  1214. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1215. // AdditionalLightsKeepOffVariants & AdditionalLightsVertex
  1216. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsKeepOffVariants | ShaderFeatures.AdditionalLightsVertex);
  1217. TestHelper.s_PassKeywords = additionalLightKeywords;
  1218. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1219. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsKeepOffVariants | ShaderFeatures.AdditionalLightsVertex);
  1220. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsVertex };
  1221. TestHelper.s_PassKeywords = additionalLightKeywords;
  1222. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1223. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsKeepOffVariants | ShaderFeatures.AdditionalLightsVertex);
  1224. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsPixel };
  1225. TestHelper.s_PassKeywords = additionalLightKeywords;
  1226. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1227. // AdditionalLightsKeepOffVariants & AdditionalLightsPixel
  1228. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsKeepOffVariants | ShaderFeatures.AdditionalLightsPixel);
  1229. TestHelper.s_PassKeywords = additionalLightKeywords;
  1230. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1231. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsKeepOffVariants | ShaderFeatures.AdditionalLightsPixel);
  1232. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsVertex };
  1233. TestHelper.s_PassKeywords = additionalLightKeywords;
  1234. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1235. helper = new TestHelper(shader, ShaderFeatures.AdditionalLightsKeepOffVariants | ShaderFeatures.AdditionalLightsPixel);
  1236. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsPixel };
  1237. TestHelper.s_PassKeywords = additionalLightKeywords;
  1238. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1239. // Forward Plus
  1240. helper = new TestHelper(shader, ShaderFeatures.ForwardPlus);
  1241. TestHelper.s_PassKeywords = additionalLightKeywords;
  1242. helper.IsFalse(helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1243. helper = new TestHelper(shader, ShaderFeatures.ForwardPlus);
  1244. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsVertex };
  1245. TestHelper.s_PassKeywords = additionalLightKeywords;
  1246. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1247. helper = new TestHelper(shader, ShaderFeatures.ForwardPlus);
  1248. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.AdditionalLightsPixel };
  1249. TestHelper.s_PassKeywords = additionalLightKeywords;
  1250. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AdditionalLights(ref helper.data, ref helper.featureStripTool));
  1251. }
  1252. public void TestStripUnusedFeatures_ScreenSpaceOcclusion(Shader shader)
  1253. {
  1254. TestHelper helper;
  1255. // None
  1256. helper = new TestHelper(shader, ShaderFeatures.None);
  1257. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.ScreenSpaceOcclusion};
  1258. helper.IsFalse(helper.stripper.StripUnusedFeatures_ScreenSpaceOcclusion(ref helper.data, ref helper.featureStripTool));
  1259. helper = new TestHelper(shader, ShaderFeatures.None);
  1260. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ScreenSpaceOcclusion };
  1261. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.ScreenSpaceOcclusion};
  1262. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ScreenSpaceOcclusion(ref helper.data, ref helper.featureStripTool));
  1263. // ScreenSpaceOcclusion
  1264. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceOcclusion);
  1265. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.ScreenSpaceOcclusion};
  1266. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ScreenSpaceOcclusion(ref helper.data, ref helper.featureStripTool));
  1267. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceOcclusion);
  1268. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ScreenSpaceOcclusion };
  1269. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.ScreenSpaceOcclusion};
  1270. helper.IsFalse(helper.stripper.StripUnusedFeatures_ScreenSpaceOcclusion(ref helper.data, ref helper.featureStripTool));
  1271. // After Opaque..
  1272. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceOcclusionAfterOpaque);
  1273. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.ScreenSpaceOcclusion};
  1274. helper.IsFalse(helper.stripper.StripUnusedFeatures_ScreenSpaceOcclusion(ref helper.data, ref helper.featureStripTool));
  1275. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceOcclusionAfterOpaque);
  1276. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ScreenSpaceOcclusion };
  1277. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.ScreenSpaceOcclusion};
  1278. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ScreenSpaceOcclusion(ref helper.data, ref helper.featureStripTool));
  1279. // ScreenSpaceOcclusion
  1280. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceOcclusionAfterOpaque | ShaderFeatures.ScreenSpaceOcclusion);
  1281. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.ScreenSpaceOcclusion};
  1282. helper.IsFalse(helper.stripper.StripUnusedFeatures_ScreenSpaceOcclusion(ref helper.data, ref helper.featureStripTool));
  1283. helper = new TestHelper(shader, ShaderFeatures.ScreenSpaceOcclusionAfterOpaque | ShaderFeatures.ScreenSpaceOcclusion);
  1284. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ScreenSpaceOcclusion };
  1285. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.ScreenSpaceOcclusion};
  1286. helper.IsFalse(helper.stripper.StripUnusedFeatures_ScreenSpaceOcclusion(ref helper.data, ref helper.featureStripTool));
  1287. }
  1288. public void TestStripUnusedFeatures_DecalsDbuffer(Shader shader)
  1289. {
  1290. TestHelper helper;
  1291. List<string> passKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1, ShaderKeywordStrings.DBufferMRT2, ShaderKeywordStrings.DBufferMRT3};
  1292. // No Features + Not GL Device
  1293. helper = new TestHelper(shader, ShaderFeatures.None);
  1294. TestHelper.s_PassKeywords = passKeywords;
  1295. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1296. helper = new TestHelper(shader, ShaderFeatures.None);
  1297. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1};
  1298. TestHelper.s_PassKeywords = passKeywords;
  1299. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1300. helper = new TestHelper(shader, ShaderFeatures.None);
  1301. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT2};
  1302. TestHelper.s_PassKeywords = passKeywords;
  1303. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1304. helper = new TestHelper(shader, ShaderFeatures.None);
  1305. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT3};
  1306. TestHelper.s_PassKeywords = passKeywords;
  1307. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1308. helper = new TestHelper(shader, ShaderFeatures.None);
  1309. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1, ShaderKeywordStrings.DBufferMRT2};
  1310. TestHelper.s_PassKeywords = passKeywords;
  1311. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1312. helper = new TestHelper(shader, ShaderFeatures.None);
  1313. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1, ShaderKeywordStrings.DBufferMRT3};
  1314. TestHelper.s_PassKeywords = passKeywords;
  1315. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1316. helper = new TestHelper(shader, ShaderFeatures.None);
  1317. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT2, ShaderKeywordStrings.DBufferMRT3};
  1318. TestHelper.s_PassKeywords = passKeywords;
  1319. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1320. // DBufferMRT1 + Not GL Device
  1321. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT1);
  1322. TestHelper.s_PassKeywords = passKeywords;
  1323. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1324. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT1);
  1325. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1};
  1326. TestHelper.s_PassKeywords = passKeywords;
  1327. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1328. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT1);
  1329. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT2};
  1330. TestHelper.s_PassKeywords = passKeywords;
  1331. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1332. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT1);
  1333. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT3};
  1334. TestHelper.s_PassKeywords = passKeywords;
  1335. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1336. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT1);
  1337. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1, ShaderKeywordStrings.DBufferMRT2};
  1338. TestHelper.s_PassKeywords = passKeywords;
  1339. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1340. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT1);
  1341. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1, ShaderKeywordStrings.DBufferMRT3};
  1342. TestHelper.s_PassKeywords = passKeywords;
  1343. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1344. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT1);
  1345. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT2, ShaderKeywordStrings.DBufferMRT3};
  1346. TestHelper.s_PassKeywords = passKeywords;
  1347. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1348. // DBufferMRT2 + Not GL Device
  1349. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT2);
  1350. TestHelper.s_PassKeywords = passKeywords;
  1351. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1352. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT2);
  1353. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1};
  1354. TestHelper.s_PassKeywords = passKeywords;
  1355. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1356. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT2);
  1357. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT2};
  1358. TestHelper.s_PassKeywords = passKeywords;
  1359. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1360. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT2);
  1361. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT3};
  1362. TestHelper.s_PassKeywords = passKeywords;
  1363. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1364. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT2);
  1365. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1, ShaderKeywordStrings.DBufferMRT2};
  1366. TestHelper.s_PassKeywords = passKeywords;
  1367. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1368. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT2);
  1369. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1, ShaderKeywordStrings.DBufferMRT3};
  1370. TestHelper.s_PassKeywords = passKeywords;
  1371. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1372. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT2);
  1373. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT2, ShaderKeywordStrings.DBufferMRT3};
  1374. TestHelper.s_PassKeywords = passKeywords;
  1375. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1376. // DBufferMRT3 + Not GL Device
  1377. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT3);
  1378. TestHelper.s_PassKeywords = passKeywords;
  1379. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1380. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT3);
  1381. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1};
  1382. TestHelper.s_PassKeywords = passKeywords;
  1383. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1384. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT3);
  1385. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT2};
  1386. TestHelper.s_PassKeywords = passKeywords;
  1387. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1388. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT3);
  1389. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT3};
  1390. TestHelper.s_PassKeywords = passKeywords;
  1391. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1392. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT3);
  1393. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1, ShaderKeywordStrings.DBufferMRT2};
  1394. TestHelper.s_PassKeywords = passKeywords;
  1395. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1396. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT3);
  1397. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1, ShaderKeywordStrings.DBufferMRT3};
  1398. TestHelper.s_PassKeywords = passKeywords;
  1399. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1400. helper = new TestHelper(shader, ShaderFeatures.DBufferMRT3);
  1401. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT2, ShaderKeywordStrings.DBufferMRT3};
  1402. TestHelper.s_PassKeywords = passKeywords;
  1403. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1404. // No Features + GL Device
  1405. helper = new TestHelper(shader, ShaderFeatures.None);
  1406. helper.data.isGLDevice = true;
  1407. TestHelper.s_PassKeywords = passKeywords;
  1408. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1409. helper = new TestHelper(shader, ShaderFeatures.None);
  1410. helper.data.isGLDevice = true;
  1411. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1};
  1412. TestHelper.s_PassKeywords = passKeywords;
  1413. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1414. helper = new TestHelper(shader, ShaderFeatures.None);
  1415. helper.data.isGLDevice = true;
  1416. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT2};
  1417. TestHelper.s_PassKeywords = passKeywords;
  1418. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1419. helper = new TestHelper(shader, ShaderFeatures.None);
  1420. helper.data.isGLDevice = true;
  1421. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT3};
  1422. TestHelper.s_PassKeywords = passKeywords;
  1423. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1424. helper = new TestHelper(shader, ShaderFeatures.None);
  1425. helper.data.isGLDevice = true;
  1426. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1, ShaderKeywordStrings.DBufferMRT2};
  1427. TestHelper.s_PassKeywords = passKeywords;
  1428. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1429. helper = new TestHelper(shader, ShaderFeatures.None);
  1430. helper.data.isGLDevice = true;
  1431. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT1, ShaderKeywordStrings.DBufferMRT3};
  1432. TestHelper.s_PassKeywords = passKeywords;
  1433. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1434. helper = new TestHelper(shader, ShaderFeatures.None);
  1435. helper.data.isGLDevice = true;
  1436. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DBufferMRT2, ShaderKeywordStrings.DBufferMRT3};
  1437. TestHelper.s_PassKeywords = passKeywords;
  1438. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsDbuffer(ref helper.data, ref helper.featureStripTool));
  1439. }
  1440. public void TestStripUnusedFeatures_DecalsNormalBlend(Shader shader)
  1441. {
  1442. TestHelper helper;
  1443. List<string> passKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendLow, ShaderKeywordStrings.DecalNormalBlendMedium, ShaderKeywordStrings.DecalNormalBlendHigh};
  1444. // ShaderFeatures.None
  1445. helper = new TestHelper(shader, ShaderFeatures.None);
  1446. TestHelper.s_PassKeywords = passKeywords;
  1447. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1448. helper = new TestHelper(shader, ShaderFeatures.None);
  1449. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendLow};
  1450. TestHelper.s_PassKeywords = passKeywords;
  1451. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1452. helper = new TestHelper(shader, ShaderFeatures.None);
  1453. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendMedium};
  1454. TestHelper.s_PassKeywords = passKeywords;
  1455. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1456. helper = new TestHelper(shader, ShaderFeatures.None);
  1457. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendHigh};
  1458. TestHelper.s_PassKeywords = passKeywords;
  1459. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1460. // ShaderFeatures.DecalNormalBlendLow
  1461. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendLow);
  1462. TestHelper.s_PassKeywords = passKeywords;
  1463. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1464. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendLow);
  1465. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendLow};
  1466. TestHelper.s_PassKeywords = passKeywords;
  1467. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1468. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendLow);
  1469. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendMedium};
  1470. TestHelper.s_PassKeywords = passKeywords;
  1471. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1472. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendLow);
  1473. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendHigh};
  1474. TestHelper.s_PassKeywords = passKeywords;
  1475. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1476. // ShaderFeatures.DecalNormalBlendMedium
  1477. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendMedium);
  1478. TestHelper.s_PassKeywords = passKeywords;
  1479. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1480. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendMedium);
  1481. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendLow};
  1482. TestHelper.s_PassKeywords = passKeywords;
  1483. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1484. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendMedium);
  1485. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendMedium};
  1486. TestHelper.s_PassKeywords = passKeywords;
  1487. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1488. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendMedium);
  1489. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendHigh};
  1490. TestHelper.s_PassKeywords = passKeywords;
  1491. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1492. // ShaderFeatures.DecalNormalBlendHigh
  1493. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendHigh);
  1494. TestHelper.s_PassKeywords = passKeywords;
  1495. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1496. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendHigh);
  1497. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendLow};
  1498. TestHelper.s_PassKeywords = passKeywords;
  1499. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1500. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendHigh);
  1501. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendMedium};
  1502. TestHelper.s_PassKeywords = passKeywords;
  1503. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1504. helper = new TestHelper(shader, ShaderFeatures.DecalNormalBlendHigh);
  1505. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalNormalBlendHigh};
  1506. TestHelper.s_PassKeywords = passKeywords;
  1507. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalsNormalBlend(ref helper.data, ref helper.featureStripTool));
  1508. }
  1509. public void TestStripUnusedFeatures_DecalLayers(Shader shader)
  1510. {
  1511. TestHelper helper;
  1512. // Not GL Device
  1513. helper = new TestHelper(shader, ShaderFeatures.None);
  1514. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1515. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalLayers(ref helper.data, ref helper.featureStripTool));
  1516. helper = new TestHelper(shader, ShaderFeatures.None);
  1517. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1518. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1519. helper.AreEqual(shader != null,helper.stripper.StripUnusedFeatures_DecalLayers(ref helper.data, ref helper.featureStripTool));
  1520. helper = new TestHelper(shader, ShaderFeatures.DecalLayers);
  1521. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1522. helper.AreEqual(shader != null,helper.stripper.StripUnusedFeatures_DecalLayers(ref helper.data, ref helper.featureStripTool));
  1523. helper = new TestHelper(shader, ShaderFeatures.DecalLayers);
  1524. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1525. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1526. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalLayers(ref helper.data, ref helper.featureStripTool));
  1527. // GL Device
  1528. helper = new TestHelper(shader, ShaderFeatures.None);
  1529. helper.data.isGLDevice = true;
  1530. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1531. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalLayers(ref helper.data, ref helper.featureStripTool));
  1532. helper = new TestHelper(shader, ShaderFeatures.None);
  1533. helper.data.isGLDevice = true;
  1534. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1535. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1536. helper.AreEqual(shader != null,helper.stripper.StripUnusedFeatures_DecalLayers(ref helper.data, ref helper.featureStripTool));
  1537. helper = new TestHelper(shader, ShaderFeatures.DecalLayers);
  1538. helper.data.isGLDevice = true;
  1539. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1540. helper.IsFalse(helper.stripper.StripUnusedFeatures_DecalLayers(ref helper.data, ref helper.featureStripTool));
  1541. helper = new TestHelper(shader, ShaderFeatures.DecalLayers);
  1542. helper.data.isGLDevice = true;
  1543. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1544. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.DecalLayers};
  1545. helper.AreEqual(shader != null,helper.stripper.StripUnusedFeatures_DecalLayers(ref helper.data, ref helper.featureStripTool));
  1546. }
  1547. public void TestStripUnusedFeatures_WriteRenderingLayers(Shader shader)
  1548. {
  1549. TestHelper helper;
  1550. // No Features + Not GL Device
  1551. helper = new TestHelper(shader, ShaderFeatures.None);
  1552. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1553. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1554. helper = new TestHelper(shader, ShaderFeatures.None);
  1555. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1556. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1557. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1558. helper = new TestHelper(shader, ShaderFeatures.None);
  1559. helper.data.passName = ShaderScriptableStripper.kPassNameDepthNormals;
  1560. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1561. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1562. helper = new TestHelper(shader, ShaderFeatures.None);
  1563. helper.data.passName = ShaderScriptableStripper.kPassNameDepthNormals;
  1564. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1565. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1566. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1567. helper = new TestHelper(shader, ShaderFeatures.None);
  1568. helper.data.passName = ShaderScriptableStripper.kPassNameForwardLit;
  1569. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1570. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1571. helper = new TestHelper(shader, ShaderFeatures.None);
  1572. helper.data.passName = ShaderScriptableStripper.kPassNameForwardLit;
  1573. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1574. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1575. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1576. helper = new TestHelper(shader, ShaderFeatures.None);
  1577. helper.data.passName = ShaderScriptableStripper.kPassNameGBuffer;
  1578. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1579. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1580. helper = new TestHelper(shader, ShaderFeatures.None);
  1581. helper.data.passName = ShaderScriptableStripper.kPassNameGBuffer;
  1582. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1583. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1584. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1585. // OpaqueWriteRenderingLayers + Not GL Device
  1586. helper = new TestHelper(shader, ShaderFeatures.OpaqueWriteRenderingLayers);
  1587. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1588. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1589. helper = new TestHelper(shader, ShaderFeatures.OpaqueWriteRenderingLayers);
  1590. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1591. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1592. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1593. helper = new TestHelper(shader, ShaderFeatures.OpaqueWriteRenderingLayers);
  1594. helper.data.passName = ShaderScriptableStripper.kPassNameDepthNormals;
  1595. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1596. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1597. helper = new TestHelper(shader, ShaderFeatures.OpaqueWriteRenderingLayers);
  1598. helper.data.passName = ShaderScriptableStripper.kPassNameDepthNormals;
  1599. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1600. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1601. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1602. helper = new TestHelper(shader, ShaderFeatures.OpaqueWriteRenderingLayers);
  1603. helper.data.passName = ShaderScriptableStripper.kPassNameForwardLit;
  1604. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1605. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1606. helper = new TestHelper(shader, ShaderFeatures.OpaqueWriteRenderingLayers);
  1607. helper.data.passName = ShaderScriptableStripper.kPassNameForwardLit;
  1608. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1609. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1610. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1611. helper = new TestHelper(shader, ShaderFeatures.OpaqueWriteRenderingLayers);
  1612. helper.data.passName = ShaderScriptableStripper.kPassNameGBuffer;
  1613. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1614. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1615. helper = new TestHelper(shader, ShaderFeatures.OpaqueWriteRenderingLayers);
  1616. helper.data.passName = ShaderScriptableStripper.kPassNameGBuffer;
  1617. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1618. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1619. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1620. // GBufferWriteRenderingLayers + Not GL Device
  1621. helper = new TestHelper(shader, ShaderFeatures.GBufferWriteRenderingLayers);
  1622. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1623. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1624. helper = new TestHelper(shader, ShaderFeatures.GBufferWriteRenderingLayers);
  1625. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1626. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1627. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1628. helper = new TestHelper(shader, ShaderFeatures.GBufferWriteRenderingLayers);
  1629. helper.data.passName = ShaderScriptableStripper.kPassNameDepthNormals;
  1630. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1631. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1632. helper = new TestHelper(shader, ShaderFeatures.GBufferWriteRenderingLayers);
  1633. helper.data.passName = ShaderScriptableStripper.kPassNameDepthNormals;
  1634. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1635. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1636. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1637. helper = new TestHelper(shader, ShaderFeatures.GBufferWriteRenderingLayers);
  1638. helper.data.passName = ShaderScriptableStripper.kPassNameForwardLit;
  1639. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1640. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1641. helper = new TestHelper(shader, ShaderFeatures.GBufferWriteRenderingLayers);
  1642. helper.data.passName = ShaderScriptableStripper.kPassNameForwardLit;
  1643. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1644. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1645. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1646. helper = new TestHelper(shader, ShaderFeatures.GBufferWriteRenderingLayers);
  1647. helper.data.passName = ShaderScriptableStripper.kPassNameGBuffer;
  1648. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1649. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1650. helper = new TestHelper(shader, ShaderFeatures.GBufferWriteRenderingLayers);
  1651. helper.data.passName = ShaderScriptableStripper.kPassNameGBuffer;
  1652. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1653. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1654. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1655. // GL Device
  1656. helper = new TestHelper(shader, ShaderFeatures.None);
  1657. helper.data.isGLDevice = true;
  1658. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1659. helper.IsFalse(helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1660. helper = new TestHelper(shader, ShaderFeatures.None);
  1661. helper.data.isGLDevice = true;
  1662. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1663. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings.WriteRenderingLayers};
  1664. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_WriteRenderingLayers(ref helper.data, ref helper.featureStripTool));
  1665. }
  1666. public void TestStripUnusedFeatures_AccurateGbufferNormals(Shader shader)
  1667. {
  1668. TestHelper helper;
  1669. // Not Vulkan
  1670. helper = new TestHelper(shader, ShaderFeatures.None);
  1671. helper.data.shaderCompilerPlatform = ShaderCompilerPlatform.None;
  1672. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1673. helper.IsFalse(helper.stripper.StripUnusedFeatures_AccurateGbufferNormals(ref helper.data, ref helper.featureStripTool));
  1674. helper = new TestHelper(shader, ShaderFeatures.None);
  1675. helper.data.shaderCompilerPlatform = ShaderCompilerPlatform.None;
  1676. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1677. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1678. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AccurateGbufferNormals(ref helper.data, ref helper.featureStripTool));
  1679. helper = new TestHelper(shader, ShaderFeatures.AccurateGbufferNormals);
  1680. helper.data.shaderCompilerPlatform = ShaderCompilerPlatform.None;
  1681. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1682. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AccurateGbufferNormals(ref helper.data, ref helper.featureStripTool));
  1683. helper = new TestHelper(shader, ShaderFeatures.AccurateGbufferNormals);
  1684. helper.data.shaderCompilerPlatform = ShaderCompilerPlatform.None;
  1685. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1686. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1687. helper.IsFalse(helper.stripper.StripUnusedFeatures_AccurateGbufferNormals(ref helper.data, ref helper.featureStripTool));
  1688. // Vulkan
  1689. helper = new TestHelper(shader, ShaderFeatures.None);
  1690. helper.data.shaderCompilerPlatform = ShaderCompilerPlatform.Vulkan;
  1691. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1692. helper.IsFalse(helper.stripper.StripUnusedFeatures_AccurateGbufferNormals(ref helper.data, ref helper.featureStripTool));
  1693. helper = new TestHelper(shader, ShaderFeatures.None);
  1694. helper.data.shaderCompilerPlatform = ShaderCompilerPlatform.Vulkan;
  1695. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1696. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1697. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AccurateGbufferNormals(ref helper.data, ref helper.featureStripTool));
  1698. helper = new TestHelper(shader, ShaderFeatures.AccurateGbufferNormals);
  1699. helper.data.shaderCompilerPlatform = ShaderCompilerPlatform.Vulkan;
  1700. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1701. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_AccurateGbufferNormals(ref helper.data, ref helper.featureStripTool));
  1702. helper = new TestHelper(shader, ShaderFeatures.AccurateGbufferNormals);
  1703. helper.data.shaderCompilerPlatform = ShaderCompilerPlatform.Vulkan;
  1704. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1705. TestHelper.s_PassKeywords = new List<string>() {ShaderKeywordStrings._GBUFFER_NORMALS_OCT};
  1706. helper.IsFalse(helper.stripper.StripUnusedFeatures_AccurateGbufferNormals(ref helper.data, ref helper.featureStripTool));
  1707. }
  1708. public void TestStripUnusedFeatures_LightCookies(Shader shader)
  1709. {
  1710. TestHelper helper;
  1711. helper = new TestHelper(shader, ShaderFeatures.None);
  1712. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.LightCookies };
  1713. helper.IsFalse(helper.stripper.StripUnusedFeatures_LightCookies(ref helper.data, ref helper.featureStripTool));
  1714. helper = new TestHelper(shader, ShaderFeatures.None);
  1715. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.LightCookies };
  1716. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.LightCookies };
  1717. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_LightCookies(ref helper.data, ref helper.featureStripTool));
  1718. helper = new TestHelper(shader, ShaderFeatures.LightCookies);
  1719. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.LightCookies };
  1720. helper.IsFalse(helper.stripper.StripUnusedFeatures_LightCookies(ref helper.data, ref helper.featureStripTool));
  1721. helper = new TestHelper(shader, ShaderFeatures.LightCookies);
  1722. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.LightCookies };
  1723. TestHelper.s_PassKeywords = new List<string>() { ShaderKeywordStrings.LightCookies };
  1724. helper.IsFalse(helper.stripper.StripUnusedFeatures_LightCookies(ref helper.data, ref helper.featureStripTool));
  1725. }
  1726. public void TestStripUnusedFeatures_ProbesVolumes(Shader shader)
  1727. {
  1728. TestHelper helper;
  1729. List<string> passKeywords = new List<string>() { ShaderKeywordStrings.ProbeVolumeL1, ShaderKeywordStrings.ProbeVolumeL2 };
  1730. helper = new TestHelper(shader, ShaderFeatures.None);
  1731. TestHelper.s_PassKeywords = passKeywords;
  1732. helper.IsFalse(helper.stripper.StripUnusedFeatures_ProbesVolumes(ref helper.featureStripTool));
  1733. helper = new TestHelper(shader, ShaderFeatures.None);
  1734. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ProbeVolumeL1 };
  1735. TestHelper.s_PassKeywords = passKeywords;
  1736. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ProbesVolumes(ref helper.featureStripTool));
  1737. helper = new TestHelper(shader, ShaderFeatures.None);
  1738. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ProbeVolumeL2 };
  1739. TestHelper.s_PassKeywords = passKeywords;
  1740. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ProbesVolumes(ref helper.featureStripTool));
  1741. // L1 Enabled
  1742. helper = new TestHelper(shader, ShaderFeatures.ProbeVolumeL1);
  1743. TestHelper.s_PassKeywords = passKeywords;
  1744. helper.IsFalse(helper.stripper.StripUnusedFeatures_ProbesVolumes(ref helper.featureStripTool));
  1745. helper = new TestHelper(shader, ShaderFeatures.ProbeVolumeL1);
  1746. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ProbeVolumeL1 };
  1747. TestHelper.s_PassKeywords = passKeywords;
  1748. helper.IsFalse(helper.stripper.StripUnusedFeatures_ProbesVolumes(ref helper.featureStripTool));
  1749. helper = new TestHelper(shader, ShaderFeatures.ProbeVolumeL1);
  1750. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ProbeVolumeL2 };
  1751. TestHelper.s_PassKeywords = passKeywords;
  1752. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ProbesVolumes(ref helper.featureStripTool));
  1753. // L2 Enabled
  1754. helper = new TestHelper(shader, ShaderFeatures.ProbeVolumeL2);
  1755. TestHelper.s_PassKeywords = passKeywords;
  1756. helper.IsFalse(helper.stripper.StripUnusedFeatures_ProbesVolumes(ref helper.featureStripTool));
  1757. helper = new TestHelper(shader, ShaderFeatures.ProbeVolumeL2);
  1758. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ProbeVolumeL1 };
  1759. TestHelper.s_PassKeywords = passKeywords;
  1760. helper.AreEqual(shader != null, helper.stripper.StripUnusedFeatures_ProbesVolumes(ref helper.featureStripTool));
  1761. helper = new TestHelper(shader, ShaderFeatures.ProbeVolumeL2);
  1762. TestHelper.s_EnabledKeywords = new List<string>() { ShaderKeywordStrings.ProbeVolumeL2 };
  1763. TestHelper.s_PassKeywords = passKeywords;
  1764. helper.IsFalse(helper.stripper.StripUnusedFeatures_ProbesVolumes(ref helper.featureStripTool));
  1765. }
  1766. [TestCase(null)]
  1767. [TestCase("")]
  1768. [TestCase("Hidden/Universal Render Pipeline/UberPost")]
  1769. [TestCase("Hidden/Universal Render Pipeline/BokehDepthOfField")]
  1770. [TestCase("Hidden/Universal Render Pipeline/GaussianDepthOfField")]
  1771. [TestCase("Hidden/Universal Render Pipeline/CameraMotionBlur")]
  1772. [TestCase("Hidden/Universal Render Pipeline/PaniniProjection")]
  1773. [TestCase("Hidden/Universal Render Pipeline/Bloom")]
  1774. public void TestStripVolumeFeatures(string shaderName)
  1775. {
  1776. Shader shader = Shader.Find(shaderName);
  1777. TestStripVolumeFeatures_UberPostShader(shader);
  1778. TestStripVolumeFeatures_BokehDepthOfFieldShader(shader);
  1779. TestStripVolumeFeatures_GaussianDepthOfFieldShader(shader);
  1780. TestStripVolumeFeatures_CameraMotionBlurShader(shader);
  1781. TestStripVolumeFeatures_PaniniProjectionShader(shader);
  1782. TestStripVolumeFeatures_BloomShader(shader);
  1783. }
  1784. public void TestStripVolumeFeatures_UberPostShader(Shader shader)
  1785. {
  1786. bool isCorrectShader = shader == Shader.Find("Hidden/Universal Render Pipeline/UberPost");
  1787. TestHelper helper;
  1788. List<string> passKeywords = new List<string>()
  1789. {
  1790. ShaderKeywordStrings.Distortion,
  1791. ShaderKeywordStrings.ChromaticAberration,
  1792. ShaderKeywordStrings.BloomLQ,
  1793. ShaderKeywordStrings.BloomHQ,
  1794. ShaderKeywordStrings.BloomLQDirt,
  1795. ShaderKeywordStrings.BloomHQDirt,
  1796. ShaderKeywordStrings.TonemapACES,
  1797. ShaderKeywordStrings.TonemapNeutral,
  1798. ShaderKeywordStrings.FilmGrain,
  1799. };
  1800. helper = new TestHelper(shader, ShaderFeatures.None);
  1801. TestHelper.s_PassKeywords = passKeywords;
  1802. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1803. // Lens Distortion
  1804. helper = new TestHelper(shader, ShaderFeatures.None);
  1805. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.Distortion};
  1806. TestHelper.s_PassKeywords = passKeywords;
  1807. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1808. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.LensDistortion);
  1809. TestHelper.s_PassKeywords = passKeywords;
  1810. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1811. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.LensDistortion);
  1812. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.Distortion};
  1813. TestHelper.s_PassKeywords = passKeywords;
  1814. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1815. // Chromatic Aberration
  1816. helper = new TestHelper(shader, ShaderFeatures.None);
  1817. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.ChromaticAberration};
  1818. TestHelper.s_PassKeywords = passKeywords;
  1819. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1820. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.ChromaticAberration);
  1821. TestHelper.s_PassKeywords = passKeywords;
  1822. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1823. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.ChromaticAberration);
  1824. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.ChromaticAberration};
  1825. TestHelper.s_PassKeywords = passKeywords;
  1826. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1827. // Bloom LQ
  1828. helper = new TestHelper(shader, ShaderFeatures.None);
  1829. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.BloomLQ};
  1830. TestHelper.s_PassKeywords = passKeywords;
  1831. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1832. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:TestHelper.s_AllBloomFeatures);
  1833. TestHelper.s_PassKeywords = passKeywords;
  1834. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1835. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:TestHelper.s_AllBloomFeatures);
  1836. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.BloomLQ};
  1837. TestHelper.s_PassKeywords = passKeywords;
  1838. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1839. // Bloom HQ
  1840. helper = new TestHelper(shader, ShaderFeatures.None);
  1841. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.BloomHQ};
  1842. TestHelper.s_PassKeywords = passKeywords;
  1843. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1844. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:TestHelper.s_AllBloomFeatures);
  1845. TestHelper.s_PassKeywords = passKeywords;
  1846. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1847. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:TestHelper.s_AllBloomFeatures);
  1848. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.BloomHQ};
  1849. TestHelper.s_PassKeywords = passKeywords;
  1850. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1851. // Bloom LQ Dirt
  1852. helper = new TestHelper(shader, ShaderFeatures.None);
  1853. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.BloomLQDirt};
  1854. TestHelper.s_PassKeywords = passKeywords;
  1855. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1856. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:TestHelper.s_AllBloomFeatures);
  1857. TestHelper.s_PassKeywords = passKeywords;
  1858. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1859. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:TestHelper.s_AllBloomFeatures);
  1860. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.BloomLQDirt};
  1861. TestHelper.s_PassKeywords = passKeywords;
  1862. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1863. // Bloom HQ Dirt
  1864. helper = new TestHelper(shader, ShaderFeatures.None);
  1865. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.BloomHQDirt};
  1866. TestHelper.s_PassKeywords = passKeywords;
  1867. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1868. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:TestHelper.s_AllBloomFeatures);
  1869. TestHelper.s_PassKeywords = passKeywords;
  1870. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1871. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:TestHelper.s_AllBloomFeatures);
  1872. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.BloomHQDirt};
  1873. TestHelper.s_PassKeywords = passKeywords;
  1874. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1875. // Tonemap ACES
  1876. helper = new TestHelper(shader, ShaderFeatures.None);
  1877. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.TonemapACES};
  1878. TestHelper.s_PassKeywords = passKeywords;
  1879. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1880. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.ToneMapping);
  1881. TestHelper.s_PassKeywords = passKeywords;
  1882. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1883. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.ToneMapping);
  1884. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.TonemapACES};
  1885. TestHelper.s_PassKeywords = passKeywords;
  1886. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1887. // Tonemap Neutral
  1888. helper = new TestHelper(shader, ShaderFeatures.None);
  1889. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.TonemapNeutral};
  1890. TestHelper.s_PassKeywords = passKeywords;
  1891. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1892. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.ToneMapping);
  1893. TestHelper.s_PassKeywords = passKeywords;
  1894. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1895. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.ToneMapping);
  1896. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.TonemapNeutral};
  1897. TestHelper.s_PassKeywords = passKeywords;
  1898. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1899. // Film Grain
  1900. helper = new TestHelper(shader, ShaderFeatures.None);
  1901. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.FilmGrain};
  1902. TestHelper.s_PassKeywords = passKeywords;
  1903. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1904. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.FilmGrain);
  1905. TestHelper.s_PassKeywords = passKeywords;
  1906. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1907. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.FilmGrain);
  1908. TestHelper.s_EnabledKeywords = new List<string>() {ShaderKeywordStrings.FilmGrain};
  1909. TestHelper.s_PassKeywords = passKeywords;
  1910. helper.IsFalse(helper.stripper.StripVolumeFeatures_UberPostShader(ref helper.data));
  1911. }
  1912. public void TestStripVolumeFeatures_BokehDepthOfFieldShader(Shader shader)
  1913. {
  1914. bool isCorrectShader = shader == Shader.Find("Hidden/Universal Render Pipeline/BokehDepthOfField");
  1915. TestHelper helper;
  1916. helper = new TestHelper(shader, ShaderFeatures.None);
  1917. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_BokehDepthOfFieldShader(ref helper.data));
  1918. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.DepthOfField);
  1919. helper.IsFalse(helper.stripper.StripVolumeFeatures_BokehDepthOfFieldShader(ref helper.data));
  1920. }
  1921. public void TestStripVolumeFeatures_GaussianDepthOfFieldShader(Shader shader)
  1922. {
  1923. bool isCorrectShader = shader == Shader.Find("Hidden/Universal Render Pipeline/GaussianDepthOfField");
  1924. TestHelper helper;
  1925. helper = new TestHelper(shader, ShaderFeatures.None);
  1926. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_GaussianDepthOfFieldShader(ref helper.data));
  1927. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.DepthOfField);
  1928. helper.IsFalse(helper.stripper.StripVolumeFeatures_GaussianDepthOfFieldShader(ref helper.data));
  1929. }
  1930. public void TestStripVolumeFeatures_CameraMotionBlurShader(Shader shader)
  1931. {
  1932. bool isCorrectShader = shader == Shader.Find("Hidden/Universal Render Pipeline/CameraMotionBlur");
  1933. TestHelper helper;
  1934. helper = new TestHelper(shader, ShaderFeatures.None);
  1935. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_CameraMotionBlurShader(ref helper.data));
  1936. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.CameraMotionBlur);
  1937. helper.IsFalse(helper.stripper.StripVolumeFeatures_CameraMotionBlurShader(ref helper.data));
  1938. }
  1939. public void TestStripVolumeFeatures_PaniniProjectionShader(Shader shader)
  1940. {
  1941. bool isCorrectShader = shader == Shader.Find("Hidden/Universal Render Pipeline/PaniniProjection");
  1942. TestHelper helper;
  1943. helper = new TestHelper(shader, ShaderFeatures.None);
  1944. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_PaniniProjectionShader(ref helper.data));
  1945. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:VolumeFeatures.PaniniProjection);
  1946. helper.IsFalse(helper.stripper.StripVolumeFeatures_PaniniProjectionShader(ref helper.data));
  1947. }
  1948. public void TestStripVolumeFeatures_BloomShader(Shader shader)
  1949. {
  1950. bool isCorrectShader = shader == Shader.Find("Hidden/Universal Render Pipeline/Bloom");
  1951. TestHelper helper;
  1952. helper = new TestHelper(shader, ShaderFeatures.None);
  1953. helper.AreEqual(isCorrectShader, helper.stripper.StripVolumeFeatures_BloomShader(ref helper.data));
  1954. helper = new TestHelper(shader, ShaderFeatures.None, volumeFeatures:TestHelper.s_AllBloomFeatures);
  1955. helper.IsFalse(helper.stripper.StripVolumeFeatures_BloomShader(ref helper.data));
  1956. }
  1957. }
  1958. }