public void TestGlslESCompiler() { VirtualFileSystem.RemountFileSystem("/shaders", "../../../../shaders"); VirtualFileSystem.RemountFileSystem("/baseShaders", "../../../../engine/SiliconStudio.Paradox.Graphics/Shaders"); VirtualFileSystem.RemountFileSystem("/compiler", "Compiler"); var compiler = new EffectCompiler(); compiler.SourceDirectories.Add("shaders"); compiler.SourceDirectories.Add("compiler"); compiler.SourceDirectories.Add("baseShaders"); var compilerParameters = new CompilerParameters { Platform = GraphicsPlatform.OpenGLES }; var results = compiler.Compile(new ShaderMixinGeneratorSource("ToGlslEffect"), compilerParameters); }
public void TestMaterial() { var compiler = new EffectCompiler { UseFileSystem = true }; compiler.SourceDirectories.Add(@"..\..\sources\engine\SiliconStudio.Paradox.Graphics\Shaders"); compiler.SourceDirectories.Add(@"..\..\sources\engine\SiliconStudio.Paradox.Engine\Shaders"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Core"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Lights"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Materials"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Shadows"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\ComputeColor"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Skinning"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Shading"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Transformation"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Utils"); var compilerParameters = new CompilerParameters { Platform = GraphicsPlatform.Direct3D11 }; var layers = new MaterialBlendLayers(); layers.Add(new MaterialBlendLayer { BlendMap = new ComputeFloat(0.5f), Material = AttachedReferenceManager.CreateSerializableVersion<Material>(Guid.Empty, "fake") }); var materialAsset = new MaterialAsset { Attributes = new MaterialAttributes() { Diffuse = new MaterialDiffuseMapFeature() { DiffuseMap = new ComputeColor(Color4.White) }, DiffuseModel = new MaterialDiffuseLambertModelFeature() }, Layers = layers }; var fakeAsset = new MaterialAsset { Attributes = new MaterialAttributes() { Diffuse = new MaterialDiffuseMapFeature() { DiffuseMap = new ComputeColor(Color.Blue) }, } }; var context = new MaterialGeneratorContext { FindAsset = reference => fakeAsset }; var result = MaterialGenerator.Generate(new MaterialDescriptor { Attributes = materialAsset.Attributes, Layers = materialAsset.Layers }, context, "TestMaterial"); compilerParameters.Set(MaterialKeys.PixelStageSurfaceShaders, result.Material.Parameters.Get(MaterialKeys.PixelStageSurfaceShaders)); var directionalLightGroup = new ShaderClassSource("LightDirectionalGroup", 1); compilerParameters.Set(LightingKeys.DirectLightGroups, new List<ShaderSource> { directionalLightGroup }); //compilerParameters.Set(LightingKeys.CastShadows, false); //compilerParameters.Set(MaterialParameters.HasSkinningPosition, true); //compilerParameters.Set(MaterialParameters.HasSkinningNormal, true); compilerParameters.Set(MaterialKeys.HasNormalMap, true); var results = compiler.Compile(new ShaderMixinGeneratorSource("ParadoxEffectBase"), compilerParameters); Assert.IsFalse(results.HasErrors); }
public void TestMixinAndComposeKeys() { var compiler = new EffectCompiler { UseFileSystem = true }; compiler.SourceDirectories.Add(@"..\..\sources\engine\SiliconStudio.Paradox.Graphics\Shaders"); compiler.SourceDirectories.Add(@"..\..\sources\engine\SiliconStudio.Paradox.Shaders.Tests\GameAssets\Mixins"); var compilerParameters = new CompilerParameters {Platform = GraphicsPlatform.Direct3D11}; var subCompute1Key = TestABC.TestParameters.UseComputeColor2.ComposeWith("SubCompute1"); var subCompute2Key = TestABC.TestParameters.UseComputeColor2.ComposeWith("SubCompute2"); var subComputesKey = TestABC.TestParameters.UseComputeColorRedirect.ComposeWith("SubComputes[0]"); compilerParameters.Set(subCompute1Key, true); compilerParameters.Set(subComputesKey, true); var results = compiler.Compile(new ShaderMixinGeneratorSource("test_mixin_compose_keys"), compilerParameters); Assert.IsFalse(results.HasErrors); var mainBytecode = results.Bytecode.WaitForResult(); Assert.IsFalse(mainBytecode.CompilationLog.HasErrors); Assert.NotNull(mainBytecode.Bytecode.Reflection.ConstantBuffers); Assert.AreEqual(1, mainBytecode.Bytecode.Reflection.ConstantBuffers.Count); var cbuffer = mainBytecode.Bytecode.Reflection.ConstantBuffers[0]; Assert.NotNull(cbuffer.Members); Assert.AreEqual(2, cbuffer.Members.Length); // Check that ComputeColor2.Color is correctly composed for variables var computeColorSubCompute2 = ComputeColor2Keys.Color.ComposeWith("SubCompute1"); var computeColorSubComputes = ComputeColor2Keys.Color.ComposeWith("ColorRedirect.SubComputes[0]"); var members = cbuffer.Members.Select(member => member.Param.KeyName).ToList(); Assert.IsTrue(members.Contains(computeColorSubCompute2.Name)); Assert.IsTrue(members.Contains(computeColorSubComputes.Name)); }
public void TestStream() { var compiler = new EffectCompiler { UseFileSystem = true }; compiler.SourceDirectories.Add(@"..\..\sources\engine\SiliconStudio.Paradox.Shaders.Tests\GameAssets\Compiler"); compiler.SourceDirectories.Add(@"..\..\sources\engine\SiliconStudio.Paradox.Graphics\Shaders"); compiler.SourceDirectories.Add(@"..\..\sources\engine\SiliconStudio.Paradox.Engine\Shaders"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Core"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Lights"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Materials"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Shadows"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\ComputeColor"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Skinning"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Shading"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Transformation"); compiler.SourceDirectories.Add(@"..\..\sources\shaders\Utils"); var compilerParameters = new CompilerParameters { Platform = GraphicsPlatform.Direct3D11 }; var results = compiler.Compile(new ShaderClassSource("TestStream"), compilerParameters); Assert.IsFalse(results.HasErrors); }
private static async Task ShaderCompilerRequestHandler(SocketMessageLayer socketMessageLayer, EffectLogStore recordedEffectCompile, EffectCompiler effectCompiler, RemoteEffectCompilerEffectRequest remoteEffectCompilerEffectRequest) { // Yield so that this socket can continue its message loop to answer to shader file request // TODO: maybe not necessary anymore with RouterServiceServer? await Task.Yield(); Console.WriteLine("Compiling shader"); // Restore MixinTree.UsedParameters (since it is DataMemberIgnore) remoteEffectCompilerEffectRequest.MixinTree.UsedParameters = remoteEffectCompilerEffectRequest.UsedParameters; // A shader has been requested, compile it (asynchronously)! var precompiledEffectShaderPass = await effectCompiler.Compile(remoteEffectCompilerEffectRequest.MixinTree, null).AwaitResult(); // Record compilation to asset file (only if parent) recordedEffectCompile[new EffectCompileRequest(remoteEffectCompilerEffectRequest.MixinTree.Name, remoteEffectCompilerEffectRequest.MixinTree.UsedParameters)] = true; // Send compiled shader socketMessageLayer.Send(new RemoteEffectCompilerEffectAnswer { StreamId = remoteEffectCompilerEffectRequest.StreamId, EffectBytecode = precompiledEffectShaderPass.Bytecode }); }
public void TestShaderCompilation() { var generics = new string[3]; generics[0] = "Texturing.Texture1"; generics[1] = "TEXCOORD0"; generics[2] = "float4(2.0,1,1,1)"; var compilerParameters = new ShaderMixinParameters(); compilerParameters.Set(EffectSourceCodeKeys.Enable, true); compilerParameters.Set(CompilerParameters.GraphicsProfileKey, GraphicsProfile.Level_11_0); var mixinSource = new ShaderMixinSource { Name = "TestShaderCompilationGenericClass", UsedParameters = compilerParameters }; mixinSource.Mixins.Add(new ShaderClassSource("GenericClass2", generics)); var log = new CompilerResults(); var compiler = new EffectCompiler(); compiler.SourceDirectories.Add("shaders"); var effectByteCode = compiler.Compile(mixinSource, new CompilerParameters()); }
private async void ShaderCompilerRequestHandler(SocketContext clientSocketContext, EffectLogStore recordedEffectCompile, EffectCompiler effectCompiler, ShaderCompilerRequest shaderCompilerRequest) { // Wait for a client to be connected await clientConnectedTCS.Task; // Yield so that this socket can continue its message loop to answer to shader file request. await Task.Yield(); Console.WriteLine("Compiling shader"); // A shader has been requested, compile it (asynchronously)! var precompiledEffectShaderPass = await effectCompiler.Compile(shaderCompilerRequest.MixinTree, null).AwaitResult(); // Record compilation to asset file (only if parent) recordedEffectCompile[new EffectCompileRequest(shaderCompilerRequest.MixinTree.Name, shaderCompilerRequest.MixinTree.UsedParameters)] = true; // Send compiled shader clientSocketContext.Send(new ShaderCompilerAnswer { StreamId = shaderCompilerRequest.StreamId, EffectBytecode = precompiledEffectShaderPass.Bytecode }); }