/// <summary> /// Initializes a new instance of the <see cref="TestSet"/> class. /// </summary> /// <param name="testSets">The test sets.</param> /// <param name="toolChain">The tool chain (if any).</param> public TestSet(TestSets testSets, ToolChain toolChain = null) { TestSets = testSets; Name = toolChain?.GraphicsBackend.ToString() ?? "CPU"; ToolChain = toolChain; Backend = toolChain?.CreateBackend(testSets.Compilation); }
public static void ShaderSetAutoDiscovery() { ToolChain toolChain = ToolChain.Get(ToolFeatures.ToCompiled); if (toolChain == null) { throw new RequiredToolFeatureMissingException("No tool chain supporting compilation was found!"); } Compilation compilation = TestUtil.GetCompilation(); LanguageBackend backend = toolChain.CreateBackend(compilation); ShaderGenerator sg = new ShaderGenerator(compilation, backend); ShaderGenerationResult generationResult = sg.GenerateShaders(); IReadOnlyList <GeneratedShaderSet> hlslSets = generationResult.GetOutput(backend); Assert.Equal(4, hlslSets.Count); GeneratedShaderSet set = hlslSets[0]; Assert.Equal("VertexAndFragment", set.Name); CompileResult result = toolChain.Compile(set.VertexShaderCode, Stage.Vertex, "VS"); Assert.False(result.HasError, result.ToString()); result = toolChain.Compile(set.FragmentShaderCode, Stage.Fragment, "FS"); Assert.False(result.HasError, result.ToString()); }
private void TestCompile(GraphicsBackend graphicsBackend, string vsName, string fsName, string csName = null) { Compilation compilation = TestUtil.GetCompilation(); ToolChain toolChain = ToolChain.Require(ToolFeatures.ToCompiled, graphicsBackend); LanguageBackend backend = toolChain.CreateBackend(compilation); ShaderGenerator sg = new ShaderGenerator(compilation, backend, vsName, fsName, csName); ShaderGenerationResult generationResult = sg.GenerateShaders(); IReadOnlyList <GeneratedShaderSet> sets = generationResult.GetOutput(backend); Assert.Equal(1, sets.Count); GeneratedShaderSet set = sets[0]; ShaderModel shaderModel = set.Model; List <CompileResult> results = new List <CompileResult>(); if (!string.IsNullOrWhiteSpace(vsName)) { ShaderFunction vsFunction = shaderModel.GetFunction(vsName); string vsCode = set.VertexShaderCode; results.Add(toolChain.Compile(vsCode, Stage.Vertex, vsFunction.Name)); } if (!string.IsNullOrWhiteSpace(fsName)) { ShaderFunction fsFunction = shaderModel.GetFunction(fsName); string fsCode = set.FragmentShaderCode; results.Add(toolChain.Compile(fsCode, Stage.Fragment, fsFunction.Name)); } if (!string.IsNullOrWhiteSpace(csName)) { ShaderFunction csFunction = shaderModel.GetFunction(csName); string csCode = set.ComputeShaderCode; results.Add(toolChain.Compile(csCode, Stage.Compute, csFunction.Name)); } // Collate results StringBuilder builder = new StringBuilder(); foreach (CompileResult result in results) { if (result.HasError) { builder.AppendLine(result.ToString()); } } Assert.True(builder.Length < 1, builder.ToString()); }
public void PartialFiles() { ToolChain toolChain = ToolChain.Get(ToolFeatures.ToCompiled); if (toolChain == null) { throw new RequiredToolFeatureMissingException("No tool chain supporting compilation was found!"); } Compilation compilation = TestUtil.GetCompilation(); LanguageBackend backend = toolChain.CreateBackend(compilation); ShaderGenerator sg = new ShaderGenerator(compilation, backend, "TestShaders.PartialVertex.VertexShaderFunc"); ShaderGenerationResult genResult = sg.GenerateShaders(); IReadOnlyList <GeneratedShaderSet> sets = genResult.GetOutput(backend); Assert.Equal(1, sets.Count); GeneratedShaderSet set = sets[0]; ShaderModel shaderModel = set.Model; string vsCode = set.VertexShaderCode; CompileResult result = toolChain.Compile(vsCode, Stage.Vertex, "VertexShaderFunc"); Assert.False(result.HasError, result.ToString()); }