Fog disabled on #pragma target 3.0

I need to use ‘#pragma target 3.0’ but when I do so the fog is disabled.

I have looked everywhere for explanation but have come up empty… Below is my code.

Any help would be appreciated.

Shader "UberSplat" 
{
	Properties 
	{
		_Color ("Main Color", Color) = (1,1,1,1)
		_MainTex ("Texture 1 (RGB)", 2D) = "white" {}
		_MainTex2 ("Texture 2 (RGB)", 2D) = "white" {}
		_MainTex3 ("Texture 3 (RGB)", 2D) = "white" {}
		_MainTex4 ("Texture 4 (RGB)", 2D) = "white" {}
		_MainTex5 ("Texture 5 (RGB)", 2D) = "white" {}
		_MainTex6 ("Texture 6 (RGB)", 2D) = "white" {}
		
		_LightMap ("LightMap (RGB)", 2D) = "white" {}
		_LightMapAlpha ("LightMapAlpha", Float) = 0.5
		_CloudShadowsAlpha ("CloudShadowsAlpha", Float) = 0.75
		_Splat1 ("Splat Map 1-3 (RGBA)", 2D) = "black" {}
		_Splat2 ("Splat Map 4-6(RGBA)", 2D) = "black" {}
	}
	Category 
	{
		Tags { "RenderType"="Opaque" } 
		
		Blend AppSrcAdd AppDstAdd
		
		Cull Back
		Fog { Color [_AddFog] }
		
		Subshader 
		{
			//Blend AppSrcAdd AppDstAdd
			Pass 
			{
				Name "PPL"
				Tags { "LightMode" = "Pixel" }
				Material { Diffuse [_Color] }
				Lighting On
				Fog { Mode Exp2 }

				CGPROGRAM
				#pragma target 3.0
				#pragma vertex vert
				#pragma fragment frag
				#pragma multi_compile_builtin
				#pragma fragmentoption ARB_fog_exp2
				#pragma fragmentoption ARB_precision_hint_fastest
				#include "UnityCG.cginc"
				#include "AutoLight.cginc"
				 
				uniform sampler2D _MainTex;
				uniform sampler2D _MainTex2;
				uniform sampler2D _MainTex3;
				uniform sampler2D _MainTex4;
				uniform sampler2D _MainTex5;
				uniform sampler2D _MainTex6;
				uniform sampler2D _LightMap;
				uniform sampler2D _Splat1;
				uniform sampler2D _Splat2;
				uniform float _LightMapAlpha;
				uniform float _CloudShadowsAlpha;
				 
				 struct a2v
				{
					float4 vertex : POSITION;
					float3 normal : NORMAL;
					float4 texcoord : TEXCOORD0;
				};
				
				struct v2f 
				{
					V2F_POS_FOG;
					LIGHTING_COORDS
					float4 uv[5];
					float4 diffuse : COLOR0;
					float3 lightDirection;
					float3 normal;
				};
							
				v2f vert (a2v v)
				{			
					v2f o;
					//o.pos = mul(glstate.matrix.mvp, v.vertex);
					//o.fog = o.pos.z;
					PositionFog( v.vertex, o.pos, o.fog ); 
					
					o.normal = v.normal;
					
					o.uv[0].xy = TRANSFORM_UV(0);
					o.uv[0].zw = TRANSFORM_UV(1);
					o.uv[1].xy = TRANSFORM_UV(2);
					o.uv[1].zw = TRANSFORM_UV(3);
					o.uv[2].xy = TRANSFORM_UV(4);
					o.uv[2].zw = TRANSFORM_UV(5);
					o.uv[3].x = clamp((v.vertex.x + 988.f) / 2000.f, 0.f, 1.f); // POSITION
					o.uv[3].y = clamp((v.vertex.y - 1059.f) / -2000.f, 0.f, 1.f); // POSITION
					o.uv[3].z = o.uv[3].x;
					o.uv[3].w = clamp((v.vertex.y - 1059.f) / -2000.f, 0.f, 1.f) + _Time[0];
					
					// compute a simple diffuse per-vertex
					//float3 ldir = normalize( ObjSpaceLightDir( v.vertex ) );
					//float diffuse = dot( v.normal, ldir );
					//o.diffuse = diffuse * _ModelLightColor0;
					
					o.lightDirection = normalize( ObjSpaceLightDir( v.vertex ) );

					// compute&pass data for attenuation/shadows
					TRANSFER_VERTEX_TO_FRAGMENT(o);
					
					return o;
				};
				 
				half4 frag( v2f i ) : COLOR
				{				
					half4 tex1 = tex2D( _MainTex, i.uv[0].xy );
					half4 tex2 = tex2D( _MainTex2, i.uv[0].zw );
					half4 tex3 = tex2D( _MainTex3, i.uv[1].xy );
					half4 tex4 = tex2D( _MainTex4, i.uv[1].zw );
					half4 tex5 = tex2D( _MainTex5, i.uv[2].xy );
					half4 tex6 = tex2D( _MainTex6, i.uv[2].zw );
					
					half4 splat1 = tex2D( _Splat1, i.uv[3].xy); 
					half4 splat2 = tex2D( _Splat2, i.uv[3].xy); 
					
					float lightMap = tex2D( _LightMap, i.uv[3].xy).r;
					float cloudShadows = tex2D( _LightMap, i.uv[3].zw).g;
					
					// Mix Textures from Splats
					half4 color;
					color = 	tex1 * splat1.r + 
								tex2 * splat1.g + 
								tex3 * splat1.b + 
								tex4 * splat2.r + 
								tex5 * splat2.g +
								tex6 * splat2.b;
								
					// Add Lightmaps
					
					//float lm1 = lerp(1, lightMap, _LightMapAlpha);
					//float lm2 = lerp(1, cloudShadows, _CloudShadowsAlpha);
					
					//color.rgb *= min(lm1, lm2);
												
					// Add Diffuse Lighting					
					return DiffuseLight( i.lightDirection, normalize(i.normal), color, LIGHT_ATTENUATION(i) );
			
				}
				ENDCG
			}
		}
	}
    // ------------------------------------------------------------------
	Fallback "Diffuse", 1
}

Ah… Fog is automatically turned off in Pixel Shader 3.

Yeah. In SM3.0 (on D3D only!) you have to implement fog yourself.