mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-11-13 09:39:33 +01:00
Merge pull request #4162 from unknownbrackets/debugger
Add more formatting to GE debugger, cleanup, step prim
This commit is contained in:
commit
ffbac62f01
11 files changed
+248
-32
No files matched your search
+6
-3
@@ -807,8 +807,8 @@ void GeDisassembleOp(u32 pc, u32 op, u32 prev, char *buffer) {
|
||||
|
||||
case GE_CMD_ALPHATEST:
|
||||
{
|
||||
const char *alphaTestFuncs[] = { "NEVER", "ALWAYS", " == ", " != ", " < ", " <= ", " > ", " >= " };
|
||||
sprintf(buffer, "Alpha test settings: %06x (%02x%s(c & %02x))", data, (data >> 8) & 0xFF, alphaTestFuncs[data & 7], (data >> 16) & 0xFF);
|
||||
const char *alphaTestFuncs[] = { " NEVER ", " ALWAYS ", " == ", " != ", " < ", " <= ", " > ", " >= " };
|
||||
sprintf(buffer, "Alpha test settings: %06x ((c & %02x)%s%02x)", data, (data >> 16) & 0xFF, (data >> 8) & 0xFF, alphaTestFuncs[data & 7]);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -905,7 +905,10 @@ void GeDisassembleOp(u32 pc, u32 op, u32 prev, char *buffer) {
|
||||
break;
|
||||
|
||||
case GE_CMD_TEXWRAP:
|
||||
sprintf(buffer, "TexWrap %06x", data);
|
||||
if (data & ~0x0101)
|
||||
sprintf(buffer, "TexWrap %s s, %s t (extra %x)", data & 1 ? "clamp" : "wrap", data & 0x100 ? "clamp" : "wrap", data);
|
||||
else
|
||||
sprintf(buffer, "TexWrap %s s, %s t", data & 1 ? "clamp" : "wrap", data & 0x100 ? "clamp" : "wrap");
|
||||
break;
|
||||
|
||||
case GE_CMD_TEXLEVEL:
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#include <set>
|
||||
|
||||
#include "base/functional.h"
|
||||
#include "base/mutex.h"
|
||||
#include "Windows/GEDebugger/GEDebugger.h"
|
||||
#include "Windows/GEDebugger/SimpleGLWindow.h"
|
||||
#include "Windows/GEDebugger/CtrlDisplayListView.h"
|
||||
@@ -216,6 +215,13 @@ void CGEDebugger::UpdatePreviews() {
|
||||
|
||||
DisplayList list;
|
||||
if (gpuDebug != NULL && gpuDebug->GetCurrentDisplayList(list)) {
|
||||
const u32 op = Memory::Read_U32(list.pc);
|
||||
const u32 cmd = op >> 24;
|
||||
// TODO: Bezier/spline?
|
||||
if (cmd == GE_CMD_PRIM) {
|
||||
UpdatePrimPreview(op);
|
||||
}
|
||||
|
||||
displayList->setDisplayList(list);
|
||||
}
|
||||
|
||||
@@ -226,8 +232,7 @@ void CGEDebugger::UpdatePreviews() {
|
||||
lists->Update();
|
||||
}
|
||||
|
||||
void CGEDebugger::UpdateSize(WORD width, WORD height)
|
||||
{
|
||||
void CGEDebugger::UpdateSize(WORD width, WORD height) {
|
||||
// only resize the tab for now
|
||||
HWND tabControl = GetDlgItem(m_hDlg, IDC_GEDBG_MAINTAB);
|
||||
|
||||
@@ -331,6 +336,13 @@ BOOL CGEDebugger::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) {
|
||||
SetBreakNext(BREAK_NEXT_FRAME);
|
||||
break;
|
||||
|
||||
case IDC_GEDBG_STEPPRIM:
|
||||
AddCmdBreakpoint(GE_CMD_PRIM, true);
|
||||
AddCmdBreakpoint(GE_CMD_BEZIER, true);
|
||||
AddCmdBreakpoint(GE_CMD_SPLINE, true);
|
||||
SetBreakNext(BREAK_NEXT_PRIM);
|
||||
break;
|
||||
|
||||
case IDC_GEDBG_BREAKTEX:
|
||||
{
|
||||
if (!gpuDebug) {
|
||||
|
||||
@@ -40,6 +40,7 @@ enum BreakNextType {
|
||||
BREAK_NEXT_TEX,
|
||||
BREAK_NEXT_NONTEX,
|
||||
BREAK_NEXT_FRAME,
|
||||
BREAK_NEXT_PRIM,
|
||||
};
|
||||
|
||||
class CtrlDisplayListView;
|
||||
@@ -62,6 +63,7 @@ protected:
|
||||
private:
|
||||
void SetupPreviews();
|
||||
void UpdatePreviews();
|
||||
void UpdatePrimPreview(u32 op);
|
||||
void UpdateSize(WORD width, WORD height);
|
||||
void SavePosition();
|
||||
void SetBreakNext(BreakNextType type);
|
||||
|
||||
@@ -254,11 +254,13 @@ void SimpleGLWindow::Draw(u8 *data, int w, int h, bool flipped, Format fmt) {
|
||||
Redraw();
|
||||
}
|
||||
|
||||
void SimpleGLWindow::Redraw() {
|
||||
void SimpleGLWindow::Redraw(bool andSwap) {
|
||||
DrawChecker();
|
||||
|
||||
if (tw_ == 0 && th_ == 0) {
|
||||
Swap();
|
||||
if (andSwap) {
|
||||
Swap();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -310,7 +312,9 @@ void SimpleGLWindow::Redraw() {
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, indices);
|
||||
|
||||
Swap();
|
||||
if (andSwap) {
|
||||
Swap();
|
||||
}
|
||||
}
|
||||
|
||||
void SimpleGLWindow::Clear() {
|
||||
@@ -319,6 +323,14 @@ void SimpleGLWindow::Clear() {
|
||||
Redraw();
|
||||
}
|
||||
|
||||
void SimpleGLWindow::Begin() {
|
||||
Redraw(false);
|
||||
}
|
||||
|
||||
void SimpleGLWindow::End() {
|
||||
Swap();
|
||||
}
|
||||
|
||||
bool SimpleGLWindow::DragStart(int mouseX, int mouseY) {
|
||||
// Only while zoomed in, otherwise it's shrink to fit mode or fixed.
|
||||
if (!zoom_) {
|
||||
|
||||
@@ -49,11 +49,15 @@ struct SimpleGLWindow {
|
||||
|
||||
void Clear();
|
||||
void Draw(u8 *data, int w, int h, bool flipped = false, Format = FORMAT_8888);
|
||||
void Redraw();
|
||||
void Redraw(bool andSwap = true);
|
||||
void Initialize(u32 flags);
|
||||
static SimpleGLWindow *GetFrom(HWND hwnd);
|
||||
static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
// To draw something custom.
|
||||
void Begin();
|
||||
void End();
|
||||
|
||||
void SetFlags(u32 flags) {
|
||||
flags_ = flags;
|
||||
}
|
||||
|
||||
+142
-15
@@ -47,8 +47,10 @@ enum CmdFormatType {
|
||||
CMD_FMT_F16_XY,
|
||||
CMD_FMT_VERTEXTYPE,
|
||||
CMD_FMT_TEXFMT,
|
||||
CMD_FMT_CLUTFMT,
|
||||
CMD_FMT_COLORTEST,
|
||||
CMD_FMT_ALPHATEST,
|
||||
CMD_FMT_STENCILTEST,
|
||||
CMD_FMT_ZTEST,
|
||||
CMD_FMT_OFFSETADDR,
|
||||
CMD_FMT_VADDR,
|
||||
@@ -57,6 +59,11 @@ enum CmdFormatType {
|
||||
CMD_FMT_STENCILOP,
|
||||
CMD_FMT_BLENDMODE,
|
||||
CMD_FMT_FLAG,
|
||||
CMD_FMT_CLEARMODE,
|
||||
CMD_FMT_TEXFUNC,
|
||||
CMD_FMT_TEXMODE,
|
||||
CMD_FMT_LOGICOP,
|
||||
CMD_FMT_TEXWRAP,
|
||||
};
|
||||
|
||||
struct TabStateRow {
|
||||
@@ -153,22 +160,19 @@ static const TabStateRow stateTextureRows[] = {
|
||||
{ L"Tex mapping mode", GE_CMD_TEXMAPMODE, CMD_FMT_HEX, GE_CMD_TEXTUREMAPENABLE },
|
||||
// TODO: Format.
|
||||
{ L"Tex shade srcs", GE_CMD_TEXSHADELS, CMD_FMT_HEX, GE_CMD_TEXTUREMAPENABLE },
|
||||
// TODO: Format.
|
||||
{ L"Tex mode", GE_CMD_TEXMODE, CMD_FMT_HEX, GE_CMD_TEXTUREMAPENABLE },
|
||||
{ L"Tex mode", GE_CMD_TEXMODE, CMD_FMT_TEXMODE, GE_CMD_TEXTUREMAPENABLE },
|
||||
{ L"Tex format", GE_CMD_TEXFORMAT, CMD_FMT_TEXFMT, GE_CMD_TEXTUREMAPENABLE },
|
||||
// TODO: Format.
|
||||
{ L"Tex filtering", GE_CMD_TEXFILTER, CMD_FMT_HEX, GE_CMD_TEXTUREMAPENABLE },
|
||||
// TODO: Format.
|
||||
{ L"Tex wrapping", GE_CMD_TEXWRAP, CMD_FMT_HEX, GE_CMD_TEXTUREMAPENABLE },
|
||||
{ L"Tex wrapping", GE_CMD_TEXWRAP, CMD_FMT_TEXWRAP, GE_CMD_TEXTUREMAPENABLE },
|
||||
// TODO: Format.
|
||||
{ L"Tex level/bias", GE_CMD_TEXLEVEL, CMD_FMT_HEX, GE_CMD_TEXTUREMAPENABLE },
|
||||
// TODO: Format.
|
||||
{ L"Tex lod slope", GE_CMD_TEXLODSLOPE, CMD_FMT_HEX, GE_CMD_TEXTUREMAPENABLE },
|
||||
// TODO: Format.
|
||||
{ L"Tex func", GE_CMD_TEXFUNC, CMD_FMT_HEX, GE_CMD_TEXTUREMAPENABLE },
|
||||
{ L"Tex func", GE_CMD_TEXFUNC, CMD_FMT_TEXFUNC, GE_CMD_TEXTUREMAPENABLE },
|
||||
{ L"Tex env color", GE_CMD_TEXENVCOLOR, CMD_FMT_HEX, GE_CMD_TEXTUREMAPENABLE },
|
||||
{ L"CLUT", GE_CMD_CLUTADDR, CMD_FMT_PTRWIDTH, GE_CMD_TEXTUREMAPENABLE, GE_CMD_CLUTADDRUPPER },
|
||||
{ L"CLUT format", GE_CMD_CLUTFORMAT, CMD_FMT_TEXFMT, GE_CMD_TEXTUREMAPENABLE },
|
||||
{ L"CLUT format", GE_CMD_CLUTFORMAT, CMD_FMT_CLUTFMT, GE_CMD_TEXTUREMAPENABLE },
|
||||
{ L"Texture L0 addr", GE_CMD_TEXADDR0, CMD_FMT_PTRWIDTH, GE_CMD_TEXTUREMAPENABLE, GE_CMD_TEXBUFWIDTH0 },
|
||||
{ L"Texture L1 addr", GE_CMD_TEXADDR1, CMD_FMT_PTRWIDTH, GE_CMD_TEXTUREMAPENABLE, GE_CMD_TEXBUFWIDTH1 },
|
||||
{ L"Texture L2 addr", GE_CMD_TEXADDR2, CMD_FMT_PTRWIDTH, GE_CMD_TEXTUREMAPENABLE, GE_CMD_TEXBUFWIDTH2 },
|
||||
@@ -188,8 +192,7 @@ static const TabStateRow stateTextureRows[] = {
|
||||
};
|
||||
|
||||
static const TabStateRow stateSettingsRows[] = {
|
||||
// TODO: Format. This is almost a flag...
|
||||
{ L"Clear mode", GE_CMD_CLEARMODE, CMD_FMT_HEX },
|
||||
{ L"Clear mode", GE_CMD_CLEARMODE, CMD_FMT_CLEARMODE },
|
||||
{ L"Framebuffer", GE_CMD_FRAMEBUFPTR, CMD_FMT_PTRWIDTH, 0, GE_CMD_FRAMEBUFWIDTH },
|
||||
{ L"Framebuffer format", GE_CMD_FRAMEBUFPIXFORMAT, CMD_FMT_TEXFMT },
|
||||
{ L"Depthbuffer", GE_CMD_ZBUFPTR, CMD_FMT_PTRWIDTH, 0, GE_CMD_ZBUFWIDTH },
|
||||
@@ -208,14 +211,13 @@ static const TabStateRow stateSettingsRows[] = {
|
||||
{ L"Cull mode", GE_CMD_CULL, CMD_FMT_NUM, GE_CMD_CULLFACEENABLE },
|
||||
{ L"Color test", GE_CMD_COLORTEST, CMD_FMT_COLORTEST, GE_CMD_COLORTESTENABLE, GE_CMD_COLORREF, GE_CMD_COLORTESTMASK },
|
||||
{ L"Alpha test", GE_CMD_ALPHATEST, CMD_FMT_ALPHATEST, GE_CMD_ALPHATESTENABLE },
|
||||
{ L"Stencil test", GE_CMD_STENCILTEST, CMD_FMT_ALPHATEST, GE_CMD_STENCILTESTENABLE },
|
||||
{ L"Stencil test", GE_CMD_STENCILTEST, CMD_FMT_STENCILTEST, GE_CMD_STENCILTESTENABLE },
|
||||
{ L"Stencil test op", GE_CMD_STENCILOP, CMD_FMT_STENCILOP, GE_CMD_STENCILTESTENABLE },
|
||||
{ L"Depth test", GE_CMD_ZTEST, CMD_FMT_ZTEST, GE_CMD_ZTESTENABLE },
|
||||
{ L"Alpha blend mode", GE_CMD_BLENDMODE, CMD_FMT_BLENDMODE, GE_CMD_ALPHABLENDENABLE },
|
||||
{ L"Blend color A", GE_CMD_BLENDFIXEDA, CMD_FMT_HEX, GE_CMD_ALPHABLENDENABLE },
|
||||
{ L"Blend color B", GE_CMD_BLENDFIXEDB, CMD_FMT_HEX, GE_CMD_ALPHABLENDENABLE },
|
||||
// TODO: Format.
|
||||
{ L"Logic Op", GE_CMD_LOGICOP, CMD_FMT_HEX, GE_CMD_LOGICOPENABLE },
|
||||
{ L"Logic Op", GE_CMD_LOGICOP, CMD_FMT_LOGICOP, GE_CMD_LOGICOPENABLE },
|
||||
{ L"Fog 1", GE_CMD_FOG1, CMD_FMT_FLOAT24, GE_CMD_FOGENABLE },
|
||||
{ L"Fog 2", GE_CMD_FOG2, CMD_FMT_FLOAT24, GE_CMD_FOGENABLE },
|
||||
{ L"Fog color", GE_CMD_FOGCOLOR, CMD_FMT_HEX, GE_CMD_FOGENABLE },
|
||||
@@ -354,6 +356,29 @@ void FormatStateRow(wchar_t *dest, const TabStateRow &info, u32 value, bool enab
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_FMT_CLUTFMT:
|
||||
{
|
||||
const char *clutformats[] = {
|
||||
"BGR 5650",
|
||||
"ABGR 1555",
|
||||
"ABGR 4444",
|
||||
"ABGR 8888",
|
||||
};
|
||||
const u8 palette = (value >> 0) & 0xFF;
|
||||
const u8 mask = (value >> 8) & 0xFF;
|
||||
const u8 offset = (value >> 16) & 0xFF;
|
||||
if (palette < (u8)ARRAY_SIZE(clutformats) && offset < 0x20) {
|
||||
if (offset == 0) {
|
||||
swprintf(dest, L"%S & %02x", clutformats[palette], mask);
|
||||
} else {
|
||||
swprintf(dest, L"%S & %02x, offset +%d", clutformats[palette], mask, offset);
|
||||
}
|
||||
} else {
|
||||
swprintf(dest, L"%06x", value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_FMT_COLORTEST:
|
||||
{
|
||||
static const char *colorTests[] = {"NEVER", "ALWAYS", " == ", " != "};
|
||||
@@ -368,13 +393,19 @@ void FormatStateRow(wchar_t *dest, const TabStateRow &info, u32 value, bool enab
|
||||
break;
|
||||
|
||||
case CMD_FMT_ALPHATEST:
|
||||
case CMD_FMT_STENCILTEST:
|
||||
{
|
||||
static const char *alphaTestFuncs[] = { "NEVER", "ALWAYS", " == ", " != ", " < ", " <= ", " > ", " >= " };
|
||||
static const char *alphaTestFuncs[] = { "NEVER", "ALWAYS", "==", "!=", "<", "<=", ">", ">=" };
|
||||
const u8 mask = (value >> 16) & 0xff;
|
||||
const u8 ref = (value >> 8) & 0xff;
|
||||
const u8 func = (value >> 0) & 0xff;
|
||||
if (func < (u8)ARRAY_SIZE(alphaTestFuncs)) {
|
||||
swprintf(dest, L"pass if (a & %02x) %S (%02x & %02x)", mask, alphaTestFuncs[func], ref, mask);
|
||||
if (info.fmt == CMD_FMT_ALPHATEST) {
|
||||
swprintf(dest, L"pass if (a & %02x) %S (%02x & %02x)", mask, alphaTestFuncs[func], ref, mask);
|
||||
} else if (info.fmt == CMD_FMT_STENCILTEST) {
|
||||
// Stencil test is the other way around.
|
||||
swprintf(dest, L"pass if (%02x & %02x) %S (a & %02x)", ref, mask, alphaTestFuncs[func], mask);
|
||||
}
|
||||
} else {
|
||||
swprintf(dest, L"%06x", value);
|
||||
}
|
||||
@@ -383,7 +414,7 @@ void FormatStateRow(wchar_t *dest, const TabStateRow &info, u32 value, bool enab
|
||||
|
||||
case CMD_FMT_ZTEST:
|
||||
{
|
||||
static const char *zTestFuncs[] = { "NEVER", "ALWAYS", " == ", " != ", " < ", " <= ", " > ", " >= " };
|
||||
static const char *zTestFuncs[] = { "NEVER", "ALWAYS", "==", "!=", "<", "<=", ">", ">=" };
|
||||
if (value < (u32)ARRAY_SIZE(zTestFuncs)) {
|
||||
swprintf(dest, L"pass if src %S dst", zTestFuncs[value]);
|
||||
} else {
|
||||
@@ -487,6 +518,102 @@ void FormatStateRow(wchar_t *dest, const TabStateRow &info, u32 value, bool enab
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_FMT_CLEARMODE:
|
||||
if (value == 0) {
|
||||
swprintf(dest, L"%d", value);
|
||||
} else if ((value & ~(GE_CLEARMODE_ALL | 1)) == 0) {
|
||||
const char *clearmodes[] = {
|
||||
"1, write disabled",
|
||||
"1, write color",
|
||||
"1, write alpha/stencil",
|
||||
"1, write color, alpha/stencil",
|
||||
"1, write depth",
|
||||
"1, write color, depth",
|
||||
"1, write alpha/stencil, depth",
|
||||
"1, write color, alpha/stencil, depth",
|
||||
};
|
||||
swprintf(dest, L"%S", clearmodes[value >> 8]);
|
||||
} else {
|
||||
swprintf(dest, L"%06x", value);
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_FMT_TEXFUNC:
|
||||
{
|
||||
const char *texfuncs[] = {
|
||||
"modulate",
|
||||
"decal",
|
||||
"blend",
|
||||
"replace",
|
||||
"add",
|
||||
};
|
||||
const u8 func = (value >> 0) & 0xFF;
|
||||
const u8 rgba = (value >> 8) & 0xFF;
|
||||
const u8 colorDouble = (value >> 16) & 0xFF;
|
||||
|
||||
if (rgba <= 1 && colorDouble <= 1 && func < (u8)ARRAY_SIZE(texfuncs)) {
|
||||
swprintf(dest, L"%S, %S%S", texfuncs[func], rgba ? "RGBA" : "RGB", colorDouble ? ", color doubling" : "");
|
||||
} else {
|
||||
swprintf(dest, L"%06x", value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_FMT_TEXMODE:
|
||||
{
|
||||
const u8 swizzle = (value >> 0) & 0xFF;
|
||||
const u8 clutLevels = (value >> 8) & 0xFF;
|
||||
const u8 maxLevel = (value >> 16) & 0xFF;
|
||||
|
||||
if (swizzle <= 1 && clutLevels <= 1 && maxLevel <= 7) {
|
||||
swprintf(dest, L"%S%d levels%S", swizzle ? "swizzled, " : "", maxLevel + 1, clutLevels ? ", CLUT per level" : "");
|
||||
} else {
|
||||
swprintf(dest, L"%06x", value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_FMT_LOGICOP:
|
||||
{
|
||||
const char *logicOps[] = {
|
||||
"clear",
|
||||
"and",
|
||||
"reverse and",
|
||||
"copy",
|
||||
"inverted and",
|
||||
"noop",
|
||||
"xor",
|
||||
"or",
|
||||
"negated or",
|
||||
"equivalence",
|
||||
"inverted",
|
||||
"reverse or",
|
||||
"inverted copy",
|
||||
"inverted or",
|
||||
"negated and",
|
||||
"set",
|
||||
};
|
||||
|
||||
if (value < ARRAY_SIZE(logicOps)) {
|
||||
swprintf(dest, L"%S", logicOps[value]);
|
||||
} else {
|
||||
swprintf(dest, L"%06x", value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_FMT_TEXWRAP:
|
||||
{
|
||||
if ((value & ~0x0101) == 0) {
|
||||
const bool clampS = (value & 0x0001) != 0;
|
||||
const bool clampT = (value & 0x0100) != 0;
|
||||
swprintf(dest, L"%S s, %S t", clampS ? "clamp" : "wrap", clampT ? "clamp" : "wrap");
|
||||
} else {
|
||||
swprintf(dest, L"%06x", value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_FMT_FLAG:
|
||||
if ((value & ~1) == 0) {
|
||||
swprintf(dest, L"%d", value);
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
// Copyright (c) 2013- PPSSPP Project.
|
||||
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, version 2.0 or later versions.
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License 2.0 for more details.
|
||||
|
||||
// A copy of the GPL 2.0 should have been included with the program.
|
||||
// If not, see http://www.gnu.org/licenses/
|
||||
|
||||
// Official git repository and contact information can be found at
|
||||
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
|
||||
|
||||
#include "Windows/GEDebugger/GEDebugger.h"
|
||||
#include "Windows/GEDebugger/SimpleGLWindow.h"
|
||||
#include "GPU/GPUInterface.h"
|
||||
#include "GPU/Common/GPUDebugInterface.h"
|
||||
#include "GPU/GPUState.h"
|
||||
|
||||
// TODO: Possibly a shader here to do the transforms?
|
||||
|
||||
void CGEDebugger::UpdatePrimPreview(u32 op) {
|
||||
const u32 prim_type = (op >> 16) & 0xFF;
|
||||
const u32 count = op & 0xFFFF;
|
||||
if (prim_type >= 7) {
|
||||
ERROR_LOG(COMMON, "Unsupported prim type: %x", op);
|
||||
return;
|
||||
}
|
||||
if (!gpuDebug) {
|
||||
ERROR_LOG(COMMON, "Invalid debugging environment, shutting down?", op);
|
||||
return;
|
||||
}
|
||||
if (count == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const GEPrimitiveType prim = static_cast<GEPrimitiveType>(prim_type);
|
||||
|
||||
frameWindow->Begin();
|
||||
// TODO: Get the coords, render on top of the texture and framebuffer previews.
|
||||
// TODO: glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);?
|
||||
frameWindow->End();
|
||||
|
||||
texWindow->Begin();
|
||||
texWindow->End();
|
||||
}
|
||||
@@ -287,6 +287,7 @@
|
||||
<ClCompile Include="GEDebugger\SimpleGLWindow.cpp" />
|
||||
<ClCompile Include="GEDebugger\TabDisplayLists.cpp" />
|
||||
<ClCompile Include="GEDebugger\TabState.cpp" />
|
||||
<ClCompile Include="GEDebugger\VertexPreview.cpp" />
|
||||
<ClCompile Include="InputDevice.cpp" />
|
||||
<ClCompile Include="KeyboardDevice.cpp" />
|
||||
<ClCompile Include="W32Util\DialogManager.cpp" />
|
||||
|
||||
@@ -134,6 +134,9 @@
|
||||
<ClCompile Include="Debugger\DumpMemoryWindow.cpp">
|
||||
<Filter>Windows\Debugger</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GEDebugger\VertexPreview.cpp">
|
||||
<Filter>Windows\GE Debugger</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Debugger\CtrlDisAsmView.h">
|
||||
|
||||
+7
-6
@@ -171,17 +171,18 @@ EXSTYLE WS_EX_ACCEPTFILES | WS_EX_TOOLWINDOW
|
||||
CAPTION "GE"
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
BEGIN
|
||||
PUSHBUTTON "Step Draw",IDC_GEDBG_STEPDRAW,0,0,48,14
|
||||
PUSHBUTTON "Step Into",IDC_GEDBG_STEP,52,0,48,14
|
||||
PUSHBUTTON "Step Tex",IDC_GEDBG_STEPTEX,104,0,48,14
|
||||
PUSHBUTTON "Step Frame",IDC_GEDBG_STEPFRAME,156,0,48,14
|
||||
PUSHBUTTON "Resume",IDC_GEDBG_RESUME,208,0,48,14
|
||||
PUSHBUTTON "Step &Frame",IDC_GEDBG_STEPFRAME,10,2,48,14
|
||||
PUSHBUTTON "Step &Tex",IDC_GEDBG_STEPTEX,62,2,48,14
|
||||
PUSHBUTTON "Step &Draw",IDC_GEDBG_STEPDRAW,114,2,48,14
|
||||
PUSHBUTTON "Step &Prim",IDC_GEDBG_STEPPRIM,166,2,48,14
|
||||
PUSHBUTTON "Step &Into",IDC_GEDBG_STEP,218,2,48,14
|
||||
PUSHBUTTON "&Resume",IDC_GEDBG_RESUME,270,2,48,14
|
||||
CONTROL "",IDC_GEDBG_TEX,"SimpleGLWindow",WS_CHILD | WS_VISIBLE,10,20,128,128
|
||||
CONTROL "",IDC_GEDBG_FRAME,"SimpleGLWindow",WS_CHILD | WS_VISIBLE,148,20,256,136
|
||||
CONTROL "",IDC_GEDBG_MAINTAB,"SysTabControl32",TCS_TABS | TCS_FOCUSNEVER,10,216,480,180
|
||||
EDITTEXT IDC_GEDBG_FRAMEBUFADDR,148,192,128,12,ES_READONLY | NOT WS_BORDER
|
||||
EDITTEXT IDC_GEDBG_TEXADDR,10,152,128,12,ES_READONLY | NOT WS_BORDER
|
||||
PUSHBUTTON "Break on Texture...",IDC_GEDBG_BREAKTEX,24,172,100,14
|
||||
PUSHBUTTON "Break on Te&xture...",IDC_GEDBG_BREAKTEX,24,172,100,14
|
||||
CONTROL "",IDC_GEDBG_FBTABS,"SysTabControl32",TCS_BUTTONS | TCS_FOCUSNEVER,384,192,110,12
|
||||
END
|
||||
|
||||
|
||||
+2
-1
@@ -296,6 +296,7 @@
|
||||
#define IDC_GEDBG_BREAKTEX 40135
|
||||
#define ID_OPTIONS_PAUSE_FOCUS 40136
|
||||
#define ID_TEXTURESCALING_AUTO 40137
|
||||
#define IDC_GEDBG_STEPPRIM 40138
|
||||
|
||||
// Dummy option to let the buffered rendering hotkey cycle through all the options.
|
||||
#define ID_OPTIONS_BUFFEREDRENDERINGDUMMY 40500
|
||||
@@ -308,7 +309,7 @@
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 254
|
||||
#define _APS_NEXT_COMMAND_VALUE 40138
|
||||
#define _APS_NEXT_COMMAND_VALUE 40139
|
||||
#define _APS_NEXT_CONTROL_VALUE 1193
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
|
||||
Reference in new issue
Block a user