Files
com.misaki.hdrp-toon/Tests/Editor/ShaderCompileTest.cs
2024-08-15 17:00:11 +09:00

81 lines
3.4 KiB
C#

using NUnit.Framework;
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine.TestTools;
namespace Unity.Rendering.ToonShader.Tests {
public class ShaderCompileTest
{
[Test]
public void CompileLegacyToonShadersDefault() {
string[] guids = AssetDatabase.FindAssets("t:Shader", new[] { LEGACY_SHADERS_PATH});
int numShaders = guids.Length;
Assert.Greater(numShaders,0);
bool shaderHasError = false;
for (int i=0;i<numShaders && !shaderHasError;++i) {
string curAssetPath = AssetDatabase.GUIDToAssetPath(guids[i]);
Shader shader = AssetDatabase.LoadAssetAtPath<Shader>(curAssetPath);
AssetDatabase.ImportAsset(curAssetPath); //Recompile the shader to make sure there are no compile errors
Assert.True(shader.isSupported);
shaderHasError = ShaderUtil.ShaderHasError(shader);
Assert.False(shaderHasError);
}
}
//---------------------------------------------------------------------------------------------------------------------
[Test]
[UnityPlatform(RuntimePlatform.WindowsEditor)]
public void CompileLegacyToonShadersWithRTHS() { //RaytracedHardShadow
string[] guids = AssetDatabase.FindAssets("t:Shader", new[] {LEGACY_SHADERS_PATH});
int numShaders = guids.Length;
Assert.Greater(numShaders,0);
List<Material> materials = new List<Material>();
//Try to compile shader manually
System.Type t = typeof(ShaderUtil);
MethodInfo dynMethod = t.GetMethod("OpenCompiledShader", BindingFlags.NonPublic | BindingFlags.Static);
Assert.NotNull(dynMethod);
if (null == dynMethod)
return;
int defaultMask = (1 << System.Enum.GetNames(typeof(UnityEditor.Rendering.ShaderCompilerPlatform)).Length - 1);
bool shaderHasError = false;
for (int i=0;i<numShaders && !shaderHasError;++i) {
string curAssetPath = AssetDatabase.GUIDToAssetPath(guids[i]);
Shader shader = AssetDatabase.LoadAssetAtPath<Shader>(curAssetPath);
AssetDatabase.ImportAsset(curAssetPath); //Recompile the shader to make sure there are no compile errors
Assert.True(shader.isSupported);
Material mat = new Material(shader);
mat.EnableKeyword("UTS_USE_RAYTRACING_SHADOW");
materials.Add(mat);
const bool INCLUDE_ALL_VARIANTS = false;
dynMethod.Invoke(null, new object[] { shader, 1, defaultMask, INCLUDE_ALL_VARIANTS});
shaderHasError = ShaderUtil.ShaderHasError(shader);
Assert.False(shaderHasError);
}
Shader.WarmupAllShaders();
int numMaterials = materials.Count;
for (int i=0;i<numMaterials;++i) {
Object.DestroyImmediate(materials[i]);
}
}
//---------------------------------------------------------------------------------------------------------------------
private const string LEGACY_SHADERS_PATH = "Packages/com.unity.toonshader/Runtime/Legacy/Shaders";
}
} //end namespace