mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-11-13 17:49:29 +01:00
Merge pull request #9136 from LunaMoo/ProjectionMatrixData
Limit Projection Matrix Data count to <= 16
This commit is contained in:
commit
14d2bf5989
2 files changed
+9
-7
No files matched your search
+5
-4
@@ -1332,7 +1332,7 @@ void GPUCommon::Execute_ProjMtxNum(u32 op, u32 diff) {
|
||||
}
|
||||
|
||||
const int count = i;
|
||||
gstate.projmtxnum = (GE_CMD_PROJMATRIXNUMBER << 24) | ((op + count) & 0xF);
|
||||
gstate.projmtxnum = (GE_CMD_PROJMATRIXNUMBER << 24) | ((op + count) & 0x1F);
|
||||
|
||||
// Skip over the loaded data, it's done now.
|
||||
UpdatePC(currentList->pc, currentList->pc + count * 4);
|
||||
@@ -1341,15 +1341,16 @@ void GPUCommon::Execute_ProjMtxNum(u32 op, u32 diff) {
|
||||
|
||||
void GPUCommon::Execute_ProjMtxData(u32 op, u32 diff) {
|
||||
// Note: it's uncommon to get here now, see above.
|
||||
int num = gstate.projmtxnum & 0xF;
|
||||
int num = gstate.projmtxnum & 0x1F; // NOTE: Changed from 0xF to catch overflows
|
||||
u32 newVal = op << 8;
|
||||
if (newVal != ((const u32 *)gstate.projMatrix)[num]) {
|
||||
if (num < 0x10 && newVal != ((const u32 *)gstate.projMatrix)[num]) {
|
||||
Flush();
|
||||
((u32 *)gstate.projMatrix)[num] = newVal;
|
||||
gstate_c.Dirty(DIRTY_PROJMATRIX);
|
||||
}
|
||||
num++;
|
||||
gstate.projmtxnum = (GE_CMD_PROJMATRIXNUMBER << 24) | (num & 0xF);
|
||||
if (num <= 16)
|
||||
gstate.projmtxnum = (GE_CMD_PROJMATRIXNUMBER << 24) | (num & 0xF);
|
||||
}
|
||||
|
||||
void GPUCommon::Execute_TgenMtxNum(u32 op, u32 diff) {
|
||||
|
||||
@@ -720,14 +720,15 @@ void SoftGPU::ExecuteOp(u32 op, u32 diff) {
|
||||
break;
|
||||
|
||||
case GE_CMD_PROJMATRIXNUMBER:
|
||||
gstate.projmtxnum = data & 0xF;
|
||||
gstate.projmtxnum = data & 0x1F;
|
||||
break;
|
||||
|
||||
case GE_CMD_PROJMATRIXDATA:
|
||||
{
|
||||
int num = gstate.projmtxnum & 0xF;
|
||||
int num = gstate.projmtxnum & 0x1F; // NOTE: Changed from 0xF to catch overflows
|
||||
gstate.projMatrix[num] = getFloat24(data);
|
||||
gstate.projmtxnum = (++num) & 0xF;
|
||||
if (num <= 16)
|
||||
gstate.projmtxnum = (++num) & 0x1F;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
Reference in new issue
Block a user