core:
- fix bug in Geometry Engine when in packed commands latest command is undefined (bug #2973143);
This commit is contained in:
parent
0ca0356432
commit
d6b75e99ac
|
@ -157,13 +157,15 @@ public:
|
||||||
//decode a packed command
|
//decode a packed command
|
||||||
decode:
|
decode:
|
||||||
//printf("[%05d] gxf: decoding %08X\n",currFrameCounter,val);
|
//printf("[%05d] gxf: decoding %08X\n",currFrameCounter,val);
|
||||||
|
if (val == 0) return; // nop
|
||||||
|
|
||||||
const u8 commands[] = { val&0xFF, (val>>8)&0xFF, (val>>16)&0xFF, (val>>24)&0xFF };
|
const u8 commands[] = { val&0xFF, (val>>8)&0xFF, (val>>16)&0xFF, (val>>24)&0xFF };
|
||||||
const u8 commandTypes[] = { gfx3d_commandTypes[commands[0]], gfx3d_commandTypes[commands[1]],gfx3d_commandTypes[commands[2]], gfx3d_commandTypes[commands[3]] };
|
const u8 commandTypes[] = { gfx3d_commandTypes[commands[0]], gfx3d_commandTypes[commands[1]],gfx3d_commandTypes[commands[2]], gfx3d_commandTypes[commands[3]] };
|
||||||
|
|
||||||
for(int i=0;i<4;i++) {
|
for(int i=0;i<4;i++) {
|
||||||
u8 cmd = commands[i];
|
u8 cmd = commands[i];
|
||||||
u8 type = commandTypes[i];
|
u8 type = commandTypes[i];
|
||||||
|
|
||||||
if(type == INVALID_COMMAND) {
|
if(type == INVALID_COMMAND) {
|
||||||
commandsPending[i].command = INVALID_COMMAND;
|
commandsPending[i].command = INVALID_COMMAND;
|
||||||
} else {
|
} else {
|
||||||
|
@ -179,8 +181,12 @@ decode:
|
||||||
//these are valid commands with no parameters. they might need special handling
|
//these are valid commands with no parameters. they might need special handling
|
||||||
//as long as there is a subsequent defined command with parameters, we're safe
|
//as long as there is a subsequent defined command with parameters, we're safe
|
||||||
bool safe = false;
|
bool safe = false;
|
||||||
for(int j=i+1;j<4;j++) {
|
if (i == 3)
|
||||||
if(commandTypes[j] != INVALID_COMMAND) {
|
safe = true;
|
||||||
|
else
|
||||||
|
// start loop from (i+1) always skip last command
|
||||||
|
for(u8 j=i+1;j<4;j++) {
|
||||||
|
if((commandTypes[j] != INVALID_COMMAND)) {
|
||||||
safe = true;
|
safe = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue