488 lines
25 KiB
C
488 lines
25 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.
|
|
|
|
/// @defgroup ffxBreadcrumbs FidelityFX Breadcrumbs
|
|
/// FidelityFX Breadcrumbs runtime library
|
|
///
|
|
/// @ingroup SDKComponents
|
|
|
|
|
|
#pragma once
|
|
|
|
// Include the interface for the backend of the Breadcrumbs API.
|
|
#include <FidelityFX/host/ffx_interface.h>
|
|
|
|
/// FidelityFX Breadcrumbs major version.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
#define FFX_BREADCRUMBS_VERSION_MAJOR (1)
|
|
|
|
/// FidelityFX Breadcrumbs minor version.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
#define FFX_BREADCRUMBS_VERSION_MINOR (0)
|
|
|
|
/// FidelityFX Breadcrumbs patch version.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
#define FFX_BREADCRUMBS_VERSION_PATCH (1)
|
|
|
|
/// FidelityFX Breadcrumbs context count
|
|
///
|
|
/// Defines the number of internal effect contexts required by Breadcrumbs
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
#define FFX_BREADCRUMBS_CONTEXT_COUNT 1
|
|
|
|
/// The size of the context specified in 32bit values.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
#define FFX_BREADCRUMBS_CONTEXT_SIZE (128)
|
|
|
|
/// Maximal number of markers that can be written into single memory block.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
#define FFX_BREADCRUMBS_MAX_MARKERS_PER_BLOCK ((1U << 31) - 1U)
|
|
|
|
/// List of marker types to be used in X() macro.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
#define FFX_BREADCRUMBS_MARKER_LIST \
|
|
X(BEGIN_EVENT) \
|
|
X(BEGIN_QUERY) \
|
|
X(CLEAR_DEPTH_STENCIL) \
|
|
X(CLEAR_RENDER_TARGET) \
|
|
X(CLEAR_STATE) \
|
|
X(CLEAR_UNORDERED_ACCESS_FLOAT) \
|
|
X(CLEAR_UNORDERED_ACCESS_UINT) \
|
|
X(CLOSE) \
|
|
X(COPY_BUFFER_REGION) \
|
|
X(COPY_RESOURCE) \
|
|
X(COPY_TEXTURE_REGION) \
|
|
X(COPY_TILES) \
|
|
X(DISCARD_RESOURCE) \
|
|
X(DISPATCH) \
|
|
X(DRAW_INDEXED_INSTANCED) \
|
|
X(DRAW_INSTANCED) \
|
|
X(END_EVENT) \
|
|
X(END_QUERY) \
|
|
X(EXECUTE_BUNDLE) \
|
|
X(EXECUTE_INDIRECT) \
|
|
X(RESET) \
|
|
X(RESOLVE_QUERY_DATA) \
|
|
X(RESOLVE_SUBRESOURCE) \
|
|
X(RESOURCE_BARRIER) \
|
|
X(SET_COMPUTE_ROOT_SIGNATURE) \
|
|
X(SET_DESCRIPTORS_HEAP) \
|
|
X(SET_GRAPHICS_ROOT_SIGNATURE) \
|
|
X(SET_PIPELINE_STATE) \
|
|
X(SET_PREDICATION) \
|
|
X(ATOMIC_COPY_BUFFER_UINT) \
|
|
X(ATOMIC_COPY_BUFFER_UINT64) \
|
|
X(RESOLVE_SUBRESOURCE_REGION) \
|
|
X(SET_SAMPLE_POSITION) \
|
|
X(SET_VIEW_INSTANCE_MASK) \
|
|
X(WRITE_BUFFER_IMMEDIATE) \
|
|
X(SET_PROTECTED_RESOURCE_SESSION) \
|
|
X(BEGIN_RENDER_PASS) \
|
|
X(BUILD_RAY_TRACING_ACCELERATION_STRUCTURE) \
|
|
X(COPY_RAY_TRACING_ACCELERATION_STRUCTURE) \
|
|
X(DISPATCH_RAYS) \
|
|
X(EMIT_RAY_TRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO) \
|
|
X(END_RENDER_PASS) \
|
|
X(EXECUTE_META_COMMANDS) \
|
|
X(INITIALIZE_META_COMMANDS) \
|
|
X(SET_RAY_TRACING_STATE) \
|
|
X(SET_SHADING_RATE) \
|
|
X(SET_SHADING_RATE_IMAGE) \
|
|
X(BEGIN_CONDITIONAL_RENDERING_EXT) \
|
|
X(BEGIN_DEBUG_UTILS_LABEL_EXT) \
|
|
X(BEGIN_QUERY_INDEXED_EXT) \
|
|
X(BEGIN_RENDER_PASS_2) \
|
|
X(BEGIN_TRANSFORM_FEEDBACK_EXT) \
|
|
X(BIND_DESCRIPTOR_SETS) \
|
|
X(BIND_PIPELINES) \
|
|
X(BIND_SHADING_RATE_IMAGE_NV) \
|
|
X(BLIT_IMAGE) \
|
|
X(BUILD_ACCELERATION_STRUCTURE_NV) \
|
|
X(CLEAR_ATTACHMENTS) \
|
|
X(CLEAR_COLOR_IMAGE) \
|
|
X(CLEAR_DEPTH_STENCIL_IMAGE) \
|
|
X(COPY_ACCELERATION_STRUCTURE_NV) \
|
|
X(COPY_BUFFER) \
|
|
X(COPY_BUFFER_TO_IMAGE) \
|
|
X(COPY_IMAGE) \
|
|
X(COPY_IMAGE_TO_BUFFER) \
|
|
X(DEBUG_MARKER_BEGIN_EXT) \
|
|
X(DEBUG_MARKER_END_EXT) \
|
|
X(DEBUG_MARKER_INSERT_EXT) \
|
|
X(DISPATCH_BASE) \
|
|
X(DISPATCH_INDIRECT) \
|
|
X(DRAW) \
|
|
X(DRAW_INDEXED) \
|
|
X(DRAW_INDEXED_INDIRECT) \
|
|
X(DRAW_INDEXED_INDIRECT_COUNT) \
|
|
X(DRAW_INDIRECT) \
|
|
X(DRAW_INDIRECT_BYTE_COUNT_EXT) \
|
|
X(DRAW_INDIRECT_COUNT) \
|
|
X(DRAW_MESH_TASKS_INDIRECT_COUNT_NV) \
|
|
X(DRAW_MESH_TASKS_INDIRECT_NV) \
|
|
X(DRAW_MESH_TASKS_NV) \
|
|
X(END_CONDITIONAL_RENDERING_EXT) \
|
|
X(END_DEBUG_UTILS_LABEL_EXT) \
|
|
X(END_QUERY_INDEXED_EXT) \
|
|
X(END_RENDER_PASS_2) \
|
|
X(END_TRANSFORM_FEEDBACK_EXT) \
|
|
X(EXECUTE_COMMANDS) \
|
|
X(FILL_BUFFER) \
|
|
X(INSERT_DEBUG_UTILS_LABEL_EXT) \
|
|
X(NEXT_SUBPASS) \
|
|
X(NEXT_SUBPASS_2) \
|
|
X(PIPELINE_BARRIER) \
|
|
X(PROCESS_COMMANDS_NVX) \
|
|
X(RESERVE_SPACE_FOR_COMMANDS_NVX) \
|
|
X(RESET_EVENT) \
|
|
X(RESET_QUERY_POOL) \
|
|
X(RESOLVE_IMAGE) \
|
|
X(SET_CHECKPOINT_NV) \
|
|
X(SET_EVENT) \
|
|
X(SET_PERFORMANCE_MARKER_INTEL) \
|
|
X(SET_PERFORMANCE_OVERRIDE_INTEL) \
|
|
X(SET_PERFORMANCE_STREAM_MARKER_INTEL) \
|
|
X(SET_SAMPLE_LOCATIONS_EXT) \
|
|
X(SET_VIEWPORT_SHADING_RATE_PALETTE_NV) \
|
|
X(TRACE_RAYS_NV) \
|
|
X(UPDATE_BUFFER) \
|
|
X(WAIT_EVENTS) \
|
|
X(WRITE_ACCELERATION_STRUCTURES_PROPERTIES_NV) \
|
|
X(WRITE_BUFFER_MARKER_AMD) \
|
|
X(WRITE_BUFFER_MARKER_2_AMD) \
|
|
X(WRITE_TIMESTAMP)
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif // #if defined(__cplusplus)
|
|
|
|
/// An enumeration of bit flags used when creating a
|
|
/// <c><i>FfxBreadcrumbsContext</i></c>. See <c><i>FfxBreadcrumbsContextDescription</i></c>.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
typedef enum FfxBreadcrumbsInitializationFlagBits {
|
|
|
|
FFX_BREADCRUMBS_PRINT_FINISHED_LISTS = (1<<0), ///< A bit indicating that fully finished command lists will be expanded during status printing (otherwise their entries will be collapsed).
|
|
FFX_BREADCRUMBS_PRINT_NOT_STARTED_LISTS = (1<<1), ///< A bit indicating that command lists that haven't started execution on GPU yet will be expanded during status printing (otherwise their entries will be collapsed).
|
|
FFX_BREADCRUMBS_PRINT_FINISHED_NODES = (1<<3), ///< A bit indicating that nested markers which already have finished execution will be expanded during status printing (otherwise they will merged into top level marker).
|
|
FFX_BREADCRUMBS_PRINT_NOT_STARTED_NODES = (1<<4), ///< A bit indicating that nested markers which haven't started execution yet will be expanded during status printing (otherwise they will merged into top level marker).
|
|
FFX_BREADCRUMBS_PRINT_EXTENDED_DEVICE_INFO = (1<<5), ///< A bit indicating that additional info about active GPU will be printed into output status.
|
|
FFX_BREADCRUMBS_PRINT_SKIP_DEVICE_INFO = (1<<6), ///< A bit indicating that no info about active GPU will be printed into outpus status.
|
|
FFX_BREADCRUMBS_PRINT_SKIP_PIPELINE_INFO = (1<<7), ///< A bit indicating no info about pipelines used for commands recorded between markers will be printed into output status.
|
|
FFX_BREADCRUMBS_ENABLE_THREAD_SYNCHRONIZATION = (1<<8), ///< A bit indicating if internal synchronization should be applied (when using Breadcrumbs concurrently from multiple threads).
|
|
} FfxBreadcrumbsInitializationFlagBits;
|
|
|
|
/// Type of currently recorded marker, purely informational.
|
|
///
|
|
/// based on available methods of `ID3D12GraphicsCommandListX`, values of `D3D12_AUTO_BREADCRUMB_OP` and Vulkan `vkCmd*()` functions.
|
|
/// When using <c><i>FFX_BREADCRUMBS_MARKER_PASS</i></c> it is required to supply custom name for recording this type of marker. Otherwise it can
|
|
/// be left out as <c><i>NULL</i></c> and the Breadcrumbs will use default tag for this marker. It can be useful when recording multiple similar
|
|
/// commands in a row. Breadcrumbs will automatically add numbering to them so it's not needed to create your own numbered dynamic string.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
typedef enum FfxBreadcrumbsMarkerType {
|
|
|
|
FFX_BREADCRUMBS_MARKER_PASS, ///< Marker for grouping sets of commands. It is required to supply custom name for this type.
|
|
#define X(marker) FFX_BREADCRUMBS_MARKER_##marker,
|
|
FFX_BREADCRUMBS_MARKER_LIST
|
|
#undef X
|
|
} FfxBreadcrumbsMarkerType;
|
|
|
|
/// A structure encapsulating the parameters required to initialize FidelityFX Breadcrumbs.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
typedef struct FfxBreadcrumbsContextDescription {
|
|
|
|
uint32_t flags; ///< A collection of <c><i>FfxBreadcrumbsInitializationFlagBits</i></c>.
|
|
uint32_t frameHistoryLength; ///< Number of frames to records markers for. Have to be larger than 0.
|
|
uint32_t maxMarkersPerMemoryBlock; ///< Controls the number of markers saved in single memory block. Have to be in range of [1..<c><i>FFX_BREADCRUMBS_MAX_MARKERS_PER_BLOCK</i></c>].
|
|
uint32_t usedGpuQueuesCount; ///< Number of entries in <c><i>pUsedGpuQueues</i></c>. Have to be larger than 0.
|
|
uint32_t* pUsedGpuQueues; ///< Pointer to an array of unique indices representing GPU queues used for command lists used with AMD FidelityFX Breadcrumbs Library.
|
|
FfxAllocationCallbacks allocCallbacks; ///< Callbacks for managing memory in the library.
|
|
FfxInterface backendInterface; ///< A set of pointers to the backend implementation for FidelityFX SDK.
|
|
} FfxBreadcrumbsContextDescription;
|
|
|
|
|
|
/// Wrapper for custom Breadcrumbs name tags with indicator whether to perform copy on them.
|
|
///
|
|
/// When custom name is supplied <c><i>isNameExternallyOwned</i></c> field controls whether to perform copy on the string.
|
|
/// If string memory is managed by the application (ex. static string) the copy can be omitted to save memory.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
typedef struct FfxBreadcrumbsNameTag
|
|
{
|
|
const char* pName; ///< Custom name for the object. By default optional, can be left to <c><i>NULL</i></c>.
|
|
bool isNameExternallyOwned; ///< Controls if AMD FidelityFX Breadcrumbs Library should copy a custom name with backed-up memory.
|
|
} FfxBreadcrumbsNameTag;
|
|
|
|
/// Description for new command list to be enabled for writing AMD FidelityFX Breadcrumbs Library markers.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
typedef struct FfxBreadcrumbsCommandListDescription {
|
|
|
|
FfxCommandList commandList; ///< Handle to the command list that will be used with breadcrumbs operations.
|
|
uint32_t queueType; ///< Type of queue that list is used on.
|
|
FfxBreadcrumbsNameTag name; ///< Custom name for the command list.
|
|
FfxPipeline pipeline; ///< Optional pipeline state to associate with newly registered command list (can be set later).
|
|
uint16_t submissionIndex; ///< Information about submit number that command list is sent to GPU. Purely informational to help in analysing output later.
|
|
} FfxBreadcrumbsCommandListDescription;
|
|
|
|
/// Description for pipeline state that will be used to tag breadcrumbs markers.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
typedef struct FfxBreadcrumbsPipelineStateDescription
|
|
{
|
|
FfxPipeline pipeline; ///< Pipeline state that will be associated with set of Breadcrumbs markers.
|
|
FfxBreadcrumbsNameTag name; ///< Custom name for the pipeline state.
|
|
FfxBreadcrumbsNameTag vertexShader; ///< Name of used Vertex Shader. Part of classic geometry processing pipeline, cannot be set together with compute, ray tracing or new mesh processing pipeline.
|
|
FfxBreadcrumbsNameTag hullShader; ///< Name of used Hull Shader. Part of classic geometry processing pipeline, cannot be set together with compute, ray tracing or new mesh processing pipeline.
|
|
FfxBreadcrumbsNameTag domainShader; ///< Name of used Domain Shader. Part of classic geometry processing pipeline, cannot be set together with compute, ray tracing or new mesh processing pipeline.
|
|
FfxBreadcrumbsNameTag geometryShader; ///< Name of used Geometry Shader. Part of classic geometry processing pipeline, cannot be set together with compute, ray tracing or new mesh processing pipeline.
|
|
FfxBreadcrumbsNameTag meshShader; ///< Name of used Mesh Shader. Part of new mesh processing pipeline, cannot be set together with compute, ray tracing or classic geometry processing pipeline.
|
|
FfxBreadcrumbsNameTag amplificationShader; ///< Name of used Amplification Shader. Part of new mesh processing pipeline, cannot be set together with compute, ray tracing or classic geometry processing pipeline.
|
|
FfxBreadcrumbsNameTag pixelShader; ///< Name of used Pixel Shader. Cannot be set together with <c><i>computeShader</i></c> or <c><i>rayTracingShader</i></c>.
|
|
FfxBreadcrumbsNameTag computeShader; ///< Name of used Compute Shader. Have to be set exclusively to other shader names (indicates compute pipeline).
|
|
FfxBreadcrumbsNameTag rayTracingShader; ///< Name of used Ray Tracing Shader. Have to be set exclusively to other shader names (indicates ray tracing pipeline).
|
|
} FfxBreadcrumbsPipelineStateDescription;
|
|
|
|
/// Output with current AMD FidelityFX Breadcrumbs Library markers log for post-mortem analysis.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
typedef struct FfxBreadcrumbsMarkersStatus
|
|
{
|
|
size_t bufferSize; ///< Size of the status buffer.
|
|
char* pBuffer; ///< UTF-8 encoded buffer with log about markers execution. Have to be released with <c><i>FFX_FREE</i></c>.
|
|
} FfxBreadcrumbsMarkersStatus;
|
|
|
|
/// A structure encapsulating the FidelityFX Breadcrumbs context.
|
|
///
|
|
/// This sets up an object which contains all persistent internal data and
|
|
/// resources that are required by AMD FidelityFX Breadcrumbs Library.
|
|
///
|
|
/// The <c><i>FfxBreadcrumbsContext</i></c> object should have a lifetime matching
|
|
/// your use of Breadcrumbs. Before destroying the Breadcrumbs context care should be taken
|
|
/// to ensure the GPU is not accessing the resources created or used by Breadcrumbs.
|
|
/// It is therefore recommended that the GPU is idle before destroying the
|
|
/// Breadcrumbs context.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
typedef struct FfxBreadcrumbsContext
|
|
{
|
|
uint32_t data[FFX_BREADCRUMBS_CONTEXT_SIZE]; ///< An opaque set of <c>uint32_t</c> which contain the data for the context.
|
|
} FfxBreadcrumbsContext;
|
|
|
|
/// Create a FidelityFX Breadcrumbs context from the parameters
|
|
/// programmed to the <c><i>FfxBreadcrumbsContextDescription</i></c> structure.
|
|
///
|
|
/// The context structure is the main object used to interact with the Breadcrumbs
|
|
/// API, and is responsible for the management of the internal buffers used
|
|
/// by the Breadcrumbs algorithm. For each provided queue there will be created
|
|
/// a buffer that will hold contents of the saved markers, awaiting for retrieval
|
|
/// per call to <c><i>ffxBreadcrumbsPrintStatus()</i></c>
|
|
///
|
|
/// When choosing the number of frames to save markers for,
|
|
/// specified in the <c><i>frameHistoryLength</i></c> field of
|
|
/// <c><i>FfxBreadcrumbsContextDescription</i></c>, typically can be set to the number of
|
|
/// frames in flight in the application, but for longer history it can be increased.
|
|
///
|
|
/// Buffers for markers are allocated at fixed size, allowing for certain
|
|
/// number of markers to be saved in them. The size of this buffers are
|
|
/// determined by <c><i>maxMarkersPerMemoryBlock</i></c> field of
|
|
/// <c><i>FfxBreadcrumbsContextDescription</i></c>. When needed new ones are created but to avoid
|
|
/// multiple allocations you can estimate how many markers will be used in single frame.
|
|
///
|
|
/// The <c><i>FfxBreadcrumbsContext</i></c> should be destroyed when use of it is
|
|
/// completed, typically when an application is unloaded. To destroy the Breadcrumbs context
|
|
/// you should call <c><i>ffxBreadcrumbsContextDestroy</i></c>.
|
|
///
|
|
/// @param [out] pContext A pointer to a <c><i>FfxBreadcrumbsContext</i></c> structure to populate.
|
|
/// @param [in] pContextDescription A pointer to a <c><i>FfxBreadcrumbsContextDescription</i></c> structure.
|
|
///
|
|
/// @retval
|
|
/// FFX_OK The operation completed successfully.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_POINTER The operation failed because either <c><i>pContext</i></c> or <c><i>contextDescription</i></c> was <c><i>NULL</i></c>.
|
|
/// @retval
|
|
/// FFX_ERROR_INCOMPLETE_INTERFACE The operation failed because the <c><i>FfxBreadcrumbsContextDescription.backendInterface</i></c> was not fully specified.
|
|
/// @retval
|
|
/// FFX_ERROR_BACKEND_API_ERROR The operation failed because of an error returned from the backend.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
FFX_API FfxErrorCode ffxBreadcrumbsContextCreate(FfxBreadcrumbsContext* pContext, const FfxBreadcrumbsContextDescription* pContextDescription);
|
|
|
|
/// Destroy the FidelityFX Breadcrumbs context.
|
|
///
|
|
/// Should always be called from a single thread for same context.
|
|
///
|
|
/// @param [out] pContext A pointer to a <c><i>FfxBreadcrumbsContext</i></c> structure to destroy.
|
|
///
|
|
/// @retval
|
|
/// FFX_OK The operation completed successfully.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_POINTER The operation failed because either <c><i>pContext</i></c> was <c><i>NULL</i></c>.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
FFX_API FfxErrorCode ffxBreadcrumbsContextDestroy(FfxBreadcrumbsContext* pContext);
|
|
|
|
/// Begins new frame of execution for FidelityFX Breadcrumbs.
|
|
///
|
|
/// Should always be called from a single thread for same context.
|
|
///
|
|
/// @param [in] pContext A pointer to a <c><i>FfxBreadcrumbsContext</i></c> structure.
|
|
///
|
|
/// @retval
|
|
/// FFX_OK The operation completed successfully.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_POINTER The operation failed because either <c><i>pContext</i></c> was <c><i>NULL</i></c>.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
FFX_API FfxErrorCode ffxBreadcrumbsStartFrame(FfxBreadcrumbsContext* pContext);
|
|
|
|
/// Register new command list for current frame FidelityFX Breadcrumbs operations.
|
|
///
|
|
/// After call to <c><i>ffxBreadcrumbsStartFrame()</i></c> every previously used list has to be registered again.
|
|
///
|
|
/// @param [in] pContext A pointer to a <c><i>FfxBreadcrumbsContext</i></c> structure.
|
|
/// @param [in] pCommandListDescription A pointer to a <c><i>FfxBreadcrumbsCommandListDescription</i></c> structure.
|
|
///
|
|
/// @retval
|
|
/// FFX_OK The operation completed successfully.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_POINTER The operation failed because either <c><i>pContext</i></c> or <c><i>pCommandListDescription</i></c> was <c><i>NULL</i></c>.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_ARGUMENT The operation failed because given command list has been already registered.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
FFX_API FfxErrorCode ffxBreadcrumbsRegisterCommandList(FfxBreadcrumbsContext* pContext, const FfxBreadcrumbsCommandListDescription* pCommandListDescription);
|
|
|
|
/// Register new pipeline state to associate later with FidelityFX Breadcrumbs operations.
|
|
///
|
|
/// Information about pipeline is preserved across frames so only single call after creation of pipeline is needed.
|
|
///
|
|
/// @param [in] pContext A pointer to a <c><i>FfxBreadcrumbsContext</i></c> structure.
|
|
/// @param [in] pPipelineDescription A pointer to a <c><i>FfxBreadcrumbsPipelineStateDescription</i></c> structure.
|
|
///
|
|
/// @retval
|
|
/// FFX_OK The operation completed successfully.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_POINTER The operation failed because either <c><i>pContext</i></c> or <c><i>pPipelineDescription</i></c> was <c><i>NULL</i></c>.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_ARGUMENT The operation failed because given pipeline has been already registered or <c><i>pPipelineDescription</i></c> contains incorrect data.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
FFX_API FfxErrorCode ffxBreadcrumbsRegisterPipeline(FfxBreadcrumbsContext* pContext, const FfxBreadcrumbsPipelineStateDescription* pPipelineDescription);
|
|
|
|
/// Associate specific pipeline state with following FidelityFX Breadcrumbs markers.
|
|
///
|
|
/// When recorded commands use specific pipelines you can save this information, associating said pipelines
|
|
/// with recorded markers, so later on additional information can be displayed when using <c><i>ffxBreadcrumbsPrintStatus()</i></c>.
|
|
/// To reset currently used pipeline just pass <c><i>NULL</i></c> as <c><i>pipeline</i></c> param.
|
|
///
|
|
/// @param [in] pContext A pointer to a <c><i>FfxBreadcrumbsContext</i></c> structure.
|
|
/// @param [in] commandList Previously registered command list.
|
|
/// @param [in] pipeline Previously registered pipeline.
|
|
///
|
|
/// @retval
|
|
/// FFX_OK The operation completed successfully.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_POINTER The operation failed because either <c><i>context</i></c> or <c><i>commandList</i></c> was <c><i>NULL</i></c>.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_ARGUMENT The operation failed because given pipeline or command list has not been registered yet.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
FFX_API FfxErrorCode ffxBreadcrumbsSetPipeline(FfxBreadcrumbsContext* pContext, FfxCommandList commandList, FfxPipeline pipeline);
|
|
|
|
/// Begin new FidelityFX Breadcrumbs marker section.
|
|
///
|
|
/// New section has to be ended with <c><i>ffxBreadcrumbsEndMarker()</i></c>
|
|
/// but multiple <c><i>ffxBreadcrumbsBeginMarker()</i></c> nesting calls are possible.
|
|
///
|
|
/// @param [in] pContext A pointer to a <c><i>FfxBreadcrumbsContext</i></c> structure.
|
|
/// @param [in] commandList Previously registered command list.
|
|
/// @param [in] type Type of the marker section.
|
|
/// @param [in] pName Custom name for the marker section. Have to contain correct string if <c><i>type</i></c> is <c><i>FFX_BREADCRUMBS_MARKER_PASS()</i></c>.
|
|
///
|
|
/// @retval
|
|
/// FFX_OK The operation completed successfully.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_POINTER The operation failed because either <c><i>pContext</i></c> or <c><i>pName</i></c> was <c><i>NULL</i></c>.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_ARGUMENT The operation failed because given command list has not been registered yet or <c><i>pName</i></c> doesn't contain correct string.
|
|
/// @retval
|
|
/// FFX_ERROR_BACKEND_API_ERROR The operation failed because of an error returned from the backend.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
FFX_API FfxErrorCode ffxBreadcrumbsBeginMarker(FfxBreadcrumbsContext* pContext, FfxCommandList commandList, FfxBreadcrumbsMarkerType type, const FfxBreadcrumbsNameTag* pName);
|
|
|
|
/// End FidelityFX Breadcrumbs marker section.
|
|
///
|
|
/// Has to be preceeded by <c><i>ffxBreadcrumbsBeginMarker()</i></c>.
|
|
///
|
|
/// @param [in] pContext A pointer to a <c><i>FfxBreadcrumbsContext</i></c> structure.
|
|
/// @param [in] commandList Previously registered command list.
|
|
///
|
|
/// @retval
|
|
/// FFX_OK The operation completed successfully.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_POINTER The operation failed because <c><i>pContext</i></c> was <c><i>NULL</i></c>.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_ARGUMENT The operation failed because given command list has not been registered yet.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
FFX_API FfxErrorCode ffxBreadcrumbsEndMarker(FfxBreadcrumbsContext* pContext, FfxCommandList commandList);
|
|
|
|
/// Gather information about current FidelityFX Breadcrumbs markers status.
|
|
///
|
|
/// After receiving device lost error on GPU you can use this method to print post-mortem log of markers execution
|
|
/// to determine which commands in which frame were in flight during the crash.
|
|
/// Should always be called from a single thread.
|
|
///
|
|
/// @param [in] pContext A pointer to a <c><i>FfxBreadcrumbsContext</i></c> structure.
|
|
/// @param [out] pMarkersStatus Buffer with post-mortem log of Breadcrumbs markers.
|
|
///
|
|
/// @retval
|
|
/// FFX_OK The operation completed successfully.
|
|
/// @retval
|
|
/// FFX_ERROR_INVALID_POINTER The operation failed because either <c><i>pContext</i></c> or <c><i>pMarkersStatus</i></c> was <c><i>NULL</i></c>.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
FFX_API FfxErrorCode ffxBreadcrumbsPrintStatus(FfxBreadcrumbsContext* pContext, FfxBreadcrumbsMarkersStatus* pMarkersStatus);
|
|
|
|
/// Queries the effect version number.
|
|
///
|
|
/// @returns
|
|
/// The SDK version the effect was built with.
|
|
///
|
|
/// @ingroup ffxBreadcrumbs
|
|
FFX_API FfxVersionNumber ffxBreadcrumbsGetEffectVersion();
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif // #if defined(__cplusplus)
|