GE Debugger: Add some constants to expressions.

Hard to remember, but at least can be copy/pasted.
Allows for things like "alphatest.func == GREATER".
This commit is contained in:
Unknown W. Brackets 2022-09-11 13:51:10 -07:00
parent 7d07e4e75d
commit f02e6b8e39

View file

@ -106,6 +106,7 @@ enum class GECmdField : uint8_t {
FLAG_AFTER_10, // At 10, 1 bit.
FLAG_AFTER_11, // At 11, 1 bit.
FLAG_AFTER_16, // At 16, 1 bit.
FLAG_AFTER_17, // At 17, 1 bit.
FLAG_AFTER_18, // At 18, 1 bit.
FLAG_AFTER_19, // At 19, 1 bit.
FLAG_AFTER_20, // At 20, 1 bit.
@ -116,8 +117,6 @@ enum class GECmdField : uint8_t {
U3_AFTER_16, // At 16, 3 bits.
U12_AFTER_4, // At 4, 12 bits.
PRIM_TYPE, // At 16, 3 bits.
SPLINE_UTYPE, // At 16, 2 bits.
SPLINE_VTYPE, // At 18, 2 bits.
SIGNAL_TYPE, // At 16, 8 bits.
VTYPE_TC, // At 0, 2 bits.
VTYPE_COL, // At 2, 3 bits.
@ -175,8 +174,10 @@ static constexpr FieldName fieldNames[] = {
{ GECmdFormat::SPLINE, GECmdField::LOW_U8, "u" },
{ GECmdFormat::SPLINE, GECmdField::MID_U8, "vcount" },
{ GECmdFormat::SPLINE, GECmdField::MID_U8, "v" },
{ GECmdFormat::SPLINE, GECmdField::SPLINE_UTYPE, "utype" },
{ GECmdFormat::SPLINE, GECmdField::SPLINE_VTYPE, "vtype" },
{ GECmdFormat::SPLINE, GECmdField::FLAG_AFTER_16, "ufirstopen" },
{ GECmdFormat::SPLINE, GECmdField::FLAG_AFTER_17, "ulastopen" },
{ GECmdFormat::SPLINE, GECmdField::FLAG_AFTER_18, "vfirstopen" },
{ GECmdFormat::SPLINE, GECmdField::FLAG_AFTER_19, "vlastopen" },
{ GECmdFormat::SIGNAL, GECmdField::LOW_U16, "data" },
{ GECmdFormat::SIGNAL, GECmdField::SIGNAL_TYPE, "type" },
{ GECmdFormat::VERTEX_TYPE, GECmdField::VTYPE_TC, "texcoord" },
@ -306,6 +307,202 @@ static constexpr FieldName fieldNames[] = {
{ GECmdFormat::ALPHA_PRIM, GECmdField::FLAG_AFTER_23, "dither" },
};
struct GECmdConstant {
const char *name;
uint32_t value;
};
// TODO: It would be nice if these were somehow typed...
static constexpr GECmdConstant constantNames[] = {
{ "GE_PRIM_POINTS", GE_PRIM_POINTS },
{ "GE_PRIM_LINES", GE_PRIM_LINES },
{ "GE_PRIM_LINE_STRIP", GE_PRIM_LINE_STRIP },
{ "GE_PRIM_TRIANGLES", GE_PRIM_TRIANGLES },
{ "GE_PRIM_TRIANGLE_STRIP", GE_PRIM_TRIANGLE_STRIP },
{ "GE_PRIM_TRIANGLE_FAN", GE_PRIM_TRIANGLE_FAN },
{ "GE_PRIM_RECTANGLES", GE_PRIM_RECTANGLES },
{ "GE_PRIM_KEEP_PREVIOUS", GE_PRIM_KEEP_PREVIOUS },
{ "POINTS", GE_PRIM_POINTS },
{ "LINES", GE_PRIM_LINES },
{ "LINE_STRIP", GE_PRIM_LINE_STRIP },
{ "TRIANGLES", GE_PRIM_TRIANGLES },
{ "TRIANGLE_STRIP", GE_PRIM_TRIANGLE_STRIP },
{ "TRIANGLE_FAN", GE_PRIM_TRIANGLE_FAN },
{ "RECTANGLES", GE_PRIM_RECTANGLES },
{ "SPRITES", GE_PRIM_RECTANGLES },
{ "KEEP_PREVIOUS", GE_PRIM_KEEP_PREVIOUS },
{ "CONTINUE", GE_PRIM_KEEP_PREVIOUS },
{ "GE_PATCHPRIM_TRIANGLES", GE_PATCHPRIM_TRIANGLES, },
{ "GE_PATCHPRIM_LINES", GE_PATCHPRIM_LINES, },
{ "GE_PATCHPRIM_POINTS", GE_PATCHPRIM_POINTS, },
{ "GE_SIGNAL_NONE", PSP_GE_SIGNAL_NONE },
{ "GE_SIGNAL_HANDLER_SUSPEND", PSP_GE_SIGNAL_HANDLER_SUSPEND },
{ "GE_SIGNAL_HANDLER_CONTINUE", PSP_GE_SIGNAL_HANDLER_CONTINUE },
{ "GE_SIGNAL_HANDLER_PAUSE", PSP_GE_SIGNAL_HANDLER_PAUSE },
{ "GE_SIGNAL_SYNC", PSP_GE_SIGNAL_SYNC },
{ "GE_SIGNAL_JUMP", PSP_GE_SIGNAL_JUMP },
{ "GE_SIGNAL_CALL", PSP_GE_SIGNAL_CALL },
{ "GE_SIGNAL_RET", PSP_GE_SIGNAL_RET },
{ "GE_SIGNAL_RJUMP", PSP_GE_SIGNAL_RJUMP },
{ "GE_SIGNAL_RCALL", PSP_GE_SIGNAL_RCALL },
{ "GE_SIGNAL_OJUMP", PSP_GE_SIGNAL_OJUMP },
{ "GE_SIGNAL_OCALL", PSP_GE_SIGNAL_OCALL },
{ "GE_VTYPE_TC_NONE", GE_VTYPE_TC_NONE >> GE_VTYPE_TC_SHIFT },
{ "GE_VTYPE_TC_8BIT", GE_VTYPE_TC_8BIT >> GE_VTYPE_TC_SHIFT },
{ "GE_VTYPE_TC_16BIT", GE_VTYPE_TC_16BIT >> GE_VTYPE_TC_SHIFT },
{ "GE_VTYPE_TC_FLOAT", GE_VTYPE_TC_FLOAT >> GE_VTYPE_TC_SHIFT },
{ "GE_VTYPE_COL_NONE", GE_VTYPE_COL_NONE >> GE_VTYPE_COL_SHIFT },
{ "GE_VTYPE_COL_565", GE_VTYPE_COL_565 >> GE_VTYPE_COL_SHIFT },
{ "GE_VTYPE_COL_5650", GE_VTYPE_COL_565 >> GE_VTYPE_COL_SHIFT },
{ "GE_VTYPE_COL_5551", GE_VTYPE_COL_5551 >> GE_VTYPE_COL_SHIFT },
{ "GE_VTYPE_COL_4444", GE_VTYPE_COL_4444 >> GE_VTYPE_COL_SHIFT },
{ "GE_VTYPE_COL_8888", GE_VTYPE_COL_8888 >> GE_VTYPE_COL_SHIFT },
{ "GE_VTYPE_NRM_NONE", GE_VTYPE_NRM_NONE >> GE_VTYPE_NRM_SHIFT },
{ "GE_VTYPE_NRM_8BIT", GE_VTYPE_NRM_8BIT >> GE_VTYPE_NRM_SHIFT },
{ "GE_VTYPE_NRM_16BIT", GE_VTYPE_NRM_16BIT >> GE_VTYPE_NRM_SHIFT },
{ "GE_VTYPE_NRM_FLOAT", GE_VTYPE_NRM_FLOAT >> GE_VTYPE_NRM_SHIFT },
{ "GE_VTYPE_POS_8BIT", GE_VTYPE_POS_8BIT >> GE_VTYPE_POS_SHIFT },
{ "GE_VTYPE_POS_16BIT", GE_VTYPE_POS_16BIT >> GE_VTYPE_POS_SHIFT },
{ "GE_VTYPE_POS_FLOAT", GE_VTYPE_POS_FLOAT >> GE_VTYPE_POS_SHIFT },
{ "GE_VTYPE_WEIGHT_NONE", GE_VTYPE_WEIGHT_NONE >> GE_VTYPE_WEIGHT_SHIFT },
{ "GE_VTYPE_WEIGHT_8BIT", GE_VTYPE_WEIGHT_8BIT >> GE_VTYPE_WEIGHT_SHIFT },
{ "GE_VTYPE_WEIGHT_16BIT", GE_VTYPE_WEIGHT_16BIT >> GE_VTYPE_WEIGHT_SHIFT },
{ "GE_VTYPE_WEIGHT_FLOAT", GE_VTYPE_WEIGHT_FLOAT >> GE_VTYPE_WEIGHT_SHIFT },
{ "GE_VTYPE_IDX_NONE", GE_VTYPE_IDX_NONE >> GE_VTYPE_IDX_SHIFT },
{ "GE_VTYPE_IDX_8BIT", GE_VTYPE_IDX_8BIT >> GE_VTYPE_IDX_SHIFT },
{ "GE_VTYPE_IDX_16BIT", GE_VTYPE_IDX_16BIT >> GE_VTYPE_IDX_SHIFT },
{ "GE_VTYPE_IDX_32BIT", GE_VTYPE_IDX_32BIT >> GE_VTYPE_IDX_SHIFT },
{ "GE_LIGHTCOMP_ONLYDIFFUSE", GE_LIGHTCOMP_ONLYDIFFUSE },
{ "GE_LIGHTCOMP_BOTH", GE_LIGHTCOMP_BOTH },
{ "GE_LIGHTCOMP_ONLYPOWDIFFUSE", GE_LIGHTCOMP_ONLYPOWDIFFUSE },
{ "GE_LIGHTTYPE_DIRECTIONAL", GE_LIGHTTYPE_DIRECTIONAL },
{ "GE_LIGHTTYPE_POINT", GE_LIGHTTYPE_POINT },
{ "GE_LIGHTTYPE_SPOT", GE_LIGHTTYPE_SPOT },
{ "GE_TEXMAP_TEXTURE_COORDS", GE_TEXMAP_TEXTURE_COORDS },
{ "GE_TEXMAP_TEXTURE_MATRIX", GE_TEXMAP_TEXTURE_MATRIX },
{ "GE_TEXMAP_ENVIRONMENT_MAP", GE_TEXMAP_ENVIRONMENT_MAP },
{ "GE_PROJMAP_POSITION", GE_PROJMAP_POSITION },
{ "GE_PROJMAP_UV", GE_PROJMAP_UV },
{ "GE_PROJMAP_NORMALIZED_NORMAL", GE_PROJMAP_NORMALIZED_NORMAL },
{ "GE_PROJMAP_NORMAL", GE_PROJMAP_NORMAL },
{ "GE_TFMT_565", GE_TFMT_5650 },
{ "GE_TFMT_5650", GE_TFMT_5650 },
{ "GE_TFMT_5551", GE_TFMT_5551 },
{ "GE_TFMT_4444", GE_TFMT_4444 },
{ "GE_TFMT_8888", GE_TFMT_8888 },
{ "GE_TFMT_CLUT4", GE_TFMT_CLUT4 },
{ "GE_TFMT_CLUT8", GE_TFMT_CLUT8 },
{ "GE_TFMT_CLUT16", GE_TFMT_CLUT16 },
{ "GE_TFMT_CLUT32", GE_TFMT_CLUT32 },
{ "GE_TFMT_DXT1", GE_TFMT_DXT1 },
{ "GE_TFMT_DXT3", GE_TFMT_DXT3 },
{ "GE_TFMT_DXT5", GE_TFMT_DXT5 },
{ "GE_CMODE_16BIT_BGR5650", GE_CMODE_16BIT_BGR5650 },
{ "GE_CMODE_16BIT_ABGR5551", GE_CMODE_16BIT_ABGR5551 },
{ "GE_CMODE_16BIT_ABGR4444", GE_CMODE_16BIT_ABGR4444 },
{ "GE_CMODE_32BIT_ABGR8888", GE_CMODE_32BIT_ABGR8888 },
{ "GE_TFILT_NEAREST", GE_TFILT_NEAREST },
{ "GE_TFILT_LINEAR", GE_TFILT_LINEAR },
{ "GE_TFILT_NEAREST_MIPMAP_NEAREST", GE_TFILT_NEAREST_MIPMAP_NEAREST },
{ "GE_TFILT_LINEAR_MIPMAP_NEAREST", GE_TFILT_LINEAR_MIPMAP_NEAREST },
{ "GE_TFILT_NEAREST_MIPMAP_LINEAR", GE_TFILT_NEAREST_MIPMAP_LINEAR },
{ "GE_TFILT_LINEAR_MIPMAP_LINEAR", GE_TFILT_LINEAR_MIPMAP_LINEAR },
{ "NEAREST", GE_TFILT_NEAREST },
{ "LINEAR", GE_TFILT_LINEAR },
{ "GE_TEXLEVEL_MODE_AUTO", GE_TEXLEVEL_MODE_AUTO },
{ "GE_TEXLEVEL_MODE_CONST", GE_TEXLEVEL_MODE_CONST },
{ "GE_TEXLEVEL_MODE_SLOPE", GE_TEXLEVEL_MODE_SLOPE },
{ "GE_TEXFUNC_MODULATE", GE_TEXFUNC_MODULATE },
{ "GE_TEXFUNC_DECAL", GE_TEXFUNC_DECAL },
{ "GE_TEXFUNC_BLEND", GE_TEXFUNC_BLEND },
{ "GE_TEXFUNC_REPLACE", GE_TEXFUNC_REPLACE },
{ "GE_TEXFUNC_ADD", GE_TEXFUNC_ADD },
{ "GE_COMP_NEVER", GE_COMP_NEVER },
{ "GE_COMP_ALWAYS", GE_COMP_ALWAYS },
{ "GE_COMP_EQUAL", GE_COMP_EQUAL },
{ "GE_COMP_NOTEQUAL", GE_COMP_NOTEQUAL },
{ "GE_COMP_LESS", GE_COMP_LESS },
{ "GE_COMP_LEQUAL", GE_COMP_LEQUAL },
{ "GE_COMP_GREATER", GE_COMP_GREATER },
{ "GE_COMP_GEQUAL", GE_COMP_GEQUAL },
{ "NEVER", GE_COMP_NEVER },
{ "ALWAYS", GE_COMP_ALWAYS },
{ "EQUAL", GE_COMP_EQUAL },
{ "NOTEQUAL", GE_COMP_NOTEQUAL },
{ "LESS", GE_COMP_LESS },
{ "LEQUAL", GE_COMP_LEQUAL },
{ "LESSEQUAL", GE_COMP_LEQUAL },
{ "GREATER", GE_COMP_GREATER },
{ "GEQUAL", GE_COMP_GEQUAL },
{ "GREATEREQUAL", GE_COMP_GEQUAL },
{ "GE_STENCILOP_KEEP", GE_STENCILOP_KEEP },
{ "GE_STENCILOP_ZERO", GE_STENCILOP_ZERO },
{ "GE_STENCILOP_REPLACE", GE_STENCILOP_REPLACE },
{ "GE_STENCILOP_INVERT", GE_STENCILOP_INVERT },
{ "GE_STENCILOP_INCR", GE_STENCILOP_INCR },
{ "GE_STENCILOP_DECR", GE_STENCILOP_DECR },
{ "GE_BLENDMODE_MUL_AND_ADD", GE_BLENDMODE_MUL_AND_ADD },
{ "GE_BLENDMODE_MUL_AND_SUBTRACT", GE_BLENDMODE_MUL_AND_SUBTRACT },
{ "GE_BLENDMODE_MUL_AND_SUBTRACT_REVERSE", GE_BLENDMODE_MUL_AND_SUBTRACT_REVERSE },
{ "GE_BLENDMODE_MIN", GE_BLENDMODE_MIN },
{ "GE_BLENDMODE_MAX", GE_BLENDMODE_MAX },
{ "GE_BLENDMODE_ABSDIFF", GE_BLENDMODE_ABSDIFF },
{ "ADD", GE_BLENDMODE_MUL_AND_ADD },
{ "SUBTRACT", GE_BLENDMODE_MUL_AND_SUBTRACT },
{ "SUBTRACT_REVERSE", GE_BLENDMODE_MUL_AND_SUBTRACT_REVERSE },
{ "MIN", GE_BLENDMODE_MIN },
{ "MAX", GE_BLENDMODE_MAX },
{ "ABSDIFF", GE_BLENDMODE_ABSDIFF },
{ "GE_SRCBLEND_DSTCOLOR", GE_SRCBLEND_DSTCOLOR },
{ "GE_SRCBLEND_INVDSTCOLOR", GE_SRCBLEND_INVDSTCOLOR },
{ "GE_SRCBLEND_SRCALPHA", GE_SRCBLEND_SRCALPHA },
{ "GE_SRCBLEND_INVSRCALPHA", GE_SRCBLEND_INVSRCALPHA },
{ "GE_SRCBLEND_DSTALPHA", GE_SRCBLEND_DSTALPHA },
{ "GE_SRCBLEND_INVDSTALPHA", GE_SRCBLEND_INVDSTALPHA },
{ "GE_SRCBLEND_DOUBLESRCALPHA", GE_SRCBLEND_DOUBLESRCALPHA },
{ "GE_SRCBLEND_DOUBLEINVSRCALPHA", GE_SRCBLEND_DOUBLEINVSRCALPHA },
{ "GE_SRCBLEND_DOUBLEDSTALPHA", GE_SRCBLEND_DOUBLEDSTALPHA },
{ "GE_SRCBLEND_DOUBLEINVDSTALPHA", GE_SRCBLEND_DOUBLEINVDSTALPHA },
{ "GE_SRCBLEND_FIXA", GE_SRCBLEND_FIXA },
{ "GE_DSTBLEND_SRCCOLOR", GE_DSTBLEND_SRCCOLOR },
{ "GE_DSTBLEND_INVSRCCOLOR", GE_DSTBLEND_INVSRCCOLOR },
{ "GE_DSTBLEND_SRCALPHA", GE_DSTBLEND_SRCALPHA },
{ "GE_DSTBLEND_INVSRCALPHA", GE_DSTBLEND_INVSRCALPHA },
{ "GE_DSTBLEND_DSTALPHA", GE_DSTBLEND_DSTALPHA },
{ "GE_DSTBLEND_INVDSTALPHA", GE_DSTBLEND_INVDSTALPHA },
{ "GE_DSTBLEND_DOUBLESRCALPHA", GE_DSTBLEND_DOUBLESRCALPHA },
{ "GE_DSTBLEND_DOUBLEINVSRCALPHA", GE_DSTBLEND_DOUBLEINVSRCALPHA },
{ "GE_DSTBLEND_DOUBLEDSTALPHA", GE_DSTBLEND_DOUBLEDSTALPHA },
{ "GE_DSTBLEND_DOUBLEINVDSTALPHA", GE_DSTBLEND_DOUBLEINVDSTALPHA },
{ "GE_DSTBLEND_FIXB", GE_DSTBLEND_FIXB },
{ "SRCALPHA", GE_SRCBLEND_SRCALPHA },
{ "INVSRCALPHA", GE_SRCBLEND_INVSRCALPHA },
{ "INVERSESRCALPHA", GE_SRCBLEND_INVSRCALPHA },
{ "DSTALPHA", GE_DSTBLEND_DSTALPHA },
{ "INVDSTALPHA", GE_DSTBLEND_INVDSTALPHA },
{ "DOUBLESRCALPHA", GE_DSTBLEND_DOUBLESRCALPHA },
{ "DOUBLEINVSRCALPHA", GE_DSTBLEND_DOUBLEINVSRCALPHA },
{ "DOUBLEDSTALPHA", GE_DSTBLEND_DOUBLEDSTALPHA },
{ "DOUBLEINVDSTALPHA", GE_DSTBLEND_DOUBLEINVDSTALPHA },
{ "FIXED", GE_DSTBLEND_FIXB },
{ "GE_LOGIC_CLEAR", GE_LOGIC_CLEAR },
{ "GE_LOGIC_AND", GE_LOGIC_AND },
{ "GE_LOGIC_AND_REVERSE", GE_LOGIC_AND_REVERSE },
{ "GE_LOGIC_COPY", GE_LOGIC_COPY },
{ "GE_LOGIC_AND_INVERTED", GE_LOGIC_AND_INVERTED },
{ "GE_LOGIC_NOOP", GE_LOGIC_NOOP },
{ "GE_LOGIC_XOR", GE_LOGIC_XOR },
{ "GE_LOGIC_OR", GE_LOGIC_OR },
{ "GE_LOGIC_NOR", GE_LOGIC_NOR },
{ "GE_LOGIC_EQUIV", GE_LOGIC_EQUIV },
{ "GE_LOGIC_INVERTED", GE_LOGIC_INVERTED },
{ "GE_LOGIC_OR_REVERSE", GE_LOGIC_OR_REVERSE },
{ "GE_LOGIC_COPY_INVERTED", GE_LOGIC_COPY_INVERTED },
{ "GE_LOGIC_OR_INVERTED", GE_LOGIC_OR_INVERTED },
{ "GE_LOGIC_NAND", GE_LOGIC_NAND },
{ "GE_LOGIC_SET", GE_LOGIC_SET },
};
class GEExpressionFunctions : public IExpressionFunctions {
public:
GEExpressionFunctions(GPUDebugInterface *gpu) : gpu_(gpu) {}
@ -405,7 +602,15 @@ bool GEExpressionFunctions::parseFieldReference(const char *ref, const char *fie
}
bool GEExpressionFunctions::parseSymbol(char *str, uint32_t &symbolValue) {
// Mainly useful for checking memory addresses.
// Mainly useful for checking memory addresses and constants.
for (const auto &entry : constantNames) {
if (strcasecmp(str, entry.name) == 0) {
symbolValue = entry.value;
return true;
}
}
return g_symbolMap->GetLabelValue(str, symbolValue);
}
@ -560,6 +765,8 @@ uint32_t GEExpressionFunctions::getFieldValue(GECmdFormat fmt, GECmdField field,
return (value >> 11) & 1;
case GECmdField::FLAG_AFTER_16:
return (value >> 16) & 1;
case GECmdField::FLAG_AFTER_17:
return (value >> 17) & 1;
case GECmdField::FLAG_AFTER_18:
return (value >> 18) & 1;
case GECmdField::FLAG_AFTER_19:
@ -583,10 +790,6 @@ uint32_t GEExpressionFunctions::getFieldValue(GECmdFormat fmt, GECmdField field,
case GECmdField::PRIM_TYPE:
return (value >> 16) & 7;
case GECmdField::SPLINE_UTYPE:
return (value >> 16) & 3;
case GECmdField::SPLINE_VTYPE:
return (value >> 18) & 3;
case GECmdField::SIGNAL_TYPE:
return (value >> 16) & 0xFF;
case GECmdField::VTYPE_TC: