summaryrefslogtreecommitdiffstats
path: root/thirdparty/amd-fsr2/ffx_assert.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/amd-fsr2/ffx_assert.h')
-rw-r--r--thirdparty/amd-fsr2/ffx_assert.h132
1 files changed, 132 insertions, 0 deletions
diff --git a/thirdparty/amd-fsr2/ffx_assert.h b/thirdparty/amd-fsr2/ffx_assert.h
new file mode 100644
index 0000000000..ae32d2a733
--- /dev/null
+++ b/thirdparty/amd-fsr2/ffx_assert.h
@@ -0,0 +1,132 @@
+// This file is part of the FidelityFX SDK.
+//
+// Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All rights reserved.
+//
+// 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 "ffx_types.h"
+#include "ffx_util.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // #ifdef __cplusplus
+
+#ifdef _DEBUG
+#ifdef _WIN32
+
+#ifdef DISABLE_FFX_DEBUG_BREAK
+#define FFX_DEBUG_BREAK \
+ { \
+ }
+#else
+/// Macro to force the debugger to break at this point in the code.
+#define FFX_DEBUG_BREAK __debugbreak();
+#endif
+#else
+#define FFX_DEBUG_BREAK \
+ { \
+ }
+#endif
+#else
+// don't allow debug break in release builds.
+#define FFX_DEBUG_BREAK
+#endif
+
+/// A typedef for the callback function for assert printing.
+///
+/// This can be used to re-route printing of assert messages from the FFX backend
+/// to another destination. For example instead of the default behaviour of printing
+/// the assert messages to the debugger's TTY the message can be re-routed to a
+/// MessageBox in a GUI application.
+///
+/// @param [in] message The message generated by the assert.
+///
+typedef void (*FfxAssertCallback)(const char* message);
+
+/// Function to report an assert.
+///
+/// @param [in] file The name of the file as a string.
+/// @param [in] line The index of the line in the file.
+/// @param [in] condition The boolean condition that was tested.
+/// @param [in] msg The optional message to print.
+///
+/// @returns
+/// Always returns true.
+///
+FFX_API bool ffxAssertReport(const char* file, int32_t line, const char* condition, const char* msg);
+
+/// Provides the ability to set a callback for assert messages.
+///
+/// @param [in] callback The callback function that will receive assert messages.
+///
+FFX_API void ffxAssertSetPrintingCallback(FfxAssertCallback callback);
+
+#ifdef _DEBUG
+/// Standard assert macro.
+#define FFX_ASSERT(condition) \
+ do \
+ { \
+ if (!(condition) && ffxAssertReport(__FILE__, __LINE__, #condition, NULL)) \
+ FFX_DEBUG_BREAK \
+ } while (0)
+
+/// Assert macro with message.
+#define FFX_ASSERT_MESSAGE(condition, msg) \
+ do \
+ { \
+ if (!(condition) && ffxAssertReport(__FILE__, __LINE__, #condition, msg)) \
+ FFX_DEBUG_BREAK \
+ } while (0)
+
+/// Assert macro that always fails.
+#define FFX_ASSERT_FAIL(message) \
+ do \
+ { \
+ ffxAssertReport(__FILE__, __LINE__, NULL, message); \
+ FFX_DEBUG_BREAK \
+ } while (0)
+#else
+// asserts disabled
+#define FFX_ASSERT(condition) \
+ do \
+ { \
+ FFX_UNUSED(condition); \
+ } while (0)
+
+#define FFX_ASSERT_MESSAGE(condition, message) \
+ do \
+ { \
+ FFX_UNUSED(condition); \
+ FFX_UNUSED(message); \
+ } while (0)
+
+#define FFX_ASSERT_FAIL(message) \
+ do \
+ { \
+ FFX_UNUSED(message); \
+ } while (0)
+#endif // #if _DEBUG
+
+/// Simple static assert.
+#define FFX_STATIC_ASSERT(condition) static_assert(condition, #condition)
+
+#ifdef __cplusplus
+}
+#endif // #ifdef __cplusplus