more ParallelRDP debugging

This commit is contained in:
CocoSimone
2022-08-12 19:44:32 +02:00
parent e4c6217fd0
commit ed34d9c9ba
8 changed files with 53 additions and 30 deletions

View File

@@ -124,7 +124,7 @@ WSI* LoadWSIPlatform(Vulkan::WSIPlatform* wsi_platform, std::unique_ptr<Parallel
return wsi; return wsi;
} }
void LoadParallelRDP(const u8* rdram) { void LoadParallelRDP(u8* rdram) {
ResourceLayout vertLayout; ResourceLayout vertLayout;
ResourceLayout fragLayout; ResourceLayout fragLayout;
@@ -166,7 +166,7 @@ void LoadParallelRDP(const u8* rdram) {
} }
} }
void InitParallelRDP(const u8* rdram, SDL_Window* window) { void InitParallelRDP(u8* rdram, SDL_Window* window) {
g_Window = window; g_Window = window;
LoadWSIPlatform(new SDLWSIPlatform(), std::make_unique<SDLParallelRdpWindowInfo>()); LoadWSIPlatform(new SDLWSIPlatform(), std::make_unique<SDLParallelRdpWindowInfo>());
LoadParallelRDP(rdram); LoadParallelRDP(rdram);
@@ -247,7 +247,7 @@ void UpdateScreen(Window& imguiWindow, Util::IntrusivePtr<Image> image) {
wsi->end_frame(); wsi->end_frame();
} }
void UpdateScreenParallelRdp(Window& imguiWindow, const n64::VI& vi) { void UpdateScreenParallelRdp(Window& imguiWindow, n64::VI& vi) {
command_processor->set_vi_register(VIRegister::Control, vi.status.raw); command_processor->set_vi_register(VIRegister::Control, vi.status.raw);
command_processor->set_vi_register(VIRegister::Origin, vi.origin); command_processor->set_vi_register(VIRegister::Origin, vi.origin);
command_processor->set_vi_register(VIRegister::Width, vi.width); command_processor->set_vi_register(VIRegister::Width, vi.width);
@@ -257,9 +257,9 @@ void UpdateScreenParallelRdp(Window& imguiWindow, const n64::VI& vi) {
command_processor->set_vi_register(VIRegister::VSync, vi.vsync); command_processor->set_vi_register(VIRegister::VSync, vi.vsync);
command_processor->set_vi_register(VIRegister::HSync, vi.hsync); command_processor->set_vi_register(VIRegister::HSync, vi.hsync);
command_processor->set_vi_register(VIRegister::Leap, vi.hsyncLeap.raw); command_processor->set_vi_register(VIRegister::Leap, vi.hsyncLeap.raw);
command_processor->set_vi_register(VIRegister::HStart, vi.hstart); command_processor->set_vi_register(VIRegister::HStart, vi.hstart.raw);
command_processor->set_vi_register(VIRegister::VStart, vi.vstart); command_processor->set_vi_register(VIRegister::VStart, vi.vstart.raw);
command_processor->set_vi_register(VIRegister::VBurst, vi.burst.raw); command_processor->set_vi_register(VIRegister::VBurst, vi.vburst);
command_processor->set_vi_register(VIRegister::XScale, vi.xscale.raw); command_processor->set_vi_register(VIRegister::XScale, vi.xscale.raw);
command_processor->set_vi_register(VIRegister::YScale, vi.yscale.raw); command_processor->set_vi_register(VIRegister::YScale, vi.yscale.raw);

View File

@@ -35,8 +35,8 @@ uint32_t GetVkGraphicsQueueFamily();
VkFormat GetVkFormat(); VkFormat GetVkFormat();
VkCommandBuffer GetVkCommandBuffer(); VkCommandBuffer GetVkCommandBuffer();
void SubmitRequestedVkCommandBuffer(); void SubmitRequestedVkCommandBuffer();
void InitParallelRDP(const u8* rdram, SDL_Window*); void InitParallelRDP(u8* rdram, SDL_Window*);
void UpdateScreenParallelRdp(Window& imguiWindow, const n64::VI& vi); void UpdateScreenParallelRdp(Window& imguiWindow, n64::VI& vi);
void ParallelRdpEnqueueCommand(int command_length, u32* buffer); void ParallelRdpEnqueueCommand(int command_length, u32* buffer);
void ParallelRdpOnFullSync(); void ParallelRdpOnFullSync();
void UpdateScreenParallelRdpNoGame(Window& imguiWindow); void UpdateScreenParallelRdpNoGame(Window& imguiWindow);

View File

@@ -4,7 +4,7 @@
#include <Core.hpp> #include <Core.hpp>
#include <utility> #include <utility>
Window::Window(const n64::Core& core) { Window::Window(n64::Core& core) {
InitSDL(); InitSDL();
InitParallelRDP(core.GetRDRAM(), window); InitParallelRDP(core.GetRDRAM(), window);
//InitImgui(); //InitImgui();

View File

@@ -8,7 +8,7 @@
#include <vector> #include <vector>
struct Window { struct Window {
explicit Window(const n64::Core& core); explicit Window(n64::Core& core);
~Window(); ~Window();
ImDrawData* Present(); ImDrawData* Present();

View File

@@ -12,7 +12,7 @@ struct Core {
void Run(); void Run();
void PollInputs(SDL_Event); void PollInputs(SDL_Event);
VI& GetVI() { return mem.mmio.vi; } VI& GetVI() { return mem.mmio.vi; }
const u8* GetRDRAM() const { return mem.rdram.data(); } u8* GetRDRAM() { return mem.rdram.data(); }
bool romLoaded = false; bool romLoaded = false;
private: private:
Mem mem; Mem mem;

View File

@@ -100,7 +100,7 @@ inline void HandleInterrupt(Registers& regs) {
void Cpu::LogInstruction(u32 instruction) { void Cpu::LogInstruction(u32 instruction) {
#ifndef NDEBUG #ifndef NDEBUG
u8 code[4]{}; /*u8 code[4]{};
u32 bswapped = be32toh(instruction); u32 bswapped = be32toh(instruction);
memcpy(code, &instruction, 4); memcpy(code, &instruction, 4);
count = cs_disasm(handle, code, 4, regs.pc, 0, &insn); count = cs_disasm(handle, code, 4, regs.pc, 0, &insn);
@@ -112,7 +112,7 @@ void Cpu::LogInstruction(u32 instruction) {
cs_free(insn, count); cs_free(insn, count);
} else { } else {
util::panic("Failed to disassemble {:08X}!", instruction); util::panic("Failed to disassemble {:08X}!", instruction);
} }*/
#endif #endif
} }

View File

@@ -31,7 +31,7 @@ u32 VI::Read(u32 paddr) const {
case 0x04400020: return hsyncLeap.raw; case 0x04400020: return hsyncLeap.raw;
case 0x04400024: return hvideo.raw; case 0x04400024: return hvideo.raw;
case 0x04400028: return vvideo.raw; case 0x04400028: return vvideo.raw;
case 0x0440002C: return vburst.raw; case 0x0440002C: return vburst;
case 0x04400030: return xscale.raw; case 0x04400030: return xscale.raw;
case 0x04400034: return yscale.raw; case 0x04400034: return yscale.raw;
default: default:
@@ -74,7 +74,7 @@ void VI::Write(MI& mi, Registers& regs, u32 paddr, u32 val) {
case 0x04400020: hsyncLeap.raw = val; break; case 0x04400020: hsyncLeap.raw = val; break;
case 0x04400024: hvideo.raw = val; break; case 0x04400024: hvideo.raw = val; break;
case 0x04400028: vvideo.raw = val; break; case 0x04400028: vvideo.raw = val; break;
case 0x0440002C: vburst.raw = val; break; case 0x0440002C: vburst = val; break;
case 0x04400030: xscale.raw = val; break; case 0x04400030: xscale.raw = val; break;
case 0x04400034: yscale.raw = val; break; case 0x04400034: yscale.raw = val; break;
default: default:

View File

@@ -3,23 +3,23 @@
namespace n64 { namespace n64 {
union VIBurst { union VIBurst {
struct { /*struct {
unsigned hsyncW:8; unsigned hsyncW:8;
unsigned burstW:8; unsigned burstW:8;
unsigned vsyncW:4; unsigned vsyncW:4;
unsigned burstStart:10; unsigned burstStart:10;
unsigned:2; unsigned:2;
}; };*/
u32 raw; u32 raw;
}; };
union VIHsyncLeap { union VIHsyncLeap {
struct { /*struct {
unsigned leapB:10; unsigned leapB:10;
unsigned:6; unsigned:6;
unsigned leapA:10; unsigned leapA:10;
unsigned:6; unsigned:6;
}; };*/
u32 raw; u32 raw;
} ; } ;
@@ -33,14 +33,20 @@ union VIVideo {
u32 raw; u32 raw;
}; };
union VIScale { union AxisScale {
u32 raw;
struct { struct {
unsigned scale:12; unsigned scaleDecimal:10;
unsigned:4; unsigned scaleInteger:2;
unsigned offset:12; unsigned subpixelOffsetDecimal:10;
unsigned subpixelOffsetInteger:2;
unsigned:4;
};
struct {
unsigned scale:12;
unsigned subpixelOffset:12;
unsigned:4; unsigned:4;
}; };
u32 raw;
}; };
enum VIFormat { enum VIFormat {
@@ -52,14 +58,30 @@ enum VIFormat {
union VIStatus { union VIStatus {
struct { struct {
u8 format:2; u8 type:2;
unsigned serrate:1; bool gamma_dither_enable:1;
unsigned:29; bool gamma_enable:1;
bool divot_enable:1;
bool reserved_always_off:1;
bool serrate:1;
bool reserved_diagnostics_only:1;
unsigned antialias_mode:3;
unsigned:21;
}; };
u32 raw; u32 raw;
}; };
union AxisStart {
u32 raw;
struct {
unsigned end:10;
unsigned:6;
unsigned start:10;
unsigned:6;
};
};
struct MI; struct MI;
struct Registers; struct Registers;
@@ -67,14 +89,15 @@ struct VI {
VI(); VI();
[[nodiscard]] u32 Read(u32) const; [[nodiscard]] u32 Read(u32) const;
void Write(MI&, Registers&, u32, u32); void Write(MI&, Registers&, u32, u32);
VIScale xscale{}, yscale{}; AxisScale xscale{}, yscale{};
VIVideo hvideo{}, vvideo{}; VIVideo hvideo{}, vvideo{};
VIHsyncLeap hsyncLeap{}; VIHsyncLeap hsyncLeap{};
VIStatus status{}; VIStatus status{};
VIBurst burst{}, vburst{}; VIBurst burst{};
u32 vburst{};
u32 origin, width, current; u32 origin, width, current;
u32 vsync, hsync, intr; u32 vsync, hsync, intr;
u32 hstart{}, vstart{}; AxisStart hstart{}, vstart{};
int swaps{}; int swaps{};
int numHalflines; int numHalflines;
int numFields; int numFields;