VideoCommon: update graphics mod action interface

* Add a 'AfterEFB' function to graphics mod action that can return a Material
* Rename previous EFB graphics mod function to 'BeforeEFB' to differentiate from 'AfterEFB'
* Rename previous XFB graphics mod function to 'BeforeXFB' to mirror EFB
This commit is contained in:
iwubcode
2025-11-17 18:29:48 -06:00
parent d16004c371
commit 6ba2d2e081
10 changed files with 27 additions and 14 deletions

View File

@@ -10,7 +10,7 @@ void PrintAction::OnDrawStarted(GraphicsModActionData::DrawStarted*)
INFO_LOG_FMT(VIDEO, "OnDrawStarted Called");
}
void PrintAction::OnEFB(GraphicsModActionData::EFB* efb)
void PrintAction::BeforeEFB(GraphicsModActionData::PreEFB* efb)
{
if (!efb) [[unlikely]]
return;

View File

@@ -12,7 +12,7 @@ class PrintAction final : public GraphicsModAction
public:
static constexpr std::string_view factory_name = "print";
void OnDrawStarted(GraphicsModActionData::DrawStarted*) override;
void OnEFB(GraphicsModActionData::EFB*) override;
void BeforeEFB(GraphicsModActionData::PreEFB*) override;
void OnProjection(GraphicsModActionData::Projection*) override;
void OnProjectionAndTexture(GraphicsModActionData::Projection*) override;
void OnTextureLoad(GraphicsModActionData::TextureLoad*) override;

View File

@@ -30,7 +30,7 @@ ScaleAction::ScaleAction(Common::Vec3 scale) : m_scale(scale)
{
}
void ScaleAction::OnEFB(GraphicsModActionData::EFB* efb)
void ScaleAction::BeforeEFB(GraphicsModActionData::PreEFB* efb)
{
if (!efb) [[unlikely]]
return;

View File

@@ -16,7 +16,7 @@ public:
static constexpr std::string_view factory_name = "scale";
static std::unique_ptr<ScaleAction> Create(const picojson::value& json_data);
explicit ScaleAction(Common::Vec3 scale);
void OnEFB(GraphicsModActionData::EFB*) override;
void BeforeEFB(GraphicsModActionData::PreEFB*) override;
void OnProjection(GraphicsModActionData::Projection*) override;
void OnProjectionAndTexture(GraphicsModActionData::Projection*) override;

View File

@@ -14,7 +14,7 @@ void SkipAction::OnDrawStarted(GraphicsModActionData::DrawStarted* draw_started)
*draw_started->skip = true;
}
void SkipAction::OnEFB(GraphicsModActionData::EFB* efb)
void SkipAction::BeforeEFB(GraphicsModActionData::PreEFB* efb)
{
if (!efb) [[unlikely]]
return;

View File

@@ -10,5 +10,5 @@ class SkipAction final : public GraphicsModAction
public:
static constexpr std::string_view factory_name = "skip";
void OnDrawStarted(GraphicsModActionData::DrawStarted*) override;
void OnEFB(GraphicsModActionData::EFB*) override;
void BeforeEFB(GraphicsModActionData::PreEFB*) override;
};

View File

@@ -16,8 +16,9 @@ public:
GraphicsModAction& operator=(GraphicsModAction&&) = default;
virtual void OnDrawStarted(GraphicsModActionData::DrawStarted*) {}
virtual void OnEFB(GraphicsModActionData::EFB*) {}
virtual void OnXFB() {}
virtual void BeforeEFB(GraphicsModActionData::PreEFB*) {}
virtual void AfterEFB(GraphicsModActionData::PostEFB*) {}
virtual void BeforeXFB() {}
virtual void OnProjection(GraphicsModActionData::Projection*) {}
virtual void OnProjectionAndTexture(GraphicsModActionData::Projection*) {}
virtual void OnTextureLoad(GraphicsModActionData::TextureLoad*) {}

View File

@@ -12,6 +12,7 @@
#include "Common/Matrix.h"
#include "Common/SmallVector.h"
#include "VideoCommon/Assets/TextureAsset.h"
#include "VideoCommon/Resources/MaterialResource.h"
#include "VideoCommon/ShaderGenCommon.h"
namespace GraphicsModActionData
@@ -24,7 +25,7 @@ struct DrawStarted
std::span<u8>* material_uniform_buffer;
};
struct EFB
struct PreEFB
{
u32 texture_width;
u32 texture_height;
@@ -33,6 +34,11 @@ struct EFB
u32* scaled_height;
};
struct PostEFB
{
VideoCommon::MaterialResource* material = nullptr;
};
struct Projection
{
Common::Matrix44* matrix;

View File

@@ -36,11 +36,17 @@ public:
return;
m_action_impl->OnDrawStarted(draw_started);
}
void OnEFB(GraphicsModActionData::EFB* efb) override
void BeforeEFB(GraphicsModActionData::PreEFB* efb) override
{
if (!m_mod.m_enabled)
return;
m_action_impl->OnEFB(efb);
m_action_impl->BeforeEFB(efb);
}
void AfterEFB(GraphicsModActionData::PostEFB* efb) override
{
if (!m_mod.m_enabled)
return;
m_action_impl->AfterEFB(efb);
}
void OnProjection(GraphicsModActionData::Projection* projection) override
{