using System;
using Unity.Mathematics;
namespace UnityEngine.Rendering
{
    [GenerateHLSL]
    class APVDefinitions
    {
        public static int probeIndexChunkSize = ProbeBrickIndex.kIndexChunkSize;
        public const float probeValidityThreshold = 0.05f;
        public static int probeMaxRegionCount = 4;
        public static Color32[] layerMaskColors = new Color32[] {
            new Color32(230, 159, 0, 255),
            new Color32(0, 158, 115, 255),
            new Color32(0, 114, 178, 255),
            new Color32(204, 121, 167, 255),
        };
        public static Color debugEmptyColor = new Color(0.388f, 0.812f, 0.804f, 1.0f);
    }
    /// 
    /// Defines the constant buffer register that will be used as binding point for the Adaptive Probe Volumes constant buffer.
    /// 
    public enum APVConstantBufferRegister
    {
        /// 
        /// Global register
        /// 
        GlobalRegister = 6
    }
    /// 
    /// Defines the method used to reduce leaking.
    /// 
    [GenerateHLSL]
    public enum APVLeakReductionMode
    {
        /// 
        /// Nothing is done to prevent leaking. Cheapest option in terms of cost of sampling.
        /// 
        None = 0,
        /// 
        /// The uvw used to sample APV data are warped to try to have invalid probe not contributing to lighting.
        /// This samples APV a single time so it's a cheap option but will only work in the simplest cases.
        /// 
        Performance = 1,
        /// 
        /// This option samples APV between 1 and 3 times to provide the smoothest result without introducing artifacts.
        /// This is as expensive as Performance mode in the simplest cases, and is better and more expensive in the most complex cases.
        /// 
        Quality = 2,
        /// 
        /// Obsolete, kept for migration.
        /// 
        [Obsolete("Performance")]
        ValidityBased = Performance,
        /// 
        /// Obsolete, kept for migration.
        /// 
        [Obsolete("Quality")]
        ValidityAndNormalBased = Quality,
    }
    [GenerateHLSL(needAccessors = false, generateCBuffer = true, constantRegister = (int)APVConstantBufferRegister.GlobalRegister)]
    internal unsafe struct ShaderVariablesProbeVolumes
    {
        public Vector4 _Offset_LayerCount;
        public Vector4 _MinLoadedCellInEntries_IndirectionEntryDim;
        public Vector4 _MaxLoadedCellInEntries_RcpIndirectionEntryDim;
        public Vector4 _PoolDim_MinBrickSize;
        public Vector4 _RcpPoolDim_XY;
        public Vector4 _MinEntryPos_Noise;
        public uint4 _EntryCount_X_XY_LeakReduction;
        public Vector4 _Biases_NormalizationClamp;
        public Vector4 _FrameIndex_Weights;
        public uint4 _ProbeVolumeLayerMask;
    }
}