Custom Shader is Pink Only Samsung

I’ve written a custom shader for controlling color and offset variables, shader works fine on Desktop, and Android Devices except Samsung.

ZTE Devices, LG Devices, General Mobile Devices are fine.

Tested on Samsung S3, S3mini, Note 2 and Background is completely pink.

Shader is like this.
Shader “Sample/ColorShader”
{
Properties
{
_MainTex (“Texture”, 2D) = “white” {}
_Color (“Tint Color”, Color) = (1, 1, 1, 1)
}
SubShader
{
Tags { “Queue” = “Transparent” “RenderType” = “Opaque” }
Blend SrcAlpha OneMinusSrcAlpha

		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			
			#include "UnityCG.cginc"

			struct input
			{
				float4 pos : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct output
			{
				float4 pos : SV_POSITION;
				float2 uv : TEXCOORD0;
			};

			uniform sampler2D _MainTex;
			uniform float4 _MainTex_ST;
			uniform fixed4 _Color;
			
			output vert (input i)
			{
				output o;

				o.pos = mul(UNITY_MATRIX_MVP, i.pos);
				o.uv = TRANSFORM_TEX(i.uv, _MainTex); 

				return o;
			}
			
			fixed4 frag (output i) : COLOR
			{
				fixed4 col = tex2D(_MainTex, i.uv);

				col *= _Color;

				return col;
			}
			ENDCG
		}
	}
}

Any Suggestions ?

Those Samsungs use Mali chips, which are notorious for their incompatibility… commonly caused by precision issues in the fragment program, but I don’t see any particular issues in your example that would cause that. Did you take a look at the logcat output?

In the absence of any further information from logcat, my only two suggestions that you might want to try are:

  • Use UNITY_INITIALIZE_OUTPUT to fully initialise the value of your output o structure in the vert shader.
  • Try renaming your variables so that they do not begin with an underscore, as mentioned here.

That shader doesn’t support That device’s render capabilities

to fix this write a subshader esspecially for that device’s render capabilities and tada it works