#ifndef INPUT_LUXLWRP_BASE_INCLUDED
#define INPUT_LUXLWRP_BASE_INCLUDED



    #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
//  defines a bunch of helper functions (like lerpwhiteto)
    #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"  
//  defines SurfaceData, textures and the functions Alpha, SampleAlbedoAlpha, SampleNormal, SampleEmission
    #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceInput.hlsl"
//  defines e.g. "DECLARE_LIGHTMAP_OR_SH"
    #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
 
    #include "../Includes/Lux URP Tree Creator Lighting.hlsl"


    #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
    #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl"

//  Material Inputs
    CBUFFER_START(UnityPerMaterial)

        half4   _Color;
        half    _Smoothness;
        half    _Metallic;
        half4   _SpecColor;

        half    _Cutoff;
        float4  _MainTex_ST;

    //  needed by meta pass
        float4  _BaseMap_ST;
        
        float4  _BumpMap_ST;

        half4   _TranslucencyColor;
        half    _TranslucencyViewDependency;

        half    _ShadowStrength;

        #if defined (DUMMYSHADER)
            half    _Shininess;
        #endif

    CBUFFER_END

//  These can't be per material...

    UNITY_INSTANCING_BUFFER_START(Props)
        UNITY_DEFINE_INSTANCED_PROP(half, _SquashAmount)
        UNITY_DEFINE_INSTANCED_PROP(half4, _TreeInstanceColor)
        UNITY_DEFINE_INSTANCED_PROP(half4, _TreeInstanceScale)
        UNITY_DEFINE_INSTANCED_PROP(half4, _SquashPlaneNormal)
        UNITY_DEFINE_INSTANCED_PROP(half4, _Wind)
    UNITY_INSTANCING_BUFFER_END(Props)
    

    TEXTURE2D (_MainTex); SAMPLER(sampler_MainTex);
    TEXTURE2D (_BumpSpecMap ); SAMPLER(sampler_BumpSpecMap);
    TEXTURE2D (_TranslucencyMap); SAMPLER(sampler_TranslucencyMap);

    #if defined (DUMMYSHADER)
        //TEXTURE2D (_BumpMap); SAMPLER(sampler_BumpMap); // already defined
        TEXTURE2D (_GlossMap); SAMPLER(sampler_GlossMap);
        // TEXTURE2D (_TranslucencyMap); SAMPLER(sampler_TranslucencyMap); // already defined
    #endif

//  Additional textures

//  Global Inputs

//  Structs
    struct VertexInput
    {
        float3 positionOS                   : POSITION;
        float3 normalOS                     : NORMAL;
        float4 tangentOS                    : TANGENT;
        float2 texcoord                     : TEXCOORD0;
        float2 texcoord1                    : TEXCOORD1;
        half4 color                         : COLOR;
        UNITY_VERTEX_INPUT_INSTANCE_ID
    };
    
    struct VertexOutput
    {
        float4 positionCS                   : SV_POSITION;

        #if defined(_MASKMAP)
            float4 uv                       : TEXCOORD0;
        #else
            float2 uv                       : TEXCOORD0;
        #endif

        #if !defined(UNITY_PASS_SHADOWCASTER) && !defined(DEPTHONLYPASS)
            DECLARE_LIGHTMAP_OR_SH(lightmapUV, vertexSH, 1);
            #if defined(REQUIRES_WORLD_SPACE_POS_INTERPOLATOR)
                float3 positionWS           : TEXCOORD2;
            #endif
                
            half4 normalWS                  : TEXCOORD3;
            half4 tangentWS                 : TEXCOORD4;
            half4 bitangentWS               : TEXCOORD5;

            half4 fogFactorAndVertexLight   : TEXCOORD6;
            
            #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
                float4 shadowCoord          : TEXCOORD7;
            #endif
        #endif

        #if defined(BILLBOARD_FACE_CAMERA_POS) && defined(_ENABLEDITHERING)
            float4 screenPos                : TEXCOORD8;
        #endif

        half4 color                         : COLOR;

        UNITY_VERTEX_INPUT_INSTANCE_ID
        UNITY_VERTEX_OUTPUT_STEREO
    };

    struct SurfaceDescription
    {
        half3 albedo;
        half alpha;
        half3 normalTS;
        half3 specular;
        half gloss;
        half occlusion;
        half translucency;
    };

#endif