mirror of
https://github.com/RPCSX/rpcsx.git
synced 2026-04-05 06:26:49 +00:00
rsx: Recover from invalid writes to CELL_GCM_NV4097_SET_INDEX_ARRAY_DMA
Also: Trigger a FIFO recovery when encountering an invalid method.
This commit is contained in:
parent
2eaf5df60b
commit
06017cb14e
7 changed files with 47 additions and 6 deletions
|
|
@ -713,6 +713,19 @@ namespace rsx
|
|||
}
|
||||
}
|
||||
|
||||
void check_index_array_dma(thread* rsx, u32 reg, u32 arg)
|
||||
{
|
||||
// Check if either location or index type are invalid
|
||||
if (arg & ~(CELL_GCM_LOCATION_MAIN | (CELL_GCM_DRAW_INDEX_ARRAY_TYPE_16 << 4)))
|
||||
{
|
||||
// Ignore invalid value, recover
|
||||
method_registers.registers[reg] = method_registers.register_previous_value;
|
||||
rsx->invalid_command_interrupt_raised = true;
|
||||
|
||||
LOG_ERROR(RSX, "Invalid NV4097_SET_INDEX_ARRAY_DMA value: 0x%x", arg);
|
||||
}
|
||||
}
|
||||
|
||||
template<u32 index>
|
||||
struct set_texture_dirty_bit
|
||||
{
|
||||
|
|
@ -2911,6 +2924,7 @@ namespace rsx
|
|||
bind_array<NV4097_SET_FOG_PARAMS, 1, 2, nv4097::set_ROP_state_dirty_bit>();
|
||||
bind_range<NV4097_SET_VIEWPORT_SCALE, 1, 3, nv4097::set_viewport_dirty_bit>();
|
||||
bind_range<NV4097_SET_VIEWPORT_OFFSET, 1, 3, nv4097::set_viewport_dirty_bit>();
|
||||
bind<NV4097_SET_INDEX_ARRAY_DMA, nv4097::check_index_array_dma>();
|
||||
|
||||
//NV308A
|
||||
bind_range<NV308A_COLOR, 1, 256, nv308a::color>();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue