75 lines
2.4 KiB
C#
75 lines
2.4 KiB
C#
#if RUKHANKA_SHADER_DEBUG
|
|
|
|
using System;
|
|
using Unity.Entities;
|
|
using UnityEngine;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
namespace Rukhanka
|
|
{
|
|
|
|
[WorldSystemFilter(WorldSystemFilterFlags.Default | WorldSystemFilterFlags.Editor)]
|
|
[UpdateInGroup(typeof(RukhankaDeformationSystemGroup), OrderLast = true)]
|
|
public partial class ShaderDebugAndValidationSystem: SystemBase
|
|
{
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
protected override void OnUpdate()
|
|
{
|
|
for (var i = 0; i < ShaderDebugAndValidationInitSystem.debugLoggerReadbackData.Length; ++i)
|
|
{
|
|
var errorsCount = ShaderDebugAndValidationInitSystem.debugLoggerReadbackData[i];
|
|
if (errorsCount == 0)
|
|
continue;
|
|
|
|
var dm = (RukhankaDebugMarkers)i;
|
|
Debug.LogException(new Exception($"Shader Validation: '{dm.ToString()}' marker error count '{errorsCount}'"));
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------//
|
|
|
|
[WorldSystemFilter(WorldSystemFilterFlags.Default | WorldSystemFilterFlags.Editor)]
|
|
[UpdateInGroup(typeof(InitializationSystemGroup), OrderFirst = true)]
|
|
internal partial class ShaderDebugAndValidationInitSystem: SystemBase
|
|
{
|
|
public static GraphicsBuffer debugLoggerCB;
|
|
public static int[] debugLoggerReadbackData;
|
|
public static int[] debugLoggerZeroData;
|
|
static readonly int ShaderID_debugLoggerCB = Shader.PropertyToID("debugLoggerCB");
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
protected override void OnCreate()
|
|
{
|
|
var totalMarkers = (int)RukhankaDebugMarkers.Total;
|
|
debugLoggerReadbackData = new int[totalMarkers];
|
|
debugLoggerZeroData = new int[totalMarkers];
|
|
debugLoggerCB = new GraphicsBuffer(GraphicsBuffer.Target.Structured, GraphicsBuffer.UsageFlags.None, totalMarkers, sizeof(int));
|
|
debugLoggerCB.SetData(debugLoggerZeroData);
|
|
Shader.SetGlobalBuffer(ShaderID_debugLoggerCB, debugLoggerCB);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
protected override void OnUpdate()
|
|
{
|
|
Shader.SetGlobalBuffer(ShaderID_debugLoggerCB, debugLoggerCB);
|
|
debugLoggerCB.GetData(debugLoggerReadbackData);
|
|
debugLoggerCB.SetData(debugLoggerZeroData);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
protected override void OnDestroy()
|
|
{
|
|
if (debugLoggerCB != null)
|
|
debugLoggerCB.Dispose();
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif |