mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-09 00:11:24 +12:00
rsx: Program cache fixes
- Reorganize storage hash vs ucode hash - Scan for actual fragment program start in case leading NOPed code precedes the actual instructions -- e.g FEAR2 Demo has over 32k of padding before actual program code that messes up hashes
This commit is contained in:
parent
f5145943b2
commit
90c2324e47
5 changed files with 66 additions and 12 deletions
|
@ -1348,8 +1348,11 @@ namespace rsx
|
|||
const u32 program_location = (shader_program & 0x3) - 1;
|
||||
const u32 program_offset = (shader_program & ~0x3);
|
||||
|
||||
result.offset = program_offset;
|
||||
result.addr = vm::base(rsx::get_address(program_offset, program_location));
|
||||
auto program_start = program_hash_util::fragment_program_utils::get_fragment_program_start(result.addr);
|
||||
|
||||
result.addr = ((u8*)result.addr + program_start);
|
||||
result.offset = program_offset + program_start;
|
||||
result.valid = true;
|
||||
result.ctrl = rsx::method_registers.shader_control() & (CELL_GCM_SHADER_CONTROL_32_BITS_EXPORTS | CELL_GCM_SHADER_CONTROL_DEPTH_EXPORT);
|
||||
result.unnormalized_coords = 0;
|
||||
|
@ -1454,8 +1457,11 @@ namespace rsx
|
|||
const u32 program_location = (shader_program & 0x3) - 1;
|
||||
const u32 program_offset = (shader_program & ~0x3);
|
||||
|
||||
result.offset = program_offset;
|
||||
result.addr = vm::base(rsx::get_address(program_offset, program_location));
|
||||
auto program_start = program_hash_util::fragment_program_utils::get_fragment_program_start(result.addr);
|
||||
|
||||
result.addr = ((u8*)result.addr + program_start);
|
||||
result.offset = program_offset + program_start;
|
||||
result.valid = true;
|
||||
result.ctrl = rsx::method_registers.shader_control() & (CELL_GCM_SHADER_CONTROL_32_BITS_EXPORTS | CELL_GCM_SHADER_CONTROL_DEPTH_EXPORT);
|
||||
result.unnormalized_coords = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue