diff --git a/external/parallel-rdp/ParallelRDPWrapper.cpp b/external/parallel-rdp/ParallelRDPWrapper.cpp index 50911514..3bc71a1b 100644 --- a/external/parallel-rdp/ParallelRDPWrapper.cpp +++ b/external/parallel-rdp/ParallelRDPWrapper.cpp @@ -1,10 +1,7 @@ #include -#include #include #include -#include #include -#include using namespace Vulkan; using namespace RDP; @@ -12,47 +9,6 @@ using namespace RDP; static CommandProcessor* command_processor; static std::unique_ptr windowInfo; -VkQueue GetGraphicsQueue() { - return wsi->get_context().get_queue_info().queues[QUEUE_INDEX_GRAPHICS]; -} - -VkInstance GetVkInstance() { - return wsi->get_context().get_instance(); -} - -VkPhysicalDevice GetVkPhysicalDevice() { - return wsi->get_device().get_physical_device(); -} - -VkDevice GetVkDevice() { - return wsi->get_device().get_device(); -} - -uint32_t GetVkGraphicsQueueFamily() { - return wsi->get_context().get_queue_info().family_indices[QUEUE_INDEX_GRAPHICS]; -} - -VkFormat GetVkFormat() { - return wsi->get_device().get_swapchain_view().get_format(); -} - -CommandBufferHandle requested_command_buffer; - -VkRenderPass GetVkRenderPass() { - return wsi->get_device().request_render_pass( - wsi->get_device().get_swapchain_render_pass(SwapchainRenderPass::ColorOnly), true - ).get_render_pass(); -} - -VkCommandBuffer GetVkCommandBuffer() { - requested_command_buffer = wsi->get_device().request_command_buffer(); - return requested_command_buffer->get_command_buffer(); -} - -void SubmitRequestedVkCommandBuffer() { - wsi->get_device().submit(requested_command_buffer); -} - bool IsFramerateUnlocked() { return wsi->get_present_mode() != PresentMode::SyncToVBlank; } @@ -162,7 +118,7 @@ void DrawFullscreenTexturedQuad(Util::IntrusivePtr image, Util::Intrusive cmd->draw(3, 1); } -void UpdateScreen(n64::Core& core, Util::IntrusivePtr image) { +void UpdateScreen(Util::IntrusivePtr image) { wsi->begin_frame(); if (!image) { @@ -197,7 +153,7 @@ void UpdateScreen(n64::Core& core, Util::IntrusivePtr image) { wsi->end_frame(); } -void UpdateScreenParallelRdp(n64::Core& core, n64::VI& vi) { +void UpdateScreenParallelRdp(n64::VI& vi) { 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::Width, vi.width); @@ -223,12 +179,12 @@ void UpdateScreenParallelRdp(n64::Core& core, n64::VI& vi) { opts.downscale_steps = true; opts.crop_overscan_pixels = true; Util::IntrusivePtr image = command_processor->scanout(opts); - UpdateScreen(core, image); + UpdateScreen(image); command_processor->begin_frame_context(); } -void UpdateScreenParallelRdpNoGame(n64::Core& core) { - UpdateScreen(core, static_cast>(nullptr)); +void UpdateScreenParallelRdpNoGame() { + UpdateScreen(static_cast>(nullptr)); } void ParallelRdpEnqueueCommand(int command_length, u32* buffer) { diff --git a/external/parallel-rdp/ParallelRDPWrapper.hpp b/external/parallel-rdp/ParallelRDPWrapper.hpp index 341d382a..e14c75f3 100644 --- a/external/parallel-rdp/ParallelRDPWrapper.hpp +++ b/external/parallel-rdp/ParallelRDPWrapper.hpp @@ -14,20 +14,11 @@ public: static Vulkan::WSI* wsi; -VkRenderPass GetVkRenderPass(); -VkQueue GetGraphicsQueue(); -VkInstance GetVkInstance(); -VkPhysicalDevice GetVkPhysicalDevice(); -VkDevice GetVkDevice(); -uint32_t GetVkGraphicsQueueFamily(); -VkFormat GetVkFormat(); -VkCommandBuffer GetVkCommandBuffer(); -void SubmitRequestedVkCommandBuffer(); void LoadParallelRDP(const u8* rdram); Vulkan::WSI* LoadWSIPlatform(Vulkan::InstanceFactory*, std::unique_ptr&& wsi_platform, std::unique_ptr&& newWindowInfo); -void UpdateScreenParallelRdp(n64::Core& core, n64::VI& vi); +void UpdateScreenParallelRdp(n64::VI& vi); void ParallelRdpEnqueueCommand(int command_length, u32* buffer); void ParallelRdpOnFullSync(); -void UpdateScreenParallelRdpNoGame(n64::Core& core); +void UpdateScreenParallelRdpNoGame(); bool IsFramerateUnlocked(); void SetFramerateUnlocked(bool unlocked); diff --git a/src/backend/Core.cpp b/src/backend/Core.cpp index d069a36c..aebab03b 100644 --- a/src/backend/Core.cpp +++ b/src/backend/Core.cpp @@ -1,7 +1,6 @@ #include #include #include -#include namespace n64 { u32 extraCycles = 0; @@ -16,13 +15,7 @@ u32 PopStalledCycles() { return ret; } -Core::Core() { - if(SDL_GameControllerAddMappingsFromFile("resources/gamecontrollerdb.txt") < 0) { - Util::warn("Failed to load game controller DB"); - } - - cpu = std::make_unique(); -} +Core::Core() : cpu(std::make_unique()) {} void Core::Stop() { render = false; diff --git a/src/backend/core/mmio/Audio.cpp b/src/backend/core/mmio/Audio.cpp index ec5df92f..16f2af16 100644 --- a/src/backend/core/mmio/Audio.cpp +++ b/src/backend/core/mmio/Audio.cpp @@ -1,6 +1,6 @@ #include -#include #include +#include namespace n64 { #define AUDIO_SAMPLE_RATE 44100 @@ -38,6 +38,7 @@ void audioCallback(void*, Uint8* stream, int length) { } void InitAudio() { + SDL_InitSubSystem(SDL_INIT_AUDIO); AdjustSampleRate(AUDIO_SAMPLE_RATE); memset(&request, 0, sizeof(request)); diff --git a/src/backend/core/mmio/CMakeLists.txt b/src/backend/core/mmio/CMakeLists.txt index 0a02854f..e22d826e 100644 --- a/src/backend/core/mmio/CMakeLists.txt +++ b/src/backend/core/mmio/CMakeLists.txt @@ -1,4 +1,8 @@ file(GLOB_RECURSE SOURCES *.cpp) file(GLOB_RECURSE HEADERS *.hpp) -add_library(mmio ${SOURCES} ${HEADERS} ../../../../external/cic_nus_6105/n64_cic_nus_6105.cpp) \ No newline at end of file +find_package(SDL2 REQUIRED) + +add_library(mmio ${SOURCES} ${HEADERS} ../../../../external/cic_nus_6105/n64_cic_nus_6105.cpp) + +target_link_libraries(mmio PRIVATE SDL2::SDL2) \ No newline at end of file diff --git a/src/backend/core/mmio/PIF.cpp b/src/backend/core/mmio/PIF.cpp index 361e0f0a..9392d114 100644 --- a/src/backend/core/mmio/PIF.cpp +++ b/src/backend/core/mmio/PIF.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include #include #include @@ -335,46 +334,7 @@ void PIF::EepromWrite(const u8* cmd, u8* res, const Mem& mem) { } void PIF::UpdateController() { - const uint8_t* state = SDL_GetKeyboardState(nullptr); - joybusDevices[channel].controller.a = state[SDL_SCANCODE_X]; - joybusDevices[channel].controller.b = state[SDL_SCANCODE_C]; - joybusDevices[channel].controller.z = state[SDL_SCANCODE_Z]; - joybusDevices[channel].controller.start = state[SDL_SCANCODE_RETURN]; - joybusDevices[channel].controller.dp_up = state[SDL_SCANCODE_PAGEUP]; - joybusDevices[channel].controller.dp_down = state[SDL_SCANCODE_PAGEDOWN]; - joybusDevices[channel].controller.dp_left = state[SDL_SCANCODE_HOME]; - joybusDevices[channel].controller.dp_right = state[SDL_SCANCODE_END]; - joybusDevices[channel].controller.joy_reset = state[SDL_SCANCODE_RETURN] && state[SDL_SCANCODE_A] && state[SDL_SCANCODE_S]; - joybusDevices[channel].controller.l = state[SDL_SCANCODE_A]; - joybusDevices[channel].controller.r = state[SDL_SCANCODE_S]; - joybusDevices[channel].controller.c_up = state[SDL_SCANCODE_I]; - joybusDevices[channel].controller.c_down = state[SDL_SCANCODE_K]; - joybusDevices[channel].controller.c_left = state[SDL_SCANCODE_J]; - joybusDevices[channel].controller.c_right = state[SDL_SCANCODE_L]; - s8 xaxis = 0, yaxis = 0; - if (state[SDL_SCANCODE_LEFT]) { - xaxis = -86; - } - else if (state[SDL_SCANCODE_RIGHT]) { - xaxis = 86; - } - - if (state[SDL_SCANCODE_DOWN]) { - yaxis = -86; - } - else if (state[SDL_SCANCODE_UP]) { - yaxis = 86; - } - - joybusDevices[channel].controller.joy_x = xaxis; - joybusDevices[channel].controller.joy_y = yaxis; - - if (joybusDevices[channel].controller.joy_reset) { - joybusDevices[channel].controller.start = false; - joybusDevices[channel].controller.joy_x = 0; - joybusDevices[channel].controller.joy_y = 0; - } } void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { diff --git a/src/backend/core/mmio/PIF.hpp b/src/backend/core/mmio/PIF.hpp index f10616e6..adf41272 100644 --- a/src/backend/core/mmio/PIF.hpp +++ b/src/backend/core/mmio/PIF.hpp @@ -104,7 +104,7 @@ enum CICType { }; struct PIF { - PIF() : inputMap(inputManager) {} + PIF() = default; ~PIF() = default; void Reset(); void MaybeLoadMempak(); @@ -124,9 +124,6 @@ struct PIF { std::vector Serialize(); bool gamepadConnected = false, mempakOpen = false; - gainput::InputManager inputManager; - gainput::InputMap inputMap; - gainput::DeviceId keyboardId, padId; JoybusDevice joybusDevices[6]{}; u8 bootrom[PIF_BOOTROM_SIZE]{}, ram[PIF_RAM_SIZE]{}; mio::mmap_sink mempak, eeprom; diff --git a/src/backend/core/mmio/PIF/Device.cpp b/src/backend/core/mmio/PIF/Device.cpp index 8b699696..92628e24 100644 --- a/src/backend/core/mmio/PIF/Device.cpp +++ b/src/backend/core/mmio/PIF/Device.cpp @@ -2,7 +2,6 @@ #include #include #include -#include namespace n64 { void PIF::InitDevices(SaveType saveType) { diff --git a/src/backend/core/registers/cop/cop1instructions.cpp b/src/backend/core/registers/cop/cop1instructions.cpp index 3f8a2e29..b30b9b4e 100644 --- a/src/backend/core/registers/cop/cop1instructions.cpp +++ b/src/backend/core/registers/cop/cop1instructions.cpp @@ -278,11 +278,11 @@ FORCE_INLINE void SetCauseOnResult(Registers& regs, T& d) { if constexpr(std::is_same_v) { u32 c = 0x7FBFFFFF; magic = U32_TO_F(c); - min = FLT_MIN; + min = std::numeric_limits::min(); } else if constexpr(std::is_same_v) { u64 c = 0x7FF7FFFFFFFFFFFF; magic = U64_TO_D(c); - min = DBL_MIN; + min = std::numeric_limits::min(); } switch (fp_class) { case FP_NAN: diff --git a/src/frontend/EmuThread.cpp b/src/frontend/EmuThread.cpp index a876eac5..55a637a5 100644 --- a/src/frontend/EmuThread.cpp +++ b/src/frontend/EmuThread.cpp @@ -1,6 +1,7 @@ #include #include #include +#include "Audio.hpp" EmuThread::EmuThread(std::unique_ptr&& instance, std::unique_ptr&& wsiPlatform, std::unique_ptr&& windowInfo, QObject* parent_object) noexcept : QThread(parent_object), instance(std::move(instance)), wsiPlatform(std::move(wsiPlatform)), windowInfo(std::move(windowInfo)) {} @@ -8,15 +9,16 @@ EmuThread::EmuThread(std::unique_ptr&& instance, std::unique_ [[noreturn]] void EmuThread::run() noexcept { LoadWSIPlatform(instance.get(), std::move(wsiPlatform), std::move(windowInfo)); LoadParallelRDP(core->cpu->mem.GetRDRAM()); + n64::InitAudio(); while (true) { if (!core->pause) { core->Run(0.5, 0.5); if(core->render) { - UpdateScreenParallelRdp(*core, core->cpu->mem.mmio.vi); + UpdateScreenParallelRdp(core->cpu->mem.mmio.vi); } } else { if(core->render) { - UpdateScreenParallelRdpNoGame(*core); + UpdateScreenParallelRdpNoGame(); } } } diff --git a/src/frontend/KaizenQt.cpp b/src/frontend/KaizenQt.cpp index 5484b57b..dedcc020 100644 --- a/src/frontend/KaizenQt.cpp +++ b/src/frontend/KaizenQt.cpp @@ -3,7 +3,6 @@ #include #include #include -#include KaizenQt::KaizenQt() noexcept : QWidget(nullptr) { mainWindow = new MainWindowController(); diff --git a/src/frontend/MainWindow.cpp b/src/frontend/MainWindow.cpp index b5ea9628..5ae996f7 100644 --- a/src/frontend/MainWindow.cpp +++ b/src/frontend/MainWindow.cpp @@ -2,7 +2,6 @@ #include #include #include -#include MainWindowController::MainWindowController() noexcept { view.setupUi(this);