float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target
/*
#ifdef
, out float depth : SV_DEPTH
#endif
*/
{
	UNITY_SETUP_INSTANCE_ID(i);
	UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);

	#K#FRAGMENT_META_DECLARATIONS

	#K#FRAGMENT_META_INIT_EARLY
	#K#FRAGMENT_META_INIT
	#K#FRAGMENT_META_INIT_LATE

	#K#FRAGMENT_META_COLOR_EARLY
	#K#FRAGMENT_META_COLOR
	#K#FRAGMENT_META_COLOR_LATE

	UNITY_BRANCH
	if (_AlphaPremultiply)
	{
		poiFragData.baseColor *= saturate(poiFragData.alpha);
	}
	poiFragData.finalColor = poiFragData.baseColor;

	#K#FRAGMENT_META_LIGHTING_EARLY
	#K#FRAGMENT_META_LIGHTING
	#K#FRAGMENT_META_LIGHTING_LATE

	#K#FRAGMENT_META_EMISSION_EARLY
	#K#FRAGMENT_META_EMISSION
	#K#FRAGMENT_META_EMISSION_LATE

	//UNITY_BRANCH
	if (_IgnoreFog == 0)
	{
		UNITY_APPLY_FOG(i.fogCoord, poiFragData.finalColor);
	}

	#K#FRAGMENT_META_RETURN

	if (_Mode == POI_MODE_OPAQUE)
	{
		poiFragData.alpha = 1;
	}

	clip(poiFragData.alpha - _Cutoff);
	
	#ifdef POI_PASS_META
		UnityMetaInput meta;
		UNITY_INITIALIZE_OUTPUT(UnityMetaInput, meta);
		meta.Emission = poiFragData.emission * _GIEmissionMultiplier * poiMods.globalEmission;
		meta.Albedo = saturate(poiFragData.finalColor.rgb);
		meta.SpecularColor = poiLight.finalLightAdd;
		return UnityMetaFragment(meta);
	#endif

	return float4(poiFragData.finalColor + poiFragData.emission * poiMods.globalEmission, poiFragData.alpha) + POI_SAFE_RGB0;
}