- [Core] Added hashes to Shader output.
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user