Program.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using Ryujinx.Graphics.Gal;
  2. using Ryujinx.Graphics.Gal.Shader;
  3. using System;
  4. using System.IO;
  5. namespace Ryushader
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. if (args.Length == 2)
  12. {
  13. GlslDecompiler Decompiler = new GlslDecompiler();
  14. GalShaderType ShaderType = GalShaderType.Vertex;
  15. switch (args[0].ToLower())
  16. {
  17. case "v": ShaderType = GalShaderType.Vertex; break;
  18. case "tc": ShaderType = GalShaderType.TessControl; break;
  19. case "te": ShaderType = GalShaderType.TessEvaluation; break;
  20. case "g": ShaderType = GalShaderType.Geometry; break;
  21. case "f": ShaderType = GalShaderType.Fragment; break;
  22. }
  23. byte[] Data = File.ReadAllBytes(args[1]);
  24. int[] Code = new int[Data.Length / 4];
  25. for (int Offset = 0; Offset + 4 <= Data.Length; Offset += 4)
  26. {
  27. int Value = BitConverter.ToInt32(Data, Offset);
  28. Code[Offset >> 2] = Value;
  29. }
  30. GlslProgram Program = Decompiler.Decompile(Code, ShaderType);
  31. Console.WriteLine(Program.Code);
  32. }
  33. else
  34. {
  35. Console.WriteLine("Usage: Ryushader [v|tc|te|g|f] shader.bin");
  36. }
  37. }
  38. }
  39. }