Example #1
0
        public void TestLoadAst()
        {
            var log = new LoggerResult();

            var simple = shaderLoader.LoadClassSource(new ShaderClassSource("Simple"), new SiliconStudio.Shaders.Parser.ShaderMacro[0], log, false)?.Type;

            Assert.That(simple.Members.Count, Is.EqualTo(1));

            var simple2 = shaderLoader.LoadClassSource(new ShaderClassSource("Simple"), new SiliconStudio.Shaders.Parser.ShaderMacro[0], log, false)?.Type;

            // Make sure that a class is not duplicated in memory
            Assert.That(ReferenceEquals(simple, simple2), Is.True);
        }
Example #2
0
        public void TestLoadAst()
        {
            var log = new LoggerResult();

            var simple = shaderLoader.LoadClassSource(new ShaderClassSource("Simple"), new Xenko.Core.Shaders.Parser.ShaderMacro[0], log, false)?.Type;

            Assert.Equal(1, simple.Members.Count);

            var simple2 = shaderLoader.LoadClassSource(new ShaderClassSource("Simple"), new Xenko.Core.Shaders.Parser.ShaderMacro[0], log, false)?.Type;

            // Make sure that a class is not duplicated in memory
            Assert.True(ReferenceEquals(simple, simple2));
        }
Example #3
0
        public void TestLoadAst()
        {
            var log = new LoggerResult();

            var shaderClassString = new ShaderClassString(ShaderSourceName, ShaderSourceCode, new Vector4(1, 1, 1, 1));

            var simple = shaderLoader.LoadClassSource(shaderClassString, new Stride.Core.Shaders.Parser.ShaderMacro[0], log, false)?.Type;

            Assert.Single(simple.Members);

            var shaderClassString2 = new ShaderClassString(ShaderSourceName, ShaderSourceCode, new Vector4(1, 1, 1, 1));

            var simple2 = shaderLoader.LoadClassSource(shaderClassString2, new Stride.Core.Shaders.Parser.ShaderMacro[0], log, false)?.Type;

            // Make sure that a class is not duplicated in memory
            Assert.True(ReferenceEquals(simple, simple2));
        }
Example #4
0
        public void TestParsing()
        {
            Init();

            var generics = new object[9];

            generics[0] = "Texturing.Texture1";
            generics[1] = "Texturing.Sampler1";
            generics[2] = "TEXCOORD0";
            generics[3] = "CustomLink";
            generics[4] = "1.2f";
            generics[5] = "int2(1,2)";
            generics[6] = "uint3(0,1,2)";
            generics[7] = "float4(5,4,3,2)";
            generics[8] = "StaticClass.staticFloat";
            var shaderClass = loader.LoadClassSource(new ShaderClassSource("GenericClass", generics), null, logger, false)?.Type;

            Assert.NotNull(shaderClass);

            Assert.Equal(10, shaderClass.Members.Count);
            Assert.Equal(4, shaderClass.Members.OfType <Variable>().Count(x => x.Qualifiers.Contains(Stride.Core.Shaders.Ast.Hlsl.StorageQualifier.Static)));
            Assert.Empty(shaderClass.ShaderGenerics);
            Assert.Empty(shaderClass.GenericArguments);
            Assert.Empty(shaderClass.GenericParameters);
            Assert.Single(shaderClass.BaseClasses);

            var linkVar = shaderClass.Members[0] as Variable;

            Assert.NotNull(linkVar);
            var linkName = linkVar.Attributes.OfType <AttributeDeclaration>().Where(x => x.Name.Text == "Link").Select(x => x.Parameters[0].Text).FirstOrDefault();

            Assert.Equal("GenericLink.CustomLink", linkName);

            var baseClass = shaderClass.BaseClasses[0].Name as IdentifierGeneric;

            Assert.NotNull(baseClass);
            Assert.Equal(3, baseClass.Identifiers.Count);
            Assert.Equal("TEXCOORD0", baseClass.Identifiers[0].Text);
            Assert.Equal("CustomLink", baseClass.Identifiers[1].Text);
            Assert.Equal("float4(5,4,3,2)", baseClass.Identifiers[2].Text);
        }
        /// <summary>
        /// Get the shader.
        /// </summary>
        /// <param name="name">The name of the shader.</param>
        /// <returns>The shader.</returns>
        public ShaderClassType GetShader(string name)
        {
            try
            {
                if (!loader.ClassExists(name))
                {
                    return(null);
                }

                var shader = loader.LoadClassSource(new ShaderClassSource(name), null, logger, false);
                if (logger.HasErrors)
                {
                    // TODO: output messages
                    logger.Messages.Clear();
                    return(null);
                }
                return(shader.Type);
            }
            catch
            {
                // TODO: output messages
                return(null);
            }
        }