mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-07 23:41:26 +12:00
rsx-debugger: Extra safety checks for FP decompiler
This commit is contained in:
parent
bea0ffb57e
commit
b88af24d7c
1 changed files with 10 additions and 2 deletions
|
@ -1274,7 +1274,15 @@ void rsx_debugger::GetFragmentProgram() const
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto [program_offset, program_location] = rsx::method_registers.shader_program_address();
|
const auto [program_offset, program_location] = rsx::method_registers.shader_program_address();
|
||||||
auto data_ptr = vm::base(rsx::get_address(program_offset, program_location));
|
const auto address = rsx::get_address(program_offset, program_location, 4);
|
||||||
|
if (!address)
|
||||||
|
{
|
||||||
|
m_fragment_disasm->clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: Reading through super ptr while crash-safe means we're probably reading incorrect bytes, but should be fine in 99% of cases
|
||||||
|
auto data_ptr = vm::get_super_ptr(address);
|
||||||
const auto fp_metadata = program_hash_util::fragment_program_utils::analyse_fragment_program(data_ptr);
|
const auto fp_metadata = program_hash_util::fragment_program_utils::analyse_fragment_program(data_ptr);
|
||||||
|
|
||||||
const bool output_h0 = rsx::method_registers.shader_control() & CELL_GCM_SHADER_CONTROL_32_BITS_EXPORTS ? false : true;
|
const bool output_h0 = rsx::method_registers.shader_control() & CELL_GCM_SHADER_CONTROL_32_BITS_EXPORTS ? false : true;
|
||||||
|
@ -1314,4 +1322,4 @@ void rsx_debugger::GetFragmentProgram() const
|
||||||
|
|
||||||
m_fragment_disasm->clear();
|
m_fragment_disasm->clear();
|
||||||
m_fragment_disasm->setText(QString::fromStdString(fp_disasm.GetArbShader()));
|
m_fragment_disasm->setText(QString::fromStdString(fp_disasm.GetArbShader()));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue