From 79e007036383b11cd53c2563fbb7f139a02c90ec Mon Sep 17 00:00:00 2001 From: gdkchan Date: Tue, 22 May 2018 22:43:31 -0300 Subject: Improve shader sending method to GAL, use a memory interface instead of reading a fixed array size and sending every time --- Ryushader/Memory.cs | 26 ++++++++++++++++++++++++++ Ryushader/Program.cs | 16 +++++----------- 2 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 Ryushader/Memory.cs (limited to 'Ryushader') diff --git a/Ryushader/Memory.cs b/Ryushader/Memory.cs new file mode 100644 index 00000000..ae336e72 --- /dev/null +++ b/Ryushader/Memory.cs @@ -0,0 +1,26 @@ +using Ryujinx.Graphics.Gal; +using System.IO; + +namespace Ryushader +{ + class Memory : IGalMemory + { + private Stream BaseStream; + + private BinaryReader Reader; + + public Memory(Stream BaseStream) + { + this.BaseStream = BaseStream; + + Reader = new BinaryReader(BaseStream); + } + + public int ReadInt32(long Position) + { + BaseStream.Seek(Position, SeekOrigin.Begin); + + return Reader.ReadInt32(); + } + } +} diff --git a/Ryushader/Program.cs b/Ryushader/Program.cs index 6fec744d..9444be6d 100644 --- a/Ryushader/Program.cs +++ b/Ryushader/Program.cs @@ -24,20 +24,14 @@ namespace Ryushader case "f": ShaderType = GalShaderType.Fragment; break; } - byte[] Data = File.ReadAllBytes(args[1]); - - int[] Code = new int[Data.Length / 4]; - - for (int Offset = 0; Offset + 4 <= Data.Length; Offset += 4) + using (FileStream FS = new FileStream(args[1], FileMode.Open, FileAccess.Read)) { - int Value = BitConverter.ToInt32(Data, Offset); + Memory Mem = new Memory(FS); - Code[Offset >> 2] = Value; - } + GlslProgram Program = Decompiler.Decompile(Mem, 0, ShaderType); - GlslProgram Program = Decompiler.Decompile(Code, ShaderType); - - Console.WriteLine(Program.Code); + Console.WriteLine(Program.Code); + } } else { -- cgit v1.2.3