Skip to content

Commit 1483bc6

Browse files
committed
Consider remaining 3d cmds after reading 0
1 parent 11e4190 commit 1483bc6

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/core/graphics/gpu_3d/registers_3d.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -437,19 +437,21 @@ impl Emu {
437437
let mut params: [u32; 32] = unsafe { MaybeUninit::uninit().assume_init() };
438438

439439
'outer: while !regs_3d.cmd_fifo.is_empty() {
440-
let value = *regs_3d.cmd_fifo.front();
440+
let mut value = *regs_3d.cmd_fifo.front();
441441
regs_3d.cmd_fifo.pop_front();
442442

443-
for i in 0..4 {
444-
let cmd = ((value as usize) >> (i << 3)) & 0x7F;
443+
while value != 0 {
444+
let cmd = (value & 0x7F) as usize;
445+
let current_value = value;
446+
value >>= 8;
445447
if unlikely(cmd == 0) {
446-
break;
448+
continue;
447449
}
448450
let param_count = FifoParam::from(unsafe { *FIFO_PARAM_COUNTS.get_unchecked(cmd) });
449451
let count = u8::from(param_count.param_count()) as usize;
450452

451453
if unlikely(count > regs_3d.cmd_fifo.len()) {
452-
regs_3d.cmd_fifo.push_front(value >> (i << 3));
454+
regs_3d.cmd_fifo.push_front(current_value);
453455
break 'outer;
454456
}
455457

@@ -468,9 +470,8 @@ impl Emu {
468470

469471
executed_cycles += 4;
470472
if executed_cycles >= cycle_diff || cmd == 0x50 {
471-
let remaining_cmds = value.unbounded_shr((i + 1) << 3);
472-
if remaining_cmds != 0 {
473-
regs_3d.cmd_fifo.push_front(remaining_cmds);
473+
if value != 0 {
474+
regs_3d.cmd_fifo.push_front(value);
474475
}
475476
break 'outer;
476477
}

0 commit comments

Comments
 (0)