Files
Project-M/Packages/com.rukhanka.animation/Rukhanka.Runtime/Common/Shaders/Debug.hlsl
T
2026-05-31 14:27:52 -07:00

50 lines
1.8 KiB
HLSL

#ifndef DEBUG_HLSL_
#define DEBUG_HLSL_
///////////////////////////////////////////////////////////////////////////////////////////
#include "Packages/com.rukhanka.animation/Rukhanka.Runtime/Common/Shaders/DebugMarkers.cs.hlsl"
///////////////////////////////////////////////////////////////////////////////////////////
#ifdef RUKHANKA_SHADER_DEBUG
#define CHECK_MIN_MAX_RANGE(debugMarker, v, minValue, maxValue) if ((v) < (minValue) || (v) >= (maxValue)) InterlockedAdd(debugLoggerCB[debugMarker], 1);
// Vulkan reports size in elements (ints) rather then bytes as in D3D11/12
#ifdef SHADER_API_VULKAN
#define CHECK_RAW_BUFFER_OUT_OF_BOUNDS(debugMarker, index, count, buffer) \
{ \
uint bufferSize = 0; \
buffer.GetDimensions(bufferSize); \
bufferSize *= 4; \
if ((int)(index) < 0 || (int)((index) + (count)) > (int)bufferSize) InterlockedAdd(debugLoggerCB[debugMarker], 1); \
}
#else
#define CHECK_RAW_BUFFER_OUT_OF_BOUNDS(debugMarker, index, count, buffer) \
{ \
uint bufferSize = 0; \
buffer.GetDimensions(bufferSize); \
if ((int)(index) < 0 || (int)((index) + (count)) > (int)bufferSize) InterlockedAdd(debugLoggerCB[debugMarker], 1); \
}
#endif
#define CHECK_STRUCTURED_BUFFER_OUT_OF_BOUNDS(debugMarker, index, buffer) \
{ \
uint numStructs = 0; \
uint stride = 0; \
buffer.GetDimensions(numStructs, stride); \
if ((int)(index) < 0 || (int)(index) >= (int)numStructs) InterlockedAdd(debugLoggerCB[debugMarker], 1); \
}
RWStructuredBuffer<uint> debugLoggerCB;
#else
#define CHECK_MIN_MAX_RANGE(debugMarker, v, minValue, maxValue)
#define CHECK_RAW_BUFFER_OUT_OF_BOUNDS(debugMarker, index, count, buffer)
#define CHECK_STRUCTURED_BUFFER_OUT_OF_BOUNDS(debugMarker, index, buffer)
#endif
///////////////////////////////////////////////////////////////////////////////////////////
#endif