- [Core] Added hashes to Shader output.

This commit is contained in:
Razmoth
2024-02-06 22:01:51 +04:00
parent 6b31f6367a
commit 3d5a1bcdf2

View File

@@ -1035,6 +1035,7 @@ namespace AssetStudio
case ShaderGpuProgramType.GLCore32: case ShaderGpuProgramType.GLCore32:
case ShaderGpuProgramType.GLCore41: case ShaderGpuProgramType.GLCore41:
case ShaderGpuProgramType.GLCore43: case ShaderGpuProgramType.GLCore43:
sb.Append($"// hash: {ComputeHash64(m_ProgramCode):x8}\n");
sb.Append(Encoding.UTF8.GetString(m_ProgramCode)); sb.Append(Encoding.UTF8.GetString(m_ProgramCode));
break; break;
case ShaderGpuProgramType.DX9VertexSM20: case ShaderGpuProgramType.DX9VertexSM20:
@@ -1046,6 +1047,8 @@ namespace AssetStudio
{ {
var programCodeSpan = m_ProgramCode.AsSpan(); var programCodeSpan = m_ProgramCode.AsSpan();
var g = Compiler.Disassemble(programCodeSpan.GetPinnableReference(), programCodeSpan.Length, DisasmFlags.None, ""); var g = Compiler.Disassemble(programCodeSpan.GetPinnableReference(), programCodeSpan.Length, DisasmFlags.None, "");
sb.Append($"// hash: {ComputeHash64(programCodeSpan):x8}\n");
sb.Append(g.AsString()); sb.Append(g.AsString());
} }
catch (Exception e) catch (Exception e)
@@ -1082,6 +1085,7 @@ namespace AssetStudio
var buffSpan = m_ProgramCode.AsSpan(start); var buffSpan = m_ProgramCode.AsSpan(start);
sb.Append($"// hash: {ComputeHash64(buffSpan):x8}\n");
try try
{ {
HLSLDecompiler.DecompileShader(buffSpan.ToArray(), buffSpan.Length, out var hlslText); HLSLDecompiler.DecompileShader(buffSpan.ToArray(), buffSpan.Length, out var hlslText);
@@ -1106,6 +1110,7 @@ namespace AssetStudio
} }
case ShaderGpuProgramType.MetalVS: case ShaderGpuProgramType.MetalVS:
case ShaderGpuProgramType.MetalFS: case ShaderGpuProgramType.MetalFS:
sb.Append($"// hash: {ComputeHash64(m_ProgramCode):x8}\n");
using (var reader = new EndianBinaryReader(new MemoryStream(m_ProgramCode), EndianType.LittleEndian)) using (var reader = new EndianBinaryReader(new MemoryStream(m_ProgramCode), EndianType.LittleEndian))
{ {
var fourCC = reader.ReadUInt32(); var fourCC = reader.ReadUInt32();
@@ -1122,6 +1127,7 @@ namespace AssetStudio
case ShaderGpuProgramType.SPIRV: case ShaderGpuProgramType.SPIRV:
try try
{ {
sb.Append($"// hash: {ComputeHash64(m_ProgramCode):x8}\n");
sb.Append(SpirVShaderConverter.Convert(m_ProgramCode)); sb.Append(SpirVShaderConverter.Convert(m_ProgramCode));
} }
catch (Exception e) catch (Exception e)
@@ -1134,9 +1140,11 @@ namespace AssetStudio
case ShaderGpuProgramType.ConsoleHS: case ShaderGpuProgramType.ConsoleHS:
case ShaderGpuProgramType.ConsoleDS: case ShaderGpuProgramType.ConsoleDS:
case ShaderGpuProgramType.ConsoleGS: case ShaderGpuProgramType.ConsoleGS:
sb.Append($"//hash: {ComputeHash64(m_ProgramCode):x8}\n");
sb.Append(Encoding.UTF8.GetString(m_ProgramCode)); sb.Append(Encoding.UTF8.GetString(m_ProgramCode));
break; break;
default: default:
sb.Append($"//hash: {ComputeHash64(m_ProgramCode):x8}\n");
sb.Append($"//shader disassembly not supported on {m_ProgramType}"); sb.Append($"//shader disassembly not supported on {m_ProgramType}");
break; break;
} }
@@ -1144,6 +1152,16 @@ namespace AssetStudio
sb.Append('"'); sb.Append('"');
return sb.ToString(); 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 public static class HLSLDecompiler