forked from Misaki/GhostEngine
Introduces a new Ghost.Shader.Concept project implementing a modern, data-oriented material and shader system with: - Global/local keyword bitsets (fast O(1) ops, 64 bytes) - Multi-pass shader program and per-pass render state overrides - Thread-safe, 16-byte aligned material property blocks - Material pooling to reduce GC pressure - Batch renderer for efficient PSO grouping and async variant warmup - Full demo (Program.cs) and extensive documentation (ARCHITECTURE.md, README.md, PROJECT_SUMMARY.md) - Minor integration: new enums, doc updates, and keyword handling in existing code No breaking changes to the existing engine; all new code is isolated. This serves as a reference implementation for high-performance, extensible material/shader architectures.
56 lines
1.2 KiB
C#
56 lines
1.2 KiB
C#
using Misaki.HighPerformance.Mathematics;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Ghost.Graphics.Core;
|
|
|
|
/// <summary>
|
|
/// The layout of the root signature is:
|
|
/// <list space="bullet">
|
|
/// <item>
|
|
/// Global buffer (b0)
|
|
/// </item>
|
|
/// <item>
|
|
/// Per-view buffer (b1)
|
|
/// </item>
|
|
/// <item>
|
|
/// Per-object buffer (b2)
|
|
/// </item>
|
|
/// <item>
|
|
/// Per-material buffer (b3)
|
|
/// </item>
|
|
/// <item>
|
|
/// Descriptor table for bindless textures (t0)
|
|
/// </item>
|
|
/// <item>
|
|
/// Descriptor table for bindless samplers (s0)
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
public static class RootSignatureLayout
|
|
{
|
|
public const int GLOBAL_BUFFER_SLOT = 0;
|
|
public const int PER_VIEW_BUFFER_SLOT = 1;
|
|
public const int PER_OBJECT_BUFFER_SLOT = 2;
|
|
public const int PER_MATERIAL_BUFFER_SLOT = 3;
|
|
|
|
public const int TEXTURE_HEAP_SLOT = 0;
|
|
public const int SAMPLER_HEAP_SLOT = 0;
|
|
|
|
public const int ROOT_PARAMETER_COUNT =
|
|
#if USE_TRADITIONAL_BINDLESS
|
|
6
|
|
#else
|
|
4
|
|
#endif
|
|
;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
|
public struct PerObjectData
|
|
{
|
|
public float4x4 localToWorld;
|
|
public float3 worldBoundsMin;
|
|
public uint vertexBuffer;
|
|
public float3 worldBoundsMax;
|
|
public uint indexBuffer;
|
|
}; |