Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use short for parameter count in effect binary #5995

Merged
merged 5 commits into from Mar 27, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -2,17 +2,18 @@
// This file is subject to the terms and conditions defined in
// file 'LICENSE.txt', which is part of this source code package.

using System;
using System.IO;
using Microsoft.Xna.Framework.Graphics;
using System;
using MonoGame.Framework.Content.Pipeline.Utilities;

namespace MonoGame.Effect
{
internal partial class EffectObject
{

private const string Header = "MGFX";
private const int Version = 8;
private const int Version = 9;

/// <summary>
/// Writes the effect for loading later.
Expand All @@ -30,7 +31,7 @@ public void Write(BinaryWriter writer, Options options)

// Write the rest to a memory stream.
using(MemoryStream memStream = new MemoryStream())
using(BinaryWriter memWriter = new BinaryWriter(memStream))
using(BinaryWriterEx memWriter = new BinaryWriterEx(memStream))
{
// Write all the constant buffers.
memWriter.Write((byte)ConstantBuffers.Count);
Expand Down Expand Up @@ -138,14 +139,14 @@ public void Write(BinaryWriter writer, Options options)
}
}

private static void WriteParameters(BinaryWriter writer, d3dx_parameter[] parameters, int count)
private static void WriteParameters(BinaryWriterEx writer, d3dx_parameter[] parameters, int count)
{
writer.Write((byte)count);
writer.Write7BitEncodedInt(count);
for (var i = 0; i < count; i++)
WriteParameter(writer, parameters[i]);
}

private static void WriteParameter(BinaryWriter writer, d3dx_parameter param)
private static void WriteParameter(BinaryWriterEx writer, d3dx_parameter param)
{
var class_ = ToXNAParameterClass(param.class_);
var type = ToXNAParameterType(param.type);
Expand Down Expand Up @@ -176,7 +177,7 @@ private static void WriteParameter(BinaryWriter writer, d3dx_parameter param)
}
}

private static void WriteAnnotations(BinaryWriter writer, d3dx_parameter[] annotations)
private static void WriteAnnotations(BinaryWriterEx writer, d3dx_parameter[] annotations)
{
var count = annotations == null ? 0 : annotations.Length;
writer.Write((byte)count);
Expand Down
33 changes: 33 additions & 0 deletions MonoGame.Framework.Content.Pipeline/Utilities/BinaryWriterEx.cs
@@ -0,0 +1,33 @@
// MonoGame - Copyright (C) The MonoGame Team
// This file is subject to the terms and conditions defined in
// file 'LICENSE.txt', which is part of this source code package.

using System.IO;
using System.Text;

namespace MonoGame.Framework.Content.Pipeline.Utilities
{
public class BinaryWriterEx : BinaryWriter
{
protected BinaryWriterEx()
{
}

public BinaryWriterEx(Stream output) : base(output)
{
}

public BinaryWriterEx(Stream output, Encoding encoding) : base(output, encoding)
{
}

public BinaryWriterEx(Stream output, Encoding encoding, bool leaveOpen) : base(output, encoding, leaveOpen)
{
}

public new void Write7BitEncodedInt(int value)
{
base.Write7BitEncodedInt(value);
}
}
}
11 changes: 6 additions & 5 deletions MonoGame.Framework/Graphics/Effect/Effect.cs
Expand Up @@ -5,6 +5,7 @@
using System;
using System.Diagnostics;
using System.IO;
using Microsoft.Xna.Framework.Utilities;

namespace Microsoft.Xna.Framework.Graphics
{
Expand All @@ -25,7 +26,7 @@ struct MGFXHeader
/// We should avoid supporting old versions for very long if at all
/// as users should be rebuilding content when packaging their game.
/// </remarks>
public const int MGFXVersion = 8;
public const int MGFXVersion = 9;

public int Signature;
public int Version;
Expand Down Expand Up @@ -100,7 +101,7 @@ public Effect (GraphicsDevice graphicsDevice, byte[] effectCode, int index, int
if (!graphicsDevice.EffectCache.TryGetValue(effectKey, out cloneSource))
{
using (var stream = new MemoryStream(effectCode, index + headerSize, count - headerSize, false))
using (var reader = new BinaryReader(stream))
using (var reader = new BinaryReaderEx(stream))
{
// Create one.
cloneSource = new Effect(graphicsDevice);
Expand Down Expand Up @@ -227,7 +228,7 @@ internal protected override void GraphicsDeviceResetting()

#region Effect File Reader

private void ReadEffect (BinaryReader reader)
private void ReadEffect (BinaryReaderEx reader)
{
// TODO: Maybe we should be reading in a string
// table here to save some bytes in the file.
Expand Down Expand Up @@ -383,9 +384,9 @@ private static EffectPassCollection ReadPasses(BinaryReader reader, Effect effec
return new EffectPassCollection(passes);
}

private static EffectParameterCollection ReadParameters(BinaryReader reader)
private static EffectParameterCollection ReadParameters(BinaryReaderEx reader)
{
var count = (int)reader.ReadByte();
var count = reader.Read7BitEncodedInt();
if (count == 0)
return EffectParameterCollection.Empty;

Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
29 changes: 29 additions & 0 deletions MonoGame.Framework/Utilities/BinaryReaderEx.cs
@@ -0,0 +1,29 @@
// MonoGame - Copyright (C) The MonoGame Team
// This file is subject to the terms and conditions defined in
// file 'LICENSE.txt', which is part of this source code package.

using System.IO;
using System.Text;

namespace Microsoft.Xna.Framework.Utilities
{
public class BinaryReaderEx : BinaryReader
{
public BinaryReaderEx(Stream input) : base(input)
{
}

public BinaryReaderEx(Stream input, Encoding encoding) : base(input, encoding)
{
}

public BinaryReaderEx(Stream input, Encoding encoding, bool leaveOpen) : base(input, encoding, leaveOpen)
{
}

public new int Read7BitEncodedInt()
{
return base.Read7BitEncodedInt();
}
}
}
33 changes: 33 additions & 0 deletions MonoGame.Framework/Utilities/BinaryWriterEx.cs
@@ -0,0 +1,33 @@
// MonoGame - Copyright (C) The MonoGame Team
// This file is subject to the terms and conditions defined in
// file 'LICENSE.txt', which is part of this source code package.

using System.IO;
using System.Text;

namespace Microsoft.Xna.Framework.Utilities
{
public class BinaryWriterEx : BinaryWriter
{
protected BinaryWriterEx()
{
}

public BinaryWriterEx(Stream output) : base(output)
{
}

public BinaryWriterEx(Stream output, Encoding encoding) : base(output, encoding)
{
}

public BinaryWriterEx(Stream output, Encoding encoding, bool leaveOpen) : base(output, encoding, leaveOpen)
{
}

public new void Write7BitEncodedInt(int value)
{
base.Write7BitEncodedInt(value);
}
}
}
Binary file modified Tests/Assets/Effects/DirectX/Bevels.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/BlackOut.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/ColorFlip.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/CustomSpriteBatchEffect.xnb
Binary file not shown.
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/Grayscale.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/HighContrast.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/Instancing.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/Invert.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/NoEffect.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/ParserTest.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/RainbowH.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/TextureArrayEffect.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/DirectX/VertexTextureEffect.xnb
Binary file not shown.
18 changes: 6 additions & 12 deletions Tests/Assets/Effects/OpenGL.mgcb
Expand Up @@ -31,6 +31,12 @@
/processorParam:DebugMode=Auto
/build:ColorFlip.fx

#begin CustomSpriteBatchEffect.fx
/importer:EffectImporter
/processor:EffectProcessor
/processorParam:DebugMode=Auto
/build:CustomSpriteBatchEffect.fx

#begin Grayscale.fx
/importer:EffectImporter
/processor:EffectProcessor
Expand Down Expand Up @@ -61,15 +67,3 @@
/processorParam:DebugMode=Auto
/build:RainbowH.fx

#begin CustomSpriteBatchEffect.fx
/importer:EffectImporter
/processor:EffectProcessor
/processorParam:DebugMode=Auto
/build:CustomSpriteBatchEffect.fx

#begin CustomSpriteBatchEffectComparisonSampler.fx
/importer:EffectImporter
/processor:EffectProcessor
/processorParam:DebugMode=Auto
/build:CustomSpriteBatchEffectComparisonSampler.fx

Binary file modified Tests/Assets/Effects/OpenGL/Bevels.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/OpenGL/BlackOut.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/OpenGL/ColorFlip.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/OpenGL/CustomSpriteBatchEffect.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/OpenGL/Grayscale.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/OpenGL/HighContrast.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/OpenGL/Invert.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/OpenGL/NoEffect.xnb
Binary file not shown.
Binary file modified Tests/Assets/Effects/OpenGL/RainbowH.xnb
Binary file not shown.
Expand Up @@ -62,6 +62,7 @@
<Compile Include="..\..\MonoGame.Framework\Platform\Utilities\CurrentPlatform.cs" />
<Compile Include="..\..\MonoGame.Framework.Content.Pipeline\ExternalTool.cs" />
<Compile Include="..\..\MonoGame.Framework.Content.Pipeline\LoadedTypeCollection.cs" />
<Compile Include="..\..\MonoGame.Framework.Content.Pipeline\Utilities\BinaryWriterEx.cs" />
</ItemGroup>

<ItemGroup>
Expand Down