ShaderTests.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using Drawie.Backend.Core.Shaders;
  2. using Drawie.Skia.Implementations;
  3. namespace PixiEditor.Backend.Tests;
  4. public class ShaderTests
  5. {
  6. [Fact]
  7. public void TestThatFindUniformTypeSolvesTrivialCase()
  8. {
  9. string sksl = """
  10. uniform float flUniform;
  11. half4 main(vec2 coords)
  12. {
  13. return half4(1, 1, 1, 1);
  14. }
  15. """;
  16. UniformValueType? valueType = SkiaShaderImplementation.FindUniformType(sksl, "flUniform");
  17. Assert.Equal(UniformValueType.Float, valueType);
  18. }
  19. [Fact]
  20. public void TestThatFindUniformTypeSolvesDoesntGetFooledByComment()
  21. {
  22. string sksl = """
  23. /* uniform vec2 flUniform */uniform float flUniform;
  24. // uniform half4 vecUniform
  25. uniform vec2 vecUniform;
  26. half4 main(vec2 coords)
  27. {
  28. return half4(1, 1, 1, 1);
  29. }
  30. """;
  31. UniformValueType? flValueType = SkiaShaderImplementation.FindUniformType(sksl, "flUniform");
  32. UniformValueType? vecValueType = SkiaShaderImplementation.FindUniformType(sksl, "vecUniform");
  33. Assert.Equal(UniformValueType.Float, flValueType);
  34. Assert.Equal(UniformValueType.Vector2, vecValueType);
  35. }
  36. [Fact]
  37. public void TestThatFindUniformTypeFindsUniformsInTheMiddle()
  38. {
  39. string sksl = """
  40. float getBlue()
  41. {
  42. return 0.5;
  43. }
  44. uniform vec2 uni1;
  45. half4 main(vec2 coords)
  46. {
  47. return half4(uni1.xy, getBlue(), 1);
  48. }
  49. """;
  50. UniformValueType? uni1Type = SkiaShaderImplementation.FindUniformType(sksl, "uni1");
  51. Assert.Equal(UniformValueType.Vector2, uni1Type);
  52. }
  53. [Fact]
  54. public void TestThatMinifiedSkslIsParsedCorrectly()
  55. {
  56. string sksl = "uniform float flUniform; half4 main(vec2 coords) { return half4(1, 1, 1, 1); }";
  57. UniformValueType? valueType = SkiaShaderImplementation.FindUniformType(sksl, "flUniform");
  58. Assert.Equal(UniformValueType.Float, valueType);
  59. }
  60. [Fact]
  61. public void TestThatAllTypesAreParsedCorrectly()
  62. {
  63. string sksl = """
  64. uniform float floatUniform;
  65. uniform vec2 vector2Uniform;
  66. uniform vec3 vec3dUniform;
  67. uniform half4 halfArrayUniform;
  68. uniform vec4 vec4Uniform;
  69. uniform shader shaderUniform;
  70. layout(color) uniform half4 colorUniform;
  71. layout ( color ) uniform vec4 colorUniform2;
  72. half4 main(vec2 coords)
  73. {
  74. return half4(1, 1, 1, 1);
  75. }
  76. """;
  77. UniformValueType? floatType = SkiaShaderImplementation.FindUniformType(sksl, "floatUniform");
  78. UniformValueType? vector2Type = SkiaShaderImplementation.FindUniformType(sksl, "vector2Uniform");
  79. UniformValueType? half3Type = SkiaShaderImplementation.FindUniformType(sksl, "halfArrayUniform");
  80. UniformValueType? vec3dType = SkiaShaderImplementation.FindUniformType(sksl, "vec3dUniform");
  81. UniformValueType? vec4Type = SkiaShaderImplementation.FindUniformType(sksl, "vec4Uniform");
  82. UniformValueType? shaderType = SkiaShaderImplementation.FindUniformType(sksl, "shaderUniform");
  83. UniformValueType? colorType = SkiaShaderImplementation.FindUniformType(sksl, "colorUniform");
  84. UniformValueType? colorType2 = SkiaShaderImplementation.FindUniformType(sksl, "colorUniform2");
  85. Assert.Equal(UniformValueType.Float, floatType);
  86. Assert.Equal(UniformValueType.Vector2, vector2Type);
  87. Assert.Equal(UniformValueType.Vector3, vec3dType);
  88. Assert.Equal(UniformValueType.Vector4, half3Type);
  89. Assert.Equal(UniformValueType.Vector4, vec4Type);
  90. Assert.Equal(UniformValueType.Shader, shaderType);
  91. Assert.Equal(UniformValueType.Color, colorType);
  92. Assert.Equal(UniformValueType.Color, colorType2);
  93. }
  94. }