mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-23 03:09:10 +02:00
Update some flags in GLES_GPU.
It's useful to know if we need to have a correct PC value or downcount.
This commit is contained in:
1 parent
f99925261d
commit
27550a2336
5 files changed
+30
-23
No files matched your search
+24
-21
@@ -48,6 +48,8 @@ enum {
|
||||
FLAG_EXECUTE = 4, // needs to actually be executed. unused for now.
|
||||
FLAG_EXECUTEONCHANGE = 8, // unused for now. not sure if checking for this will be more expensive than doing it.
|
||||
FLAG_ANY_EXECUTE = 4 | 8,
|
||||
FLAG_READS_PC = 16,
|
||||
FLAG_WRITES_PC = 32,
|
||||
};
|
||||
|
||||
struct CommandTableEntry {
|
||||
@@ -57,9 +59,9 @@ struct CommandTableEntry {
|
||||
|
||||
static const CommandTableEntry commandTable[] = {
|
||||
// Changes that dirty the framebuffer
|
||||
{GE_CMD_FRAMEBUFPTR, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTE},
|
||||
{GE_CMD_FRAMEBUFWIDTH, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTE},
|
||||
{GE_CMD_FRAMEBUFPIXFORMAT, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTE},
|
||||
{GE_CMD_FRAMEBUFPTR, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
{GE_CMD_FRAMEBUFWIDTH, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
{GE_CMD_FRAMEBUFPIXFORMAT, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
{GE_CMD_ZBUFPTR, FLAG_FLUSHBEFOREONCHANGE},
|
||||
{GE_CMD_ZBUFWIDTH, FLAG_FLUSHBEFOREONCHANGE},
|
||||
|
||||
@@ -81,7 +83,7 @@ static const CommandTableEntry commandTable[] = {
|
||||
|
||||
// Changes that dirty the current texture. Really should be possible to avoid executing these if we compile
|
||||
// by adding some more flags.
|
||||
{GE_CMD_TEXSIZE0, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
{GE_CMD_TEXSIZE0, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTE}, // NOTE: only one that uses diff?
|
||||
{GE_CMD_TEXSIZE1, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
{GE_CMD_TEXSIZE2, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
{GE_CMD_TEXSIZE3, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
@@ -106,9 +108,10 @@ static const CommandTableEntry commandTable[] = {
|
||||
{GE_CMD_TEXBUFWIDTH5, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
{GE_CMD_TEXBUFWIDTH6, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
{GE_CMD_TEXBUFWIDTH7, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
{GE_CMD_CLUTADDR, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTE},
|
||||
{GE_CMD_CLUTADDRUPPER, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTE},
|
||||
{GE_CMD_CLUTFORMAT, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTE},
|
||||
// These must flush on change, so that LoadClut doesn't have to always flush.
|
||||
{GE_CMD_CLUTADDR, FLAG_FLUSHBEFOREONCHANGE},
|
||||
{GE_CMD_CLUTADDRUPPER, FLAG_FLUSHBEFOREONCHANGE},
|
||||
{GE_CMD_CLUTFORMAT, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
|
||||
// These affect the fragment shader so need flushing.
|
||||
{GE_CMD_CLEARMODE, FLAG_FLUSHBEFOREONCHANGE},
|
||||
@@ -300,16 +303,16 @@ static const CommandTableEntry commandTable[] = {
|
||||
|
||||
// From Common. No flushing but definitely need execute.
|
||||
{GE_CMD_OFFSETADDR, FLAG_EXECUTE},
|
||||
{GE_CMD_ORIGIN, FLAG_EXECUTE}, // Really?
|
||||
{GE_CMD_ORIGIN, FLAG_EXECUTE | FLAG_READS_PC}, // Really?
|
||||
{GE_CMD_PRIM, FLAG_EXECUTE},
|
||||
{GE_CMD_JUMP, FLAG_EXECUTE},
|
||||
{GE_CMD_CALL, FLAG_EXECUTE},
|
||||
{GE_CMD_RET, FLAG_EXECUTE},
|
||||
{GE_CMD_END, FLAG_EXECUTE}, // Flush?
|
||||
{GE_CMD_JUMP, FLAG_EXECUTE | FLAG_READS_PC | FLAG_WRITES_PC},
|
||||
{GE_CMD_CALL, FLAG_EXECUTE | FLAG_READS_PC | FLAG_WRITES_PC},
|
||||
{GE_CMD_RET, FLAG_EXECUTE | FLAG_READS_PC | FLAG_WRITES_PC},
|
||||
{GE_CMD_END, FLAG_FLUSHBEFORE | FLAG_EXECUTE | FLAG_READS_PC | FLAG_WRITES_PC}, // Flush?
|
||||
{GE_CMD_VADDR, FLAG_EXECUTE},
|
||||
{GE_CMD_IADDR, FLAG_EXECUTE},
|
||||
{GE_CMD_BJUMP, FLAG_EXECUTE}, // EXECUTE
|
||||
{GE_CMD_BOUNDINGBOX, FLAG_EXECUTE}, // + FLUSHBEFORE when we implement
|
||||
{GE_CMD_BJUMP, FLAG_EXECUTE | FLAG_READS_PC | FLAG_WRITES_PC}, // EXECUTE
|
||||
{GE_CMD_BOUNDINGBOX, FLAG_EXECUTE}, // + FLUSHBEFORE when we implement... or not, do we need to?
|
||||
|
||||
// Changing the vertex type requires us to flush.
|
||||
{GE_CMD_VERTEXTYPE, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE},
|
||||
@@ -323,7 +326,7 @@ static const CommandTableEntry commandTable[] = {
|
||||
|
||||
// Changes that trigger data copies. Only flushing on change for LOADCLUT must be a bit of a hack...
|
||||
{GE_CMD_LOADCLUT, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTE},
|
||||
{GE_CMD_TRANSFERSTART, FLAG_FLUSHBEFORE | FLAG_EXECUTE},
|
||||
{GE_CMD_TRANSFERSTART, FLAG_FLUSHBEFORE | FLAG_EXECUTE | FLAG_READS_PC},
|
||||
|
||||
// We don't use the dither table.
|
||||
{GE_CMD_DITH0},
|
||||
@@ -332,15 +335,15 @@ static const CommandTableEntry commandTable[] = {
|
||||
{GE_CMD_DITH3},
|
||||
|
||||
// These handle their own flushing.
|
||||
{GE_CMD_WORLDMATRIXNUMBER, FLAG_EXECUTE},
|
||||
{GE_CMD_WORLDMATRIXNUMBER, FLAG_EXECUTE | FLAG_READS_PC | FLAG_WRITES_PC},
|
||||
{GE_CMD_WORLDMATRIXDATA, FLAG_EXECUTE},
|
||||
{GE_CMD_VIEWMATRIXNUMBER, FLAG_EXECUTE},
|
||||
{GE_CMD_VIEWMATRIXNUMBER, FLAG_EXECUTE | FLAG_READS_PC | FLAG_WRITES_PC},
|
||||
{GE_CMD_VIEWMATRIXDATA, FLAG_EXECUTE},
|
||||
{GE_CMD_PROJMATRIXNUMBER, FLAG_EXECUTE},
|
||||
{GE_CMD_PROJMATRIXNUMBER, FLAG_EXECUTE | FLAG_READS_PC | FLAG_WRITES_PC},
|
||||
{GE_CMD_PROJMATRIXDATA, FLAG_EXECUTE},
|
||||
{GE_CMD_TGENMATRIXNUMBER, FLAG_EXECUTE},
|
||||
{GE_CMD_TGENMATRIXNUMBER, FLAG_EXECUTE | FLAG_READS_PC | FLAG_WRITES_PC},
|
||||
{GE_CMD_TGENMATRIXDATA, FLAG_EXECUTE},
|
||||
{GE_CMD_BONEMATRIXNUMBER, FLAG_EXECUTE},
|
||||
{GE_CMD_BONEMATRIXNUMBER, FLAG_EXECUTE | FLAG_READS_PC | FLAG_WRITES_PC},
|
||||
{GE_CMD_BONEMATRIXDATA, FLAG_EXECUTE},
|
||||
|
||||
// "Missing" commands (gaps in the sequence)
|
||||
@@ -1202,7 +1205,7 @@ void GLES_GPU::ExecuteOpInternal(u32 op, u32 diff) {
|
||||
case GE_CMD_LAC0:case GE_CMD_LAC1:case GE_CMD_LAC2:case GE_CMD_LAC3:
|
||||
case GE_CMD_LDC0:case GE_CMD_LDC1:case GE_CMD_LDC2:case GE_CMD_LDC3:
|
||||
case GE_CMD_LSC0:case GE_CMD_LSC1:case GE_CMD_LSC2:case GE_CMD_LSC3:
|
||||
if (diff) {
|
||||
if (diff) {
|
||||
float r = (float)(data & 0xff) * (1.0f / 255.0f);
|
||||
float g = (float)((data >> 8) & 0xff) * (1.0f / 255.0f);
|
||||
float b = (float)(data >> 16) * (1.0f / 255.0f);
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#include "Core/Config.h"
|
||||
#include "Core/MemMap.h"
|
||||
#include "Core/HDRemaster.h"
|
||||
#include "Core/Reporting.h"
|
||||
#include "GPU/GPUState.h"
|
||||
#include "GPU/ge_constants.h"
|
||||
#include "GPU/Math3D.h"
|
||||
|
||||
|
||||
@@ -26,8 +26,6 @@
|
||||
#endif
|
||||
|
||||
#include "Globals.h"
|
||||
#include "Core/Reporting.h"
|
||||
#include "GPU/GPUState.h"
|
||||
#include "GPU/Common/VertexDecoderCommon.h"
|
||||
|
||||
class VertexDecoder;
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
#include "base/logging.h"
|
||||
#include "Common/CPUDetect.h"
|
||||
#include "Core/Config.h"
|
||||
#include "Core/Reporting.h"
|
||||
#include "GPU/GPUState.h"
|
||||
#include "GPU/GLES/VertexDecoder.h"
|
||||
|
||||
extern void DisassembleArm(const u8 *data, int size);
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
|
||||
#include "Common/CPUDetect.h"
|
||||
#include "Core/Config.h"
|
||||
#include "Core/Reporting.h"
|
||||
#include "GPU/GPUState.h"
|
||||
#include "GPU/GLES/VertexDecoder.h"
|
||||
|
||||
// We start out by converting the active matrices into 4x4 which are easier to multiply with
|
||||
|
||||
Reference in new issue
Block a user