public void HlslEndToEnd(string vsName, string fsName) { Compilation compilation = TestUtil.GetTestProjectCompilation(); HlslBackend backend = new HlslBackend(compilation); ShaderGenerator sg = new ShaderGenerator( compilation, vsName, fsName, backend); ShaderGenerationResult result = sg.GenerateShaders(); IReadOnlyList <GeneratedShaderSet> sets = result.GetOutput(backend); Assert.Equal(1, sets.Count); GeneratedShaderSet set = sets[0]; ShaderModel shaderModel = set.Model; if (vsName != null) { ShaderFunction vsFunction = shaderModel.GetFunction(vsName); string vsCode = set.VertexShaderCode; FxcTool.AssertCompilesCode(vsCode, "vs_5_0", vsFunction.Name); } if (fsName != null) { ShaderFunction fsFunction = shaderModel.GetFunction(fsName); string fsCode = set.FragmentShaderCode; FxcTool.AssertCompilesCode(fsCode, "ps_5_0", fsFunction.Name); } }
public void Glsl450EndToEnd(string vsName, string fsName) { Compilation compilation = TestUtil.GetTestProjectCompilation(); LanguageBackend backend = new Glsl450Backend(compilation); ShaderGenerator sg = new ShaderGenerator( compilation, vsName, fsName, backend); ShaderGenerationResult result = sg.GenerateShaders(); IReadOnlyList <GeneratedShaderSet> sets = result.GetOutput(backend); Assert.Equal(1, sets.Count); GeneratedShaderSet set = sets[0]; ShaderModel shaderModel = set.Model; if (vsName != null) { ShaderFunction vsFunction = shaderModel.GetFunction(vsName); string vsCode = set.VertexShaderCode; GlsLangValidatorTool.AssertCompilesCode(vsCode, "vert", true); } if (fsName != null) { ShaderFunction fsFunction = shaderModel.GetFunction(fsName); string fsCode = set.FragmentShaderCode; GlsLangValidatorTool.AssertCompilesCode(fsCode, "frag", true); } }
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 TestVertexShader_ShaderModel() { string functionName = "TestShaders.TestVertexShader.VS"; Compilation compilation = TestUtil.GetTestProjectCompilation(); HlslBackend backend = new HlslBackend(compilation); ShaderGenerator sg = new ShaderGenerator( compilation, functionName, null, backend); ShaderGenerationResult genResult = sg.GenerateShaders(); IReadOnlyList <GeneratedShaderSet> sets = genResult.GetOutput(backend); Assert.Equal(1, sets.Count); ShaderModel shaderModel = sets[0].Model; Assert.Equal(2, shaderModel.Structures.Length); Assert.Equal(3, shaderModel.AllResources.Length); ShaderFunction vsEntry = shaderModel.GetFunction(functionName); Assert.Equal("VS", vsEntry.Name); Assert.Single(vsEntry.Parameters); Assert.True(vsEntry.IsEntryPoint); Assert.Equal(ShaderFunctionType.VertexEntryPoint, vsEntry.Type); }
public void DummyTest() { string vsName = "TestShaders.VeldridShaders.VertexAndFragment.VS"; string fsName = "TestShaders.VeldridShaders.VertexAndFragment.FS"; Compilation compilation = TestUtil.GetTestProjectCompilation(); using (TempFile fp = new TempFile()) { Microsoft.CodeAnalysis.Emit.EmitResult emitResult = compilation.Emit(fp); Assert.True(emitResult.Success); } LanguageBackend backend = new Glsl450Backend(compilation); ShaderGenerator sg = new ShaderGenerator( compilation, vsName, fsName, backend); ShaderGenerationResult result = sg.GenerateShaders(); IReadOnlyList <GeneratedShaderSet> sets = result.GetOutput(backend); Assert.Equal(1, sets.Count); GeneratedShaderSet set = sets[0]; ShaderModel shaderModel = set.Model; if (vsName != null) { ShaderFunction vsFunction = shaderModel.GetFunction(vsName); string vsCode = set.VertexShaderCode; File.WriteAllText(@"C:\Users\raver\Documents\forward-vertex.glsl", vsCode); GlsLangValidatorTool.AssertCompilesCode(vsCode, "vert", true); } if (fsName != null) { ShaderFunction fsFunction = shaderModel.GetFunction(fsName); string fsCode = set.FragmentShaderCode; File.WriteAllText(@"C:\Users\raver\Documents\forward-frag.glsl", fsCode); GlsLangValidatorTool.AssertCompilesCode(fsCode, "frag", true); } }