Skip to content
This repository has been archived by the owner on May 11, 2024. It is now read-only.

Commit

Permalink
- [Core] Added hashes to Shader output.
Browse files Browse the repository at this point in the history
  • Loading branch information
Razmoth committed Feb 6, 2024
1 parent 6b31f63 commit 3d5a1bc
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions AssetStudio.Utility/ShaderConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1035,6 +1035,7 @@ public string Export()
case ShaderGpuProgramType.GLCore32:
case ShaderGpuProgramType.GLCore41:
case ShaderGpuProgramType.GLCore43:
sb.Append($"// hash: {ComputeHash64(m_ProgramCode):x8}\n");
sb.Append(Encoding.UTF8.GetString(m_ProgramCode));
break;
case ShaderGpuProgramType.DX9VertexSM20:
Expand All @@ -1046,6 +1047,8 @@ public string Export()
{
var programCodeSpan = m_ProgramCode.AsSpan();
var g = Compiler.Disassemble(programCodeSpan.GetPinnableReference(), programCodeSpan.Length, DisasmFlags.None, "");

sb.Append($"// hash: {ComputeHash64(programCodeSpan):x8}\n");
sb.Append(g.AsString());
}
catch (Exception e)
Expand Down Expand Up @@ -1082,6 +1085,7 @@ public string Export()

var buffSpan = m_ProgramCode.AsSpan(start);

sb.Append($"// hash: {ComputeHash64(buffSpan):x8}\n");
try
{
HLSLDecompiler.DecompileShader(buffSpan.ToArray(), buffSpan.Length, out var hlslText);
Expand All @@ -1106,6 +1110,7 @@ public string Export()
}
case ShaderGpuProgramType.MetalVS:
case ShaderGpuProgramType.MetalFS:
sb.Append($"// hash: {ComputeHash64(m_ProgramCode):x8}\n");
using (var reader = new EndianBinaryReader(new MemoryStream(m_ProgramCode), EndianType.LittleEndian))
{
var fourCC = reader.ReadUInt32();
Expand All @@ -1122,6 +1127,7 @@ public string Export()
case ShaderGpuProgramType.SPIRV:
try
{
sb.Append($"// hash: {ComputeHash64(m_ProgramCode):x8}\n");
sb.Append(SpirVShaderConverter.Convert(m_ProgramCode));
}
catch (Exception e)
Expand All @@ -1134,16 +1140,28 @@ public string Export()
case ShaderGpuProgramType.ConsoleHS:
case ShaderGpuProgramType.ConsoleDS:
case ShaderGpuProgramType.ConsoleGS:
sb.Append($"//hash: {ComputeHash64(m_ProgramCode):x8}\n");
sb.Append(Encoding.UTF8.GetString(m_ProgramCode));
break;
default:
sb.Append($"//hash: {ComputeHash64(m_ProgramCode):x8}\n");
sb.Append($"//shader disassembly not supported on {m_ProgramType}");
break;
}
}
sb.Append('"');
return sb.ToString();
}
public ulong ComputeHash64(Span<byte> data)
{
ulong hval = 0;
foreach (var b in data)
{
hval *= 0x100000001B3;
hval ^= b;
}
return hval;
}
}

public static class HLSLDecompiler
Expand Down

0 comments on commit 3d5a1bc

Please sign in to comment.