105 lines
3.9 KiB
C++
105 lines
3.9 KiB
C++
// This file is part of the FidelityFX SDK.
|
|
//
|
|
// Copyright (C) 2024 Advanced Micro Devices, Inc.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files(the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions :
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
|
|
#pragma once
|
|
|
|
#include "render/rendermodule.h"
|
|
#include "render/sampler.h"
|
|
#include "render/shaderbuilder.h"
|
|
|
|
#include <FidelityFX/host/ffx_breadcrumbs.h>
|
|
|
|
|
|
namespace cauldron
|
|
{
|
|
class ParameterSet;
|
|
class PipelineObject;
|
|
class RootSignature;
|
|
class RasterView;
|
|
class Texture;
|
|
} // namespace cauldron
|
|
|
|
/// @defgroup FfxBreadcrumbsSample FidelityFX Breadcrumbs sample
|
|
/// Sample documentation for FidelityFX Breadcrumbs
|
|
///
|
|
/// @ingroup SDKEffects
|
|
|
|
/// @defgroup BreadcrumbsRM BreadcrumbsRenderModule
|
|
/// BreadcrumbsRenderModule Reference Documentation
|
|
///
|
|
/// @ingroup FfxBreadcrumbsSample
|
|
/// @{
|
|
|
|
/**
|
|
* @class BreadcrumbsRenderModule
|
|
* BreadcrumbsRenderModule handles a number of tasks related to the AMD FidelityFX Breadcrumbs Library.
|
|
*
|
|
* BreadcrumbsRenderModule takes care of:
|
|
* - creating UI section that enable users to switch between BLUR effect options: kernel size & floating point math type.
|
|
* - executes multiple different blur effects, including but not limited to FFX Blur.
|
|
* - implements a comparison mode for comparing quality and performance of FFX Blur
|
|
* to conventional blur implementations. Comparison mode displays the difference between
|
|
* two different blur effects (see blur_compare_filters_cs.hlsl). The magnitude of the
|
|
* difference can be amplified via UI configurable "Diff Factor".
|
|
*/
|
|
class BreadcrumbsRenderModule : public cauldron::RenderModule
|
|
{
|
|
public:
|
|
/**
|
|
* @brief Constructor with default behavior.
|
|
*/
|
|
BreadcrumbsRenderModule();
|
|
/**
|
|
* @brief Tear down the FFX API Context and release all resources.
|
|
*/
|
|
virtual ~BreadcrumbsRenderModule();
|
|
|
|
/**
|
|
* @brief Initialize the FFX API Context.
|
|
*/
|
|
void Init(const json& initData) override;
|
|
|
|
/**
|
|
* @brief Render a simple triangle and crash in selected frame.
|
|
*/
|
|
void Execute(double deltaTime, cauldron::CommandList* pCmdList) override;
|
|
|
|
private:
|
|
// Only single queue will be used (for DX12 just use D3D12_COMMAND_LIST_TYPE and for Vulkan queue family index).
|
|
uint32_t m_GpuQueue = 0;
|
|
// Number of crashing frame where faulty commands are submitted to GPU, causing shader hang and in result crash will be reported.
|
|
uint64_t m_CrashFrame = 2800;
|
|
|
|
bool m_BreadContextCreated = false;
|
|
void* m_BackendScratchBuffer = nullptr;
|
|
FfxBreadcrumbsContext m_BreadContext;
|
|
|
|
const cauldron::Texture* m_pRenderTarget = nullptr;
|
|
const cauldron::RasterView* m_pRasterView = nullptr;
|
|
cauldron::RootSignature* m_pRootSig = nullptr;
|
|
cauldron::PipelineObject* m_pPipeline = nullptr;
|
|
cauldron::ParameterSet* m_pParams = nullptr;
|
|
|
|
static void ProcessDeviceRemovedEvent(void* data);
|
|
/// @}
|
|
};
|