From 9e1019b1cf82d554c26a8187075f91e19800cf7d Mon Sep 17 00:00:00 2001 From: kd-11 Date: Tue, 23 Apr 2024 01:12:34 +0300 Subject: [PATCH] rsx: Start splitting off some stuff into the graph backend class --- rpcs3/Emu/RSX/NV47/FW/GRAPH_backend.h | 21 +++++++++++++++++++++ rpcs3/Emu/RSX/RSXThread.h | 4 +++- rpcs3/Emu/RSX/VK/VKGSRender.cpp | 5 +++++ rpcs3/Emu/RSX/VK/VKGSRender.h | 3 +++ rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 3 +++ 6 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 rpcs3/Emu/RSX/NV47/FW/GRAPH_backend.h diff --git a/rpcs3/Emu/RSX/NV47/FW/GRAPH_backend.h b/rpcs3/Emu/RSX/NV47/FW/GRAPH_backend.h new file mode 100644 index 0000000000..aa50e3eb0e --- /dev/null +++ b/rpcs3/Emu/RSX/NV47/FW/GRAPH_backend.h @@ -0,0 +1,21 @@ +#pragma once + +#include "../HW/context.h" + +#include + +namespace rsx +{ + // GRAPH backend class. Wraps RSX acceleration capabilities for the host. + // TODO: Flesh this out. + // TODO: Replace the virtuals with something faster + class GRAPH_backend + { + public: + // virtual void begin() = 0; + // virtual void end() = 0; + + // Patch transform constants + virtual void patch_transform_constants(context* ctx, u32 first_index, const std::span& data) {}; + }; +} diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index bb8784734a..a64c92356b 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -33,6 +33,8 @@ #include "Core/RSXIOMap.hpp" #include "Core/RSXVertexTypes.h" +#include "NV47/FW/GRAPH_backend.h" + extern atomic_t g_user_asked_for_frame_capture; extern atomic_t g_disable_frame_limit; extern rsx::frame_trace_data frame_debug; @@ -150,7 +152,7 @@ namespace rsx }; // TODO: This class is a mess, this needs to be broken into smaller chunks, like I did for RSXFIFO and RSXZCULL (kd) - class thread : public cpu_thread, public GCM_context + class thread : public cpu_thread, public GCM_context, public GRAPH_backend { u64 timestamp_ctrl = 0; u64 timestamp_subvalue = 0; diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index b4737f2a02..4a7b970766 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -2354,6 +2354,11 @@ void VKGSRender::update_vertex_env(u32 id, const vk::vertex_upload_info& vertex_ m_vertex_layout_ring_info.unmap(); } +void VKGSRender::patch_transform_constants(rsx::context* ctx, u32 first_index, const std::span& data) +{ + +} + void VKGSRender::init_buffers(rsx::framebuffer_creation_context context, bool) { prepare_rtts(context); diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.h b/rpcs3/Emu/RSX/VK/VKGSRender.h index f2af5468bf..f1d222f227 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.h +++ b/rpcs3/Emu/RSX/VK/VKGSRender.h @@ -276,6 +276,9 @@ public: // Host sync object inline std::pair map_host_object_data() { return { m_host_data_ptr, m_host_object_data->value }; } + // GRAPH backend + void patch_transform_constants(rsx::context* ctx, u32 first_index, const std::span& data) override; + protected: void clear_surface(u32 mask) override; void begin() override; diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index c9fa56775b..b404f1e546 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -598,6 +598,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 4850053e9f..5fe6e86034 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -2536,6 +2536,9 @@ Emu + + Emu\GPU\RSX\NV47\FW +