Browse Source

Refactored MFSR dispatch into its own function, to be consistent with the other rendering events and to allow direct calls from managed code if desired.

pssr
Nico de Poel 1 year ago
parent
commit
5845b0f7ca
  1. 55
      Tools/PSSRPlugin/pssrplugin.cpp

55
Tools/PSSRPlugin/pssrplugin.cpp

@ -428,41 +428,19 @@ extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API DestroyPssrContext(ui
UNITY_LOG(s_Log, "Destroyed PSSR context");
}
// Plugin function to handle a specific rendering event
static void UNITY_INTERFACE_API OnRenderEventAndData(int eventID, void* data)
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API DispatchPssr(const pssr_dispatch_params_t* params)
{
if (!s_mfsrInitialized)
return;
if (s_RendererType == kUnityGfxRendererPS5 && s_GraphicsPS5 == nullptr)
return;
if (s_RendererType == kUnityGfxRendererPS5NGGC && s_GraphicsAgcPS5 == nullptr)
return;
// User rendering code
switch (eventID)
{
case 0: // Create PSSR context
{
auto* params = (pssr_init_params_t*)data;
CreatePssrContext(params, nullptr);
break;
}
case 1: // Execute PSSR
{
auto* params = (pssr_dispatch_params_t*)data;
if (params->contextIndex < 0 || params->contextIndex >= MaxNumContexts)
{
std::stringstream msg;
msg << "Invalid PSSR context index: " << params->contextIndex;
UNITY_LOG_ERROR(s_Log, msg.str().c_str());
break;
return;
}
PssrContext& context = s_contexts[params->contextIndex];
if (context.mfsrContext == nullptr)
break;
return;
// How we obtain a command buffer to dispatch to depends on which graphics API we're using in Unity
sce::Agc::DrawCommandBuffer* cmd = nullptr;
@ -513,6 +491,33 @@ static void UNITY_INTERFACE_API OnRenderEventAndData(int eventID, void* data)
{
s_GraphicsAgcPS5->SubmitGraphics(cmd->getSubmitPointer(), cmd->getSubmitSize());
}
}
// Plugin function to handle a specific rendering event
static void UNITY_INTERFACE_API OnRenderEventAndData(int eventID, void* data)
{
if (!s_mfsrInitialized)
return;
if (s_RendererType == kUnityGfxRendererPS5 && s_GraphicsPS5 == nullptr)
return;
if (s_RendererType == kUnityGfxRendererPS5NGGC && s_GraphicsAgcPS5 == nullptr)
return;
// User rendering code
switch (eventID)
{
case 0: // Create PSSR context
{
auto* params = (pssr_init_params_t*)data;
CreatePssrContext(params, nullptr);
break;
}
case 1: // Execute PSSR
{
auto* params = (pssr_dispatch_params_t*)data;
DispatchPssr(params);
break;
}
case 2: // Destroy PSSR context

Loading…
Cancel
Save