Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 118 additions & 2 deletions TestProjects/ShaderGraph/Assets/CommonAssets/Editor/NodeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public IEnumerator TransformInverses()
inv.conversionType = conversionType;
inv.normalize = false;

RunNodeTest(graph, $"TransformInverse_{source}_to_{dest}_{conversionType}");
RunNodeTest(graph, $"TransformInverse_{source}_to_{dest}_{conversionType}", errorThreshold: 1);
}

// have to yield to let a frame pass or it will break
Expand Down Expand Up @@ -149,7 +149,7 @@ public IEnumerator TransformABC()
B_to_C.conversionType = conversionType;
B_to_C.normalize = false;

RunNodeTest(graph, $"TransformABC_{A}_{B}_{C}_{conversionType}");
RunNodeTest(graph, $"TransformABC_{A}_{B}_{C}_{conversionType}", errorThreshold: 1);
}

// have to yield to let a frame pass or it will break
Expand Down Expand Up @@ -200,5 +200,121 @@ public IEnumerator TransformNormalize()
}
ReportTests();
}

[UnityTest]
public IEnumerator BoolConversion()
{
// Test that converting from bool => float gives the correct result
string graphPath = "Assets/CommonAssets/Graphs/NodeTests/BoolConversion.shadergraph";
var graph = LoadGraph(graphPath);

var boolNode = graph.GetNodes<BooleanNode>().First();

ResetTestReporting();

boolNode.m_Value = false;
RunNodeTest(graph, $"BoolConversion_false",
setupMaterial: (mat) =>
{
mat.SetFloat("_FloatVal", 0.0f);
});

boolNode.m_Value = true;
RunNodeTest(graph, $"BoolConversion_true",
setupMaterial: (mat) =>
{
mat.SetFloat("_FloatVal", 1.0f);
});

ReportTests();
yield break;
}

[UnityTest]
public IEnumerator BoolConversionV2()
{
// Test that converting from bool => float2 gives the correct result
string graphPath = "Assets/CommonAssets/Graphs/NodeTests/BoolConversionV2.shadergraph";
var graph = LoadGraph(graphPath);

var boolNode = graph.GetNodes<BooleanNode>().First();

ResetTestReporting();

boolNode.m_Value = false;
RunNodeTest(graph, $"BoolConversion_false",
setupMaterial: (mat) =>
{
mat.SetVector("_V2Val", new Vector4(0.0f, 0.0f, 0.0f, 0.0f));
});

boolNode.m_Value = true;
RunNodeTest(graph, $"BoolConversion_true",
setupMaterial: (mat) =>
{
mat.SetVector("_V2Val", new Vector4(1.0f, 1.0f, 1.0f, 1.0f));
});

ReportTests();
yield break;
}

[UnityTest]
public IEnumerator BoolConversionV3()
{
// Test that converting from bool => float3 gives the correct result
string graphPath = "Assets/CommonAssets/Graphs/NodeTests/BoolConversionV3.shadergraph";
var graph = LoadGraph(graphPath);

var boolNode = graph.GetNodes<BooleanNode>().First();

ResetTestReporting();

boolNode.m_Value = false;
RunNodeTest(graph, $"BoolConversion_false",
setupMaterial: (mat) =>
{
mat.SetVector("_V3Val", new Vector4(0.0f, 0.0f, 0.0f, 0.0f));
});

boolNode.m_Value = true;
RunNodeTest(graph, $"BoolConversion_true",
setupMaterial: (mat) =>
{
mat.SetVector("_V3Val", new Vector4(1.0f, 1.0f, 1.0f, 1.0f));
});

ReportTests();
yield break;
}

[UnityTest]
public IEnumerator BoolConversionV4()
{
// Test that converting from bool => float4 gives the correct result
string graphPath = "Assets/CommonAssets/Graphs/NodeTests/BoolConversionV4.shadergraph";
var graph = LoadGraph(graphPath);

var boolNode = graph.GetNodes<BooleanNode>().First();

ResetTestReporting();

boolNode.m_Value = false;
RunNodeTest(graph, $"BoolConversion_false",
setupMaterial: (mat) =>
{
mat.SetVector("_V4Val", new Vector4(0.0f, 0.0f, 0.0f, 0.0f));
});

boolNode.m_Value = true;
RunNodeTest(graph, $"BoolConversion_true",
setupMaterial: (mat) =>
{
mat.SetVector("_V4Val", new Vector4(1.0f, 1.0f, 1.0f, 1.0f));
});

ReportTests();
yield break;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ internal GraphData LoadGraph(string graphPath)
internal Vector3 testPosition = new Vector3(0.24699998f, 0.51900005f, 0.328999996f);
internal Quaternion testRotation = new Quaternion(-0.164710045f, -0.0826543793f, -0.220811233f, 0.957748055f);

internal int RunNodeTest(GraphData graph, string filePrefix, SetupMaterialDelegate setupMaterial = null, Color32? expectedColor = null, int expectedIncorrectPixels = 0)
internal int RunNodeTest(GraphData graph, string filePrefix, SetupMaterialDelegate setupMaterial = null, Color32? expectedColor = null, int expectedIncorrectPixels = 0, int errorThreshold = 0)
{
RenderTextureDescriptor descriptor = new RenderTextureDescriptor(defaultResolution, defaultResolution, GraphicsFormat.R8G8B8A8_SRGB, depthBufferBits: 32);
var target = RenderTexture.GetTemporary(descriptor);
Expand All @@ -58,7 +58,7 @@ internal int RunNodeTest(GraphData graph, string filePrefix, SetupMaterialDelega
RenderQuadPreview(graph, target, testPosition, testRotation, setupMaterial, Mode.DIFF, useSRP: true);

// default expected color is green (test shaders should be set up to return green on success)
int incorrectPixels = CountPixelsNotEqual(target, expectedColor ?? new Color32(0, 255, 0, 255), false);
int incorrectPixels = CountPixelsNotEqual(target, expectedColor ?? new Color32(0, 255, 0, 255), false, errorThreshold);

if (incorrectPixels != expectedIncorrectPixels)
{
Expand Down Expand Up @@ -172,7 +172,7 @@ internal static void SaveToPNG(RenderTexture target, string path, bool createDir
ShaderGraphTestRenderer.ReportArtifact(path);
}

internal static int CountPixelsNotEqual(RenderTexture target, Color32 value, bool compareAlpha)
internal static int CountPixelsNotEqual(RenderTexture target, Color32 value, bool compareAlpha, int errorThreshold = 0)
{
Texture2D temp = new Texture2D(target.width, target.height, TextureFormat.RGBA32, mipChain: false, linear: false);

Expand All @@ -185,10 +185,10 @@ internal static int CountPixelsNotEqual(RenderTexture target, Color32 value, boo
var pixels = temp.GetPixels32(0);
foreach (var pixel in pixels)
{
if ((pixel.r != value.r) ||
(pixel.g != value.g) ||
(pixel.b != value.b) ||
(compareAlpha && (pixel.a != value.a)))
if ((Math.Abs(pixel.r - value.r) > errorThreshold) ||
(Math.Abs(pixel.g - value.g) > errorThreshold) ||
(Math.Abs(pixel.b - value.b) > errorThreshold) ||
(compareAlpha && (Math.Abs(pixel.a - value.a) > errorThreshold)))
{
mismatchCount++;
}
Expand Down
Loading