Files
2025-05-18 13:04:45 +08:00

100 lines
3.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "RenderDocManager.h"
#include "Misc/AutomationTest.h"
#include "Job/Scheduler.h"
#include <IRenderDocPlugin.h>
#include "TextureGraphEngine.h"
#include "RenderingThread.h"
DEFINE_LOG_CATEGORY(LogRenderDocTextureGraph);
/**
* Enable (or disable) concretely renderdoc capture in texture graph module without changing the api
* DO NOT FORGET to run the project with the command line -AttachRenderDoc OR enable auto attach in the renderdoc plugin
*/
#define TEXTUREGRAPH_RENDERDOC_ENABLED 1
namespace TextureGraphEditor
{
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Public Interface
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
RenderDocManager::RenderDocManager()
{
#if TEXTUREGRAPH_RENDERDOC_ENABLED
static FAutoConsoleCommand CCmdRenderDocCaptureFrame = FAutoConsoleCommand(
TEXT("renderdoc.TextureGraph_CaptureNextBatch"),
TEXT("Captures the next Job Batch and launches RenderDoc"),
FConsoleCommandDelegate::CreateRaw(this, &RenderDocManager::CaptureNextBatch)
);
static FAutoConsoleCommand CCmdRenderDocCapturePIE = FAutoConsoleCommand(
TEXT("renderdoc.TextureGraph_CapturePrevBatch"),
TEXT("Captures the previous Job Batch and launches RenderDoc"),
FConsoleCommandDelegate::CreateRaw(this, &RenderDocManager::CapturePreviousBatch)
);
static FAutoConsoleCommand CCmdRenderDocCaptureHistogram = FAutoConsoleCommand(
TEXT("renderdoc.TextureGraph_CaptureNextBatchHistogram"),
TEXT("Captures the next Job Batch producing histogram and launches RenderDoc"),
FConsoleCommandDelegate::CreateRaw(this, &RenderDocManager::CaptureNextBatchHistogram)
);
#endif
}
RenderDocManager::~RenderDocManager()
{
}
void RenderDocManager::CaptureNextBatch()
{
#if TEXTUREGRAPH_RENDERDOC_ENABLED
TextureGraphEngine::GetScheduler()->SetCaptureRenderDocNextBatch(true);
#endif
}
void RenderDocManager::CapturePreviousBatch()
{
#if TEXTUREGRAPH_RENDERDOC_ENABLED
TextureGraphEngine::GetScheduler()->CaptureRenderDocLastRunBatch();
#endif
}
void RenderDocManager::CaptureNextBatchHistogram()
{
#if TEXTUREGRAPH_RENDERDOC_ENABLED
HistogramServicePtr HistoService = TextureGraphEngine::GetScheduler()->GetHistogramService().lock();
if (HistoService)
{
HistoService->CaptureNextBatch();
}
#endif
}
void RenderDocManager::BeginCapture()
{
#if TEXTUREGRAPH_RENDERDOC_ENABLED
ENQUEUE_RENDER_COMMAND(BeginCaptureCommand)([this](FRHICommandListImmediate& RHICommandList)
{
IRenderDocPlugin& PluginModule = FModuleManager::GetModuleChecked<IRenderDocPlugin>("RenderDocPlugin");
PluginModule.BeginCapture(&RHICommandList, IRenderCaptureProvider::ECaptureFlags_Launch, FString("TextureGraph"));
});
#endif
}
void RenderDocManager::EndCapture()
{
#if TEXTUREGRAPH_RENDERDOC_ENABLED
ENQUEUE_RENDER_COMMAND(EndnCaptureCommand)([this](FRHICommandListImmediate& RHICommandList)
{
IRenderDocPlugin& PluginModule = FModuleManager::GetModuleChecked<IRenderDocPlugin>("RenderDocPlugin");
PluginModule.EndCapture(&RHICommandList);
});
#endif
}
}