From ced9c727f09f142c143c182ce36e1709e725f968 Mon Sep 17 00:00:00 2001 From: tebjan Date: Sat, 9 Nov 2019 17:00:06 +0100 Subject: [PATCH 01/12] set version to -beta03 --- sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs | 2 +- sources/shared/SharedAssemblyInfo.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs b/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs index 9540b02046..248d110d33 100644 --- a/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs +++ b/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs @@ -3,6 +3,6 @@ namespace Xenko.Samples.Templates static class ThisPackageVersion { // we version this package manually because most of the time the samples are big and don't need to be updated - public static string Current = "3.1.0.1"; + public static string Current = "3.1.0.1-beta03"; } } diff --git a/sources/shared/SharedAssemblyInfo.cs b/sources/shared/SharedAssemblyInfo.cs index d7383dd372..5ee3003869 100644 --- a/sources/shared/SharedAssemblyInfo.cs +++ b/sources/shared/SharedAssemblyInfo.cs @@ -49,7 +49,7 @@ internal class XenkoVersion /// - -betaXX: development version (XX should corespond to development asset versioning) /// - -betaXX-YYYY: beta release (YYYY is the git height since current version has been bumped) /// - public const string NuGetVersionSuffix = ""; + public const string NuGetVersionSuffix = "-beta03"; /// /// The build metadata, usually +g[git_hash] during package. Automatically set by Xenko.GitVersioning.GenerateVersionFile. From 0b65acd34d33bbc1c198464b01fa2bd1e700c0b4 Mon Sep 17 00:00:00 2001 From: tebjan Date: Sat, 9 Nov 2019 17:00:57 +0100 Subject: [PATCH 02/12] better null check in ComputeBinaryBase --- .../Rendering/Materials/ComputeColors/ComputeBinaryBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/engine/Xenko.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs b/sources/engine/Xenko.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs index 06c31be030..dc0fc3bd8e 100644 --- a/sources/engine/Xenko.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs +++ b/sources/engine/Xenko.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs @@ -82,8 +82,8 @@ public override IEnumerable GetChildren(object context = null) public override ShaderSource GenerateShaderSource(ShaderGeneratorContext context, MaterialComputeColorKeys baseKeys) { - var leftShaderSource = LeftChild.GenerateShaderSource(context, baseKeys); - var rightShaderSource = RightChild.GenerateShaderSource(context, baseKeys); + var leftShaderSource = LeftChild?.GenerateShaderSource(context, baseKeys); + var rightShaderSource = RightChild?.GenerateShaderSource(context, baseKeys); var shaderSource = new ShaderClassSource(GetCorrespondingShaderSourceName(Operator)); var mixin = new ShaderMixinSource(); From f92f606599dd6b7a4bf15c97f675d45f8d86e04e Mon Sep 17 00:00:00 2001 From: tebjan Date: Wed, 13 Nov 2019 00:01:50 +0100 Subject: [PATCH 03/12] bumped version to 3.1.0.2-beta01 --- sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs | 2 +- sources/shared/SharedAssemblyInfo.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs b/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs index 248d110d33..2e3149f5d9 100644 --- a/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs +++ b/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs @@ -3,6 +3,6 @@ namespace Xenko.Samples.Templates static class ThisPackageVersion { // we version this package manually because most of the time the samples are big and don't need to be updated - public static string Current = "3.1.0.1-beta03"; + public static string Current = "3.1.0.2-beta01"; } } diff --git a/sources/shared/SharedAssemblyInfo.cs b/sources/shared/SharedAssemblyInfo.cs index 5ee3003869..43dc507e87 100644 --- a/sources/shared/SharedAssemblyInfo.cs +++ b/sources/shared/SharedAssemblyInfo.cs @@ -25,7 +25,7 @@ internal class XenkoVersion /// /// The version used by editor for display purpose. 4th digit needs to be at least 1 if used (due to NuGet special cases). /// - public const string PublicVersion = "3.1.0.1"; + public const string PublicVersion = "3.1.0.2"; /// /// The current assembly version as text, currently same as . @@ -49,7 +49,7 @@ internal class XenkoVersion /// - -betaXX: development version (XX should corespond to development asset versioning) /// - -betaXX-YYYY: beta release (YYYY is the git height since current version has been bumped) /// - public const string NuGetVersionSuffix = "-beta03"; + public const string NuGetVersionSuffix = "-beta01"; /// /// The build metadata, usually +g[git_hash] during package. Automatically set by Xenko.GitVersioning.GenerateVersionFile. From a4b2c5afe950032f75a7144ad6b98b98972f4071 Mon Sep 17 00:00:00 2001 From: tebjan Date: Wed, 13 Nov 2019 00:07:14 +0100 Subject: [PATCH 04/12] added ShaderClassString and a common base class ShaderClassCode, most places now use the common base class. LoadShaderSource can now also take a source code string as input. --- .../Materials/ComputeColors/ComputeColors.cd | 34 ++--- .../Materials/MaterialBlendLayerContext.cs | 4 +- .../Materials/ShadingModelShaderBuilder.cs | 2 +- .../ShaderSourceComparer.cs | 10 +- .../Mixins/ModuleMixinInfo.cs | 4 +- .../Mixins/ShaderLoader.cs | 18 ++- .../Mixins/ShaderSourceManager.cs | 9 +- .../Mixins/XenkoShaderLibrary.cs | 8 +- .../Xenko.Shaders.Parser/ShaderMixinParser.cs | 4 +- .../TestMixinGenerator.Extensions.cs | 2 +- .../Compiler/EffectCompilerBase.cs | 2 +- .../engine/Xenko.Shaders/ShaderClassCode.cs | 66 ++++++++++ .../engine/Xenko.Shaders/ShaderClassSource.cs | 43 +------ .../engine/Xenko.Shaders/ShaderClassString.cs | 119 ++++++++++++++++++ .../Xenko.Shaders/ShaderMixinContext.cs | 11 +- .../engine/Xenko.Shaders/ShaderMixinSource.cs | 10 +- 16 files changed, 251 insertions(+), 95 deletions(-) create mode 100644 sources/engine/Xenko.Shaders/ShaderClassCode.cs create mode 100644 sources/engine/Xenko.Shaders/ShaderClassString.cs diff --git a/sources/engine/Xenko.Rendering/Rendering/Materials/ComputeColors/ComputeColors.cd b/sources/engine/Xenko.Rendering/Rendering/Materials/ComputeColors/ComputeColors.cd index 7b8d1a84f7..bd0e0d1fd7 100644 --- a/sources/engine/Xenko.Rendering/Rendering/Materials/ComputeColors/ComputeColors.cd +++ b/sources/engine/Xenko.Rendering/Rendering/Materials/ComputeColors/ComputeColors.cd @@ -17,7 +17,7 @@ - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + AAAAAAAAAAQAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA= Rendering\Materials\ComputeColors\ComputeBinaryColor.cs @@ -33,7 +33,7 @@ - AAAAAAAEAAAAAAAEAAAAAAAAAAAAAAAAAAIAAAAAAAA= + IAAAAAAEAAAAAIAEIAAAAAAABAAAAAAAAAIAAAAAAAA= Rendering\Materials\ComputeColors\ComputeColor.cs @@ -49,7 +49,7 @@ - AAAAAAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAA= + IAAAAAAEAAQAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAA= Rendering\Materials\ComputeColors\ComputeFloat4.cs @@ -72,14 +72,14 @@ - AACAAAAGAACIAAAEACAAAAAAAQAQQAAAAAAEgAAAgAA= + AAAAAAAGAAAAAAAEACAAAAAAAAAAQAAAAAAEAAAAgAA= Rendering\Materials\ComputeColors\ComputeShaderClassBase.cs - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + AAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA= Rendering\Materials\ComputeColors\ComputeShaderClassColor.cs @@ -95,14 +95,14 @@ - AAAAAAAEAAAQAAAEAAIAAAAAAAACAAAQAAIAIAIAgAA= + AAAAAAAUAAAQAIAEAAIgAAAAAAACAAAQAAIAIAIAgAA= Rendering\Materials\ComputeColors\ComputeTextureBase.cs - AAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + IAAIAAAQAgAQAAAAIAAAAAAAAAAAAAAAAAAAAAEAAAA= Rendering\Materials\ComputeColors\ComputeTextureColor.cs @@ -110,24 +110,24 @@ - AAAAAAAgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + AAAIAAAwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Rendering\Materials\ComputeColors\ComputeTextureScalar.cs - + AAAEAAAEAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAA= - Rendering\Materials\ComputeColors\ComputeStreamBase.cs + Rendering\Materials\ComputeColors\ComputeVertexStreamBase.cs - + - AAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Rendering\Materials\ComputeColors\ComputeStreamColor.cs + AAAEAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Rendering\Materials\ComputeColors\ComputeVertexStreamScalar.cs @@ -156,15 +156,15 @@ - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + AAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA= Rendering\Materials\IComputeColor.cs - - + + AAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAA= - Rendering\Materials\ComputeColors\IComputeStream.cs + Rendering\Materials\ComputeColors\IComputeVertexStream.cs diff --git a/sources/engine/Xenko.Rendering/Rendering/Materials/MaterialBlendLayerContext.cs b/sources/engine/Xenko.Rendering/Rendering/Materials/MaterialBlendLayerContext.cs index b269797d5b..ac2f1d0abc 100644 --- a/sources/engine/Xenko.Rendering/Rendering/Materials/MaterialBlendLayerContext.cs +++ b/sources/engine/Xenko.Rendering/Rendering/Materials/MaterialBlendLayerContext.cs @@ -155,14 +155,14 @@ public ShaderSource GenerateStreamInitializers(MaterialShaderStage stage) // the streams coming from the material layers foreach (var streamInitializer in stageContext.StreamInitializers) { - mixin.Mixins.Add(streamInitializer); + mixin.Mixins.Add(new ShaderClassSource(streamInitializer)); } stageContext.StreamInitializers.Clear(); // the streams specific to a stage // TODO: Use StreamInitializers instead of streams initializers hardcoded in MaterialPixelShadingStream.ResetStream if (stage == MaterialShaderStage.Pixel) - mixin.Mixins.Add("MaterialPixelShadingStream"); + mixin.Mixins.Add(new ShaderClassSource("MaterialPixelShadingStream")); return mixin; } diff --git a/sources/engine/Xenko.Rendering/Rendering/Materials/ShadingModelShaderBuilder.cs b/sources/engine/Xenko.Rendering/Rendering/Materials/ShadingModelShaderBuilder.cs index d88af0fc7b..89e8b66729 100644 --- a/sources/engine/Xenko.Rendering/Rendering/Materials/ShadingModelShaderBuilder.cs +++ b/sources/engine/Xenko.Rendering/Rendering/Materials/ShadingModelShaderBuilder.cs @@ -20,4 +20,4 @@ public class ShadingModelShaderBuilder public ShaderSource LightDependentSurface { get; set; } } -} \ No newline at end of file +} diff --git a/sources/engine/Xenko.Shaders.Compiler/ShaderSourceComparer.cs b/sources/engine/Xenko.Shaders.Compiler/ShaderSourceComparer.cs index 65966bc5ce..f5dc44062e 100644 --- a/sources/engine/Xenko.Shaders.Compiler/ShaderSourceComparer.cs +++ b/sources/engine/Xenko.Shaders.Compiler/ShaderSourceComparer.cs @@ -28,10 +28,10 @@ public override bool Equals(ShaderSource x, ShaderSource y) if (x.GetType() != y.GetType()) return false; - if (x is ShaderClassSource) + if (x is ShaderClassCode) { - var x1 = (ShaderClassSource)x; - var y1 = (ShaderClassSource)y; + var x1 = (ShaderClassCode)x; + var y1 = (ShaderClassCode)y; return x1.ClassName == y1.ClassName && ArrayExtensions.ArraysEqual(x1.GenericArguments, y1.GenericArguments); } @@ -59,9 +59,9 @@ public override int GetHashCode(ShaderSource obj) unchecked { - if (obj is ShaderClassSource) + if (obj is ShaderClassCode) { - var obj1 = (ShaderClassSource)obj; + var obj1 = (ShaderClassCode)obj; return obj1.ClassName.GetHashCode() ^ ArrayExtensions.ComputeHash(obj1.GenericArguments); } diff --git a/sources/engine/Xenko.Shaders.Parser/Mixins/ModuleMixinInfo.cs b/sources/engine/Xenko.Shaders.Parser/Mixins/ModuleMixinInfo.cs index 98b3094add..a428103476 100644 --- a/sources/engine/Xenko.Shaders.Parser/Mixins/ModuleMixinInfo.cs +++ b/sources/engine/Xenko.Shaders.Parser/Mixins/ModuleMixinInfo.cs @@ -67,13 +67,13 @@ public ShaderClassType MixinAst } /// - /// Tests if this instance is a of the specified type name + /// Tests if this instance is a of the specified type name /// /// The type name to test /// true if same type name public bool IsShaderClass(string typeName) { - var classSource = ShaderSource as ShaderClassSource; + var classSource = ShaderSource as ShaderClassCode; if (classSource == null) { return false; diff --git a/sources/engine/Xenko.Shaders.Parser/Mixins/ShaderLoader.cs b/sources/engine/Xenko.Shaders.Parser/Mixins/ShaderLoader.cs index a7b836decf..8309639820 100644 --- a/sources/engine/Xenko.Shaders.Parser/Mixins/ShaderLoader.cs +++ b/sources/engine/Xenko.Shaders.Parser/Mixins/ShaderLoader.cs @@ -92,7 +92,7 @@ public class LoadedShaderClassType /// /// A ShaderClassType or null if there was some errors. /// shaderClassSource - public LoadedShaderClassType LoadClassSource(ShaderClassSource shaderClassSource, Xenko.Core.Shaders.Parser.ShaderMacro[] shaderMacros, LoggerResult log, bool autoGenericInstances) + public LoadedShaderClassType LoadClassSource(ShaderClassCode shaderClassSource, Xenko.Core.Shaders.Parser.ShaderMacro[] shaderMacros, LoggerResult log, bool autoGenericInstances) { if (shaderClassSource == null) throw new ArgumentNullException("shaderClassSource"); @@ -103,7 +103,7 @@ public LoadedShaderClassType LoadClassSource(ShaderClassSource shaderClassSource foreach (var gen in shaderClassSource.GenericArguments) generics += "___" + gen; } - var shaderClassType = LoadShaderClass(shaderClassSource.ClassName, generics, log, shaderMacros); + var shaderClassType = LoadShaderClass(shaderClassSource, generics, log, shaderMacros); if (shaderClassType == null) return null; @@ -275,7 +275,7 @@ Expression CreateExpressionFromString(string name) return (Expression)result.Root.AstNode; } - private LoadedShaderClassType LoadShaderClass(ShaderClassSource classSource, string generics, LoggerResult log, Xenko.Core.Shaders.Parser.ShaderMacro[] macros = null) + private LoadedShaderClassType LoadShaderClass(ShaderClassCode classSource, string generics, LoggerResult log, Xenko.Core.Shaders.Parser.ShaderMacro[] macros = null) { var type = classSource.ClassName; if (type == null) throw new ArgumentNullException("type"); @@ -291,8 +291,14 @@ private LoadedShaderClassType LoadShaderClass(ShaderClassSource classSource, str return shaderClass; } - // Load file - var shaderSource = SourceManager.LoadShaderSource(type); + ShaderSourceManager.ShaderSourceWithHash shaderSource; + + // Load shader source code + if (classSource is ShaderClassString shaderClassString) + shaderSource = SourceManager.LoadShaderSource(type, shaderClassString.ShaderSourceCode); + else + shaderSource = SourceManager.LoadShaderSource(type); + string preprocessedSource; try { @@ -405,7 +411,7 @@ private static string GenerateGenericClassName(ShaderClassType shaderClassType) return shaderClassType.Name.Text + (shaderClassType.GenericParameters == null ? string.Empty : "_" + string.Join("_", shaderClassType.GenericParameters.Select(x => x.ToString().Replace('.', '_')))); } - private static string GenerateGenericClassName(ShaderClassSource source) + private static string GenerateGenericClassName(ShaderClassCode source) { // Generate class name if (source.GenericArguments != null && source.GenericArguments.Length > 0) diff --git a/sources/engine/Xenko.Shaders.Parser/Mixins/ShaderSourceManager.cs b/sources/engine/Xenko.Shaders.Parser/Mixins/ShaderSourceManager.cs index f7c922fc84..ef5825a03f 100644 --- a/sources/engine/Xenko.Shaders.Parser/Mixins/ShaderSourceManager.cs +++ b/sources/engine/Xenko.Shaders.Parser/Mixins/ShaderSourceManager.cs @@ -112,16 +112,21 @@ public static ShaderSourceWithHash CreateShaderSourceWithHash(string type, strin /// Loads the shader source with the specified type name. /// /// The typeName. + /// Optional shader source code. Can be use for shaders that don't have a source file /// ShaderSourceWithHash. /// If the file was not found - public ShaderSourceWithHash LoadShaderSource(string type) + public ShaderSourceWithHash LoadShaderSource(string type, string shaderSourceCode = null) { lock (locker) { - // Load file ShaderSourceWithHash shaderSource; if (!loadedShaderSources.TryGetValue(type, out shaderSource)) { + // Load from string + if (!string.IsNullOrWhiteSpace(shaderSourceCode)) + return CreateShaderSourceWithHash(type, shaderSourceCode); + + // Load file var sourceUrl = FindFilePath(type); if (sourceUrl != null) { diff --git a/sources/engine/Xenko.Shaders.Parser/Mixins/XenkoShaderLibrary.cs b/sources/engine/Xenko.Shaders.Parser/Mixins/XenkoShaderLibrary.cs index 99baf94d34..244fe2009c 100644 --- a/sources/engine/Xenko.Shaders.Parser/Mixins/XenkoShaderLibrary.cs +++ b/sources/engine/Xenko.Shaders.Parser/Mixins/XenkoShaderLibrary.cs @@ -148,7 +148,7 @@ private void ExtendLibrary(ShaderSource shaderSource, Xenko.Core.Shaders.Parser. foreach (var composition in ((ShaderMixinSource)shaderSource).Compositions) ExtendLibrary(composition.Value, newMacros, mixinToAnalyze); } - else if (shaderSource is ShaderClassSource) + else if (shaderSource is ShaderClassCode) mixinToAnalyze.Add(GetModuleMixinInfo(shaderSource, macros)); else if (shaderSource is ShaderArraySource) { @@ -261,9 +261,9 @@ private ModuleMixinInfo BuildMixinInfo(ShaderSource shaderSource, Xenko.Core.Sha { ModuleMixinInfo mixinInfo = null; - if (shaderSource is ShaderClassSource) + if (shaderSource is ShaderClassCode) { - var shaderClassSource = shaderSource as ShaderClassSource; + var shaderClassSource = shaderSource as ShaderClassCode; mixinInfo = new ModuleMixinInfo { ShaderSource = shaderClassSource, Macros = macros }; LoadMixinFromClassSource(mixinInfo); } @@ -305,7 +305,7 @@ private ModuleMixinInfo BuildMixinInfo(ShaderSource shaderSource, Xenko.Core.Sha /// the ModuleMixinInfo private void LoadMixinFromClassSource(ModuleMixinInfo mixinInfo) { - var classSource = (ShaderClassSource)mixinInfo.ShaderSource; + var classSource = (ShaderClassCode)mixinInfo.ShaderSource; // If we allow to parse non instantiated generics, put empty generic arguments to let the ShaderLoader correctly expand the class var shaderClass = ShaderLoader.LoadClassSource(classSource, mixinInfo.Macros, mixinInfo.Log, AllowNonInstantiatedGenerics); diff --git a/sources/engine/Xenko.Shaders.Parser/ShaderMixinParser.cs b/sources/engine/Xenko.Shaders.Parser/ShaderMixinParser.cs index 775566779e..589dd9d232 100644 --- a/sources/engine/Xenko.Shaders.Parser/ShaderMixinParser.cs +++ b/sources/engine/Xenko.Shaders.Parser/ShaderMixinParser.cs @@ -135,7 +135,7 @@ internal ShaderCompilationContext ParseAndAnalyze(ShaderMixinSource shaderMixinS moduleMixinInfo.Log.CopyTo(parsingResult); var ast = moduleMixinInfo.MixinAst; - var shaderClassSource = moduleMixinInfo.ShaderSource as ShaderClassSource; + var shaderClassSource = moduleMixinInfo.ShaderSource as ShaderClassCode; // If we have a ShaderClassSource and it is not an inline one, then we can store the hash sources if (ast != null && shaderClassSource != null) { @@ -362,7 +362,7 @@ private static List BuildCompositionsDictionary(ShaderSource shader } - if (shaderSource is ShaderClassSource) + if (shaderSource is ShaderClassCode) { var finalModule = compilationContext.GetModuleMixinFromShaderSource(shaderSource); diff --git a/sources/engine/Xenko.Shaders.Tests/TestMixinGenerator.Extensions.cs b/sources/engine/Xenko.Shaders.Tests/TestMixinGenerator.Extensions.cs index 89b7befad6..e565b1dbab 100644 --- a/sources/engine/Xenko.Shaders.Tests/TestMixinGenerator.Extensions.cs +++ b/sources/engine/Xenko.Shaders.Tests/TestMixinGenerator.Extensions.cs @@ -39,7 +39,7 @@ public static void CheckComposition(this ShaderMixinSource mixin, string key, st Assert.True(source != null, $"Source composition for key [{key}] cannot be null"); - var classSource = source as ShaderClassSource; + var classSource = source as ShaderClassCode; if (classSource != null) { var sourceString = classSource.ToClassName(); diff --git a/sources/engine/Xenko.Shaders/Compiler/EffectCompilerBase.cs b/sources/engine/Xenko.Shaders/Compiler/EffectCompilerBase.cs index d2de78f0c5..d5abe84b72 100644 --- a/sources/engine/Xenko.Shaders/Compiler/EffectCompilerBase.cs +++ b/sources/engine/Xenko.Shaders/Compiler/EffectCompilerBase.cs @@ -47,7 +47,7 @@ public CompilerResults Compile(ShaderSource shaderSource, CompilerParameters com else { mixinToCompile = shaderSource as ShaderMixinSource; - var shaderClassSource = shaderSource as ShaderClassSource; + var shaderClassSource = shaderSource as ShaderClassCode; if (shaderClassSource != null) { diff --git a/sources/engine/Xenko.Shaders/ShaderClassCode.cs b/sources/engine/Xenko.Shaders/ShaderClassCode.cs new file mode 100644 index 0000000000..02c99528b4 --- /dev/null +++ b/sources/engine/Xenko.Shaders/ShaderClassCode.cs @@ -0,0 +1,66 @@ +// Copyright (c) Xenko contributors (https://xenko.com) and Silicon Studio Corp. (https://www.siliconstudio.co.jp) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using System.Linq; +using System.Text; + +using Xenko.Core; +using Xenko.Core.Serialization; + +namespace Xenko.Shaders +{ + /// + /// A common base class for shader classes with source code. + /// + [DataContract("ShaderClassCode")] + public abstract class ShaderClassCode : ShaderSource + { + /// + /// Gets the name of the class. + /// + /// The name of the class. + [DataMember(10)] + public string ClassName { get; set; } + + /// + /// Gets the generic parameters. + /// + /// The generic parameters. + [DefaultValue(null), DataStyle(DataStyle.Compact)] + [DataMember(20)] + public string[] GenericArguments { get; set; } + + [DefaultValue(null)] + [DataMember(30)] + public Dictionary GenericParametersArguments { get; set; } + + /// + /// Returns a class name as a that represents this instance. + /// + /// A class name as a that represents this instance. + public string ToClassName() + { + if (GenericArguments == null) + return ClassName; + + var result = new StringBuilder(); + result.Append(ClassName); + if (GenericArguments != null && GenericArguments.Length > 0) + { + result.Append('<'); + result.Append(string.Join(",", GenericArguments)); + result.Append('>'); + } + + return result.ToString(); + } + + public override string ToString() + { + return ToClassName(); + } + } +} diff --git a/sources/engine/Xenko.Shaders/ShaderClassSource.cs b/sources/engine/Xenko.Shaders/ShaderClassSource.cs index 2a514b6861..a8ce1f5182 100644 --- a/sources/engine/Xenko.Shaders/ShaderClassSource.cs +++ b/sources/engine/Xenko.Shaders/ShaderClassSource.cs @@ -13,29 +13,11 @@ namespace Xenko.Shaders { /// - /// A shader class used for mixin. + /// A shader class based on .xksl file, used for mixin. /// [DataContract("ShaderClassSource")] - public sealed class ShaderClassSource : ShaderSource, IEquatable + public sealed class ShaderClassSource : ShaderClassCode, IEquatable { - /// - /// Gets the name of the class. - /// - /// The name of the class. - [DataMember(10)] - public string ClassName { get; set; } - - /// - /// Gets the generic parameters. - /// - /// The generic parameters. - [DefaultValue(null), DataStyle(DataStyle.Compact)] - [DataMember(20)] - public string[] GenericArguments { get; set; } - - [DefaultValue(null)] - [DataMember(30)] - public Dictionary GenericParametersArguments { get; set; } /// /// Initializes a new instance of the class. @@ -86,27 +68,6 @@ public ShaderClassSource(string className, params object[] genericArguments) } } - /// - /// Returns a class name as a that represents this instance. - /// - /// A class name as a that represents this instance. - public string ToClassName() - { - if (GenericArguments == null) - return ClassName; - - var result = new StringBuilder(); - result.Append(ClassName); - if (GenericArguments != null && GenericArguments.Length > 0) - { - result.Append('<'); - result.Append(string.Join(",", GenericArguments)); - result.Append('>'); - } - - return result.ToString(); - } - public bool Equals(ShaderClassSource shaderClassSource) { if (ReferenceEquals(null, shaderClassSource)) return false; diff --git a/sources/engine/Xenko.Shaders/ShaderClassString.cs b/sources/engine/Xenko.Shaders/ShaderClassString.cs new file mode 100644 index 0000000000..68c52dc341 --- /dev/null +++ b/sources/engine/Xenko.Shaders/ShaderClassString.cs @@ -0,0 +1,119 @@ +// Copyright (c) Xenko contributors (https://xenko.com) and Silicon Studio Corp. (https://www.siliconstudio.co.jp) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using System.Linq; +using System.Text; + +using Xenko.Core; +using Xenko.Core.Serialization; + +namespace Xenko.Shaders +{ + /// + /// A shader class based on source code string, used for mixin. + /// + [DataContract("ShaderClassString")] + public sealed class ShaderClassString : ShaderClassCode, IEquatable + { + /// + /// Gets the source code of this shader class as string, XKSL syntax. + /// + /// The source code of the shader class. + public string ShaderSourceCode { get; set; } + + /// + /// Initializes a new instance of the class. + /// + public ShaderClassString() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// Name of the class. + public ShaderClassString(string className, string shaderSourceCode) + : this(className, shaderSourceCode, null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// Name of the class. + /// The generic parameters. + public ShaderClassString(string className, string shaderSourceCode, params string[] genericArguments) + { + ClassName = className; + ShaderSourceCode = shaderSourceCode; + GenericArguments = genericArguments; + } + + /// + /// Initializes a new instance of the class. + /// + /// Name of the class. + /// The generic parameters. + public ShaderClassString(string className, string shaderSourceCode, params object[] genericArguments) + { + ClassName = className; + ShaderSourceCode = shaderSourceCode; + + if (genericArguments != null) + { + GenericArguments = new string[genericArguments.Length]; + for (int i = 0; i < genericArguments.Length; ++i) + { + var genArg = genericArguments[i]; + if (genArg is bool boolArg) + GenericArguments[i] = boolArg ? "true" : "false"; + else + GenericArguments[i] = genArg == null ? "null" : Convert.ToString(genArg, CultureInfo.InvariantCulture); + } + } + } + + public bool Equals(ShaderClassString shaderClassString) + { + if (ReferenceEquals(null, shaderClassString)) return false; + if (ReferenceEquals(this, shaderClassString)) return true; + return string.Equals(ClassName, shaderClassString.ClassName) && Utilities.Compare(GenericArguments, shaderClassString.GenericArguments); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != GetType()) return false; + return Equals((ShaderClassString)obj); + } + + public override int GetHashCode() + { + unchecked + { + int hashCode = ClassName?.GetHashCode() ?? 0; + if (GenericArguments != null) + { + foreach (var current in GenericArguments) + hashCode = (hashCode * 397) ^ (current?.GetHashCode() ?? 0); + } + + return hashCode; + } + } + + public override object Clone() + { + return new ShaderClassString(ClassName, ShaderSourceCode, GenericArguments = GenericArguments != null ? GenericArguments.ToArray() : null); + } + + public override string ToString() + { + return ToClassName(); + } + } +} diff --git a/sources/engine/Xenko.Shaders/ShaderMixinContext.cs b/sources/engine/Xenko.Shaders/ShaderMixinContext.cs index ab2ac8956a..5417e0d4e0 100644 --- a/sources/engine/Xenko.Shaders/ShaderMixinContext.cs +++ b/sources/engine/Xenko.Shaders/ShaderMixinContext.cs @@ -288,18 +288,17 @@ public void Mixin(ShaderMixinSource mixinTree, ShaderSource shaderSource) return; } - var shaderMixinSource = shaderSource as ShaderMixinSource; - if (shaderMixinSource != null) + if (shaderSource is ShaderMixinSource shaderMixinSource) { mixinTree.CloneFrom(shaderMixinSource); } - else if (shaderSource is ShaderClassSource) + else if (shaderSource is ShaderClassCode shaderClassCode) { - mixinTree.Mixins.Add((ShaderClassSource)shaderSource); + mixinTree.Mixins.Add(shaderClassCode); } - else if (shaderSource is ShaderMixinGeneratorSource) + else if (shaderSource is ShaderMixinGeneratorSource mixinGeneratorSource) { - Mixin(mixinTree, ((ShaderMixinGeneratorSource)shaderSource).Name); + Mixin(mixinTree, mixinGeneratorSource.Name); } else { diff --git a/sources/engine/Xenko.Shaders/ShaderMixinSource.cs b/sources/engine/Xenko.Shaders/ShaderMixinSource.cs index caa6da3470..312ac062ea 100644 --- a/sources/engine/Xenko.Shaders/ShaderMixinSource.cs +++ b/sources/engine/Xenko.Shaders/ShaderMixinSource.cs @@ -12,7 +12,7 @@ namespace Xenko.Shaders { /// - /// A mixin performing a combination of and other mixins. + /// A mixin performing a combination of and other mixins. /// [DataContract("ShaderMixinSource")] [NonIdentifiableCollectionItems] @@ -23,7 +23,7 @@ public sealed class ShaderMixinSource : ShaderSource, IEquatable public ShaderMixinSource() { - Mixins = new List(); + Mixins = new List(); Compositions = new Core.Collections.SortedList(); Macros = new List(); } @@ -51,7 +51,7 @@ public ShaderMixinSource() /// /// The mixins. [DataMember(10)] - public List Mixins { get; set; } + public List Mixins { get; set; } /// /// Gets or sets the compositions. @@ -133,7 +133,7 @@ public void DeepCloneFrom(ShaderMixinSource parent) throw new ArgumentNullException("parent", $"Cannot deep clone mixin [{Name}] from a null parent"); foreach (var mixin in parent.Mixins) - Mixins.Add((ShaderClassSource)mixin.Clone()); + Mixins.Add((ShaderClassCode)mixin.Clone()); Macros.AddRange(parent.Macros); foreach (var shaderBasic in parent.Compositions) { @@ -176,7 +176,7 @@ public override object Clone() { var newMixin = (ShaderMixinSource)MemberwiseClone(); newMixin.Compositions = Compositions == null ? null : ToSortedList(Compositions.Select(x => new KeyValuePair(x.Key, (ShaderSource)x.Value.Clone()))); - newMixin.Mixins = Mixins == null ? null : Mixins.Select(x => (ShaderClassSource)x.Clone()).ToList(); + newMixin.Mixins = Mixins == null ? null : Mixins.Select(x => (ShaderClassCode)x.Clone()).ToList(); newMixin.Macros = Macros == null ? null : new List(Macros.ToArray()); return newMixin; } From 1a3f467c7140489c2265ce64e70965a3176cf5f9 Mon Sep 17 00:00:00 2001 From: Virgile Bello Date: Mon, 11 Nov 2019 13:23:07 +0100 Subject: [PATCH 05/12] [Build] Bump version to 3.1.0.2 --- build/Xenko.build | 4 ++-- deps/Xenko.GitVersioning/GenerateVersionFile.cs | 7 ++++++- sources/shared/SharedAssemblyInfo.cs | 4 ++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/build/Xenko.build b/build/Xenko.build index 3264f16f52..cc1df6e235 100644 --- a/build/Xenko.build +++ b/build/Xenko.build @@ -110,10 +110,10 @@ Example of use: - + - + diff --git a/deps/Xenko.GitVersioning/GenerateVersionFile.cs b/deps/Xenko.GitVersioning/GenerateVersionFile.cs index 8f1791a5fc..cd7b9e19f7 100644 --- a/deps/Xenko.GitVersioning/GenerateVersionFile.cs +++ b/deps/Xenko.GitVersioning/GenerateVersionFile.cs @@ -34,6 +34,8 @@ public class GenerateVersionFile : Task [Output] public string NuGetVersion { get; set; } + public string NuGetVersionSuffixOverride { get; set; } + public string SpecialVersion { get; set; } public bool SpecialVersionGitHeight { get; set; } @@ -71,6 +73,9 @@ public override bool Execute() var publicVersion = publicVersionMatch.Success ? publicVersionMatch.Groups[1].Value : "0.0.0.0"; var versionSuffix = versionSuffixMatch.Success ? versionSuffixMatch.Groups[1].Value : string.Empty; + if (NuGetVersionSuffixOverride != null) + versionSuffix = NuGetVersionSuffixOverride; + // Patch NuGetVersion if (SpecialVersion != null) versionSuffix += SpecialVersion; @@ -97,7 +102,7 @@ public override bool Execute() { // Compute version based on Git info var height = Nerdbank.GitVersioning.GitExtensions.GetVersionHeight(repo, VersionFile.ItemSpec); - versionSuffix += height.ToString("D4"); + versionSuffix += $"-{height.ToString("D4")}"; } // Replace NuGetVersionSuffix diff --git a/sources/shared/SharedAssemblyInfo.cs b/sources/shared/SharedAssemblyInfo.cs index d7383dd372..43dc507e87 100644 --- a/sources/shared/SharedAssemblyInfo.cs +++ b/sources/shared/SharedAssemblyInfo.cs @@ -25,7 +25,7 @@ internal class XenkoVersion /// /// The version used by editor for display purpose. 4th digit needs to be at least 1 if used (due to NuGet special cases). /// - public const string PublicVersion = "3.1.0.1"; + public const string PublicVersion = "3.1.0.2"; /// /// The current assembly version as text, currently same as . @@ -49,7 +49,7 @@ internal class XenkoVersion /// - -betaXX: development version (XX should corespond to development asset versioning) /// - -betaXX-YYYY: beta release (YYYY is the git height since current version has been bumped) /// - public const string NuGetVersionSuffix = ""; + public const string NuGetVersionSuffix = "-beta01"; /// /// The build metadata, usually +g[git_hash] during package. Automatically set by Xenko.GitVersioning.GenerateVersionFile. From 06de3ea9c37b51afc9738598b7b1801a67e9e625 Mon Sep 17 00:00:00 2001 From: tebjan Date: Wed, 13 Nov 2019 00:50:13 +0100 Subject: [PATCH 06/12] incremented version of MaterialAssetCompiler to 5 --- sources/engine/Xenko.Assets/Materials/MaterialAssetCompiler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/engine/Xenko.Assets/Materials/MaterialAssetCompiler.cs b/sources/engine/Xenko.Assets/Materials/MaterialAssetCompiler.cs index dfa365a9ee..fd7306ed91 100644 --- a/sources/engine/Xenko.Assets/Materials/MaterialAssetCompiler.cs +++ b/sources/engine/Xenko.Assets/Materials/MaterialAssetCompiler.cs @@ -53,7 +53,7 @@ private class MaterialCompileCommand : AssetCommand public MaterialCompileCommand(string url, AssetItem assetItem, MaterialAsset value, AssetCompilerContext context) : base(url, value, assetItem.Package) { - Version = 4; + Version = 5; this.assetItem = assetItem; colorSpace = context.GetColorSpace(); assetUrl = new UFile(url); From 4f4650d79fe3e6963ee1d02c9ab83c96b1490fa7 Mon Sep 17 00:00:00 2001 From: tebjan Date: Fri, 15 Nov 2019 19:01:10 +0100 Subject: [PATCH 07/12] added asset upgrader for .xkeffectlog files --- .../Xenko.Assets/XenkoPackageUpgrader.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/sources/engine/Xenko.Assets/XenkoPackageUpgrader.cs b/sources/engine/Xenko.Assets/XenkoPackageUpgrader.cs index 08c9778097..59ea1f09d4 100644 --- a/sources/engine/Xenko.Assets/XenkoPackageUpgrader.cs +++ b/sources/engine/Xenko.Assets/XenkoPackageUpgrader.cs @@ -40,6 +40,24 @@ public partial class XenkoPackageUpgrader : PackageUpgrader public override bool Upgrade(PackageLoadParameters loadParameters, PackageSession session, ILogger log, Package dependentPackage, PackageDependency dependency, Package dependencyPackage, IList assetFiles) { + if (dependency.Version.MinVersion < new PackageVersion("3.1.0.2-beta01")) + { + foreach (var assetFile in assetFiles) + { + // Add new generic parameter to ShadowMapReceiverDirectional in effect log + if (assetFile.FilePath.GetFileExtension() == ".xkeffectlog") + { + var assetContent = assetFile.AssetContent ?? File.ReadAllBytes(assetFile.FilePath.FullPath); + var assetContentString = System.Text.Encoding.UTF8.GetString(assetContent); + var newAssetContentString = System.Text.RegularExpressions.Regex.Replace(assetContentString, @"([ ]*)- ClassName:", "$1- !ShaderClassSource\r\n$1 ClassName:"); + if (assetContentString != newAssetContentString) + { + // Need replacement, update with replaced text + assetFile.AssetContent = System.Text.Encoding.UTF8.GetBytes(newAssetContentString); + } + } + } + } return true; } From df4eff0666671787879433ecb39ed2a5d33fb458 Mon Sep 17 00:00:00 2001 From: tebjan Date: Thu, 5 Dec 2019 17:34:53 +0100 Subject: [PATCH 08/12] set version to 3.2.0.1-beta02 so it's the same as main branch --- sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs | 2 +- sources/shared/SharedAssemblyInfo.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs b/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs index 2e3149f5d9..1a2f7aa895 100644 --- a/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs +++ b/sources/editor/Xenko.Samples.Templates/ThisPackageVersion.cs @@ -3,6 +3,6 @@ namespace Xenko.Samples.Templates static class ThisPackageVersion { // we version this package manually because most of the time the samples are big and don't need to be updated - public static string Current = "3.1.0.2-beta01"; + public static string Current = "3.2.0.1-beta02"; } } diff --git a/sources/shared/SharedAssemblyInfo.cs b/sources/shared/SharedAssemblyInfo.cs index 43dc507e87..b2a7851c8e 100644 --- a/sources/shared/SharedAssemblyInfo.cs +++ b/sources/shared/SharedAssemblyInfo.cs @@ -25,7 +25,7 @@ internal class XenkoVersion /// /// The version used by editor for display purpose. 4th digit needs to be at least 1 if used (due to NuGet special cases). /// - public const string PublicVersion = "3.1.0.2"; + public const string PublicVersion = "3.2.0.1"; /// /// The current assembly version as text, currently same as . @@ -49,7 +49,7 @@ internal class XenkoVersion /// - -betaXX: development version (XX should corespond to development asset versioning) /// - -betaXX-YYYY: beta release (YYYY is the git height since current version has been bumped) /// - public const string NuGetVersionSuffix = "-beta01"; + public const string NuGetVersionSuffix = "-beta02"; /// /// The build metadata, usually +g[git_hash] during package. Automatically set by Xenko.GitVersioning.GenerateVersionFile. From 653999e378ac13f58209604994227127dfc5ce78 Mon Sep 17 00:00:00 2001 From: tebjan Date: Thu, 5 Dec 2019 17:35:52 +0100 Subject: [PATCH 09/12] fixed Materials.cd and some ghost change from git --- .../Rendering/Materials/Materials.cd | 147 ++++-------------- .../Xenko.VirtualReality/DeviceClass.cs | 40 ++--- 2 files changed, 50 insertions(+), 137 deletions(-) diff --git a/sources/engine/Xenko.Rendering/Rendering/Materials/Materials.cd b/sources/engine/Xenko.Rendering/Rendering/Materials/Materials.cd index b609febb56..981c2f4410 100644 --- a/sources/engine/Xenko.Rendering/Rendering/Materials/Materials.cd +++ b/sources/engine/Xenko.Rendering/Rendering/Materials/Materials.cd @@ -6,92 +6,15 @@