Forum Discussion

🚨 This forum is archived and read-only. To submit a forum post, please visit our new Developer Forum. 🚨
saeid's avatar
saeid
Honored Guest
10 years ago

Shader compile error in Unity 5.2.x and 5.3.x

Hi,
the following shader used to work on Unity 5.0.2f1, but it's not working on Unity 5.2.X or 5.3.X.

Shader "VideoShaderImageExternal" {
Properties {
_MainTex ("Texture Image", 2D) = "white" {}
_Color ("Color", Color) = (1.0, 1.0, 1.0, 1.0)
_Scale ("Scale", Range (0, 1) ) = 1.0
}
SubShader {
Pass {
GLSLPROGRAM

#extension GL_OES_EGL_image_external : require
precision highp float;
uniform samplerExternalOES _MainTex;
varying highp vec4 texCoords;
uniform lowp vec4 _Color;
uniform float _Scale;

#ifdef VERTEX

void main()
{
texCoords = gl_MultiTexCoord0; // Unity has predefined constants for vertex attributes
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

#endif

#ifdef FRAGMENT

void main()
{
vec2 a_texCoords = vec2(texCoords);
float newT = 1.0 - a_texCoords.t;
newT = _Scale * newT;
vec4 texture = texture2D(_MainTex, vec2(a_texCoords.s, newT));
gl_FragColor = vec4(texture.rgb * (_Color.rgb * texture.a + (1. - texture.a)), 1);
}

#endif

ENDGLSL
}
}
}


the error for Unity 5.2.x is
0:11: P0001: Extension directive must occur before any non-preprocessor tokens

2 Replies

Replies have been turned off for this discussion
  • saeid's avatar
    saeid
    Honored Guest
    so seems like after compiling the shader unity adds some lines which causes the compile error:

    debug logs:
    D/ (29916): MALI GL_COMPILE_STATUS is not GL_TRUE, 0
    D/Unity (29916): -------- Shader compilation failed
    D/Unity (29916): #version 300 es
    D/Unity (29916): precision highp float;
    D/Unity (29916): #define UNITY_NO_DXT5nm 1
    D/Unity (29916): #define UNITY_NO_RGBM 1
    D/Unity (29916): #define UNITY_NO_SCREENSPACE_SHADOWS 1
    D/Unity (29916): #define UNITY_NO_LINEAR_COLORSPACE 1
    D/Unity (29916): #ifndef SHADER_TARGET
    D/Unity (29916): #define SHADER_TARGET 30
    D/Unity (29916): #endif
    D/Unity (29916): #ifndef SHADER_API_GLES3
    D/Unity (29916): #define SHADER_API_GLES3 1
    D/Unity (29916): #endif
    D/Unity (29916): #ifndef SHADER_API_MOBILE
    D/Unity (29916): #define SHADER_API_MOBILE 1
    D/Unity (29916): #endif
    D/Unity (29916): #line 7
    D/Unity (29916): #ifdef DUMMY_PREPROCESSOR_TO_WORK_AROUND_HLSL_COMPILER_LINE_HANDLING
    D/Unity (29916): #endif
    D/Unity (29916): #line 7
    D/Unity (29916): #ifdef DUMMY_PREPROCESSOR_TO_WORK_AROUND_HLSL_COMPILER_LINE_HANDLING
    D/Unity (29916): #endif
    D/Unity (29916):
    D/Unity (29916): #extension GL_OES_EGL_image_external : require
    D/Unity (29916): precision highp float;
    D/Unity (29916): uniform samplerExternalOES _MainTex;
    D/Unity (29916): varying highp vec4 texCoords;
    D/Unity (29916): uniform lowp vec4 _Color;
    D/Unity (29916): uniform float _Scale;
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916): #define gl_ModelViewProjectionMatrix glstate_matrix_mvp
    D/Unity (29916): uniform highp mat4 glstate_matrix_mvp;
    D/Unity (29916): #define gl_Vertex _glesVertex
    D/Unity (29916): in vec4 _glesVertex;
    D/Unity (29916): #define gl_MultiTexCoord0 _glesMultiTexCoord0
    D/Unity (29916): in vec4 _glesMultiTexCoord0;
    D/Unity (29916):
    D/Unity (29916): void main()
    D/Unity (29916): {
    D/Unity (29916): texCoords = gl_MultiTexCoord0; // Unity has predefined constants for vertex attributes
    D/Unity (29916): gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    D/Unity (29916): }
    D/Unity (29916): -------- failed compiling:
    D/Unity (29916): vertex shader
    D/Unity (29916): -------- GLSL error:
    D/Unity (29916):
    D/Unity (29916): 0:11: P0001: Extension directive must occur before any non-preprocessor tokens
    D/Unity (29916): 0:13: L0001: Expected token '{', found 'identifier'
    D/ (29916): MALI GL_COMPILE_STATUS is not GL_TRUE, 0
    D/Unity (29916): -------- Shader compilation failed
    D/Unity (29916): #version 300 es
    D/Unity (29916): precision highp float;
    D/Unity (29916): #define UNITY_NO_DXT5nm 1
    D/Unity (29916): #define UNITY_NO_RGBM 1
    D/Unity (29916): #define UNITY_NO_SCREENSPACE_SHADOWS 1
    D/Unity (29916): #define UNITY_NO_LINEAR_COLORSPACE 1
    D/Unity (29916): #ifndef SHADER_TARGET
    D/Unity (29916): #define SHADER_TARGET 30
    D/Unity (29916): #endif
    D/Unity (29916): #ifndef SHADER_API_GLES3
    D/Unity (29916): #define SHADER_API_GLES3 1
    D/Unity (29916): #endif
    D/Unity (29916): #ifndef SHADER_API_MOBILE
    D/Unity (29916): #define SHADER_API_MOBILE 1
    D/Unity (29916): #endif
    D/Unity (29916): #line 7
    D/Unity (29916): #ifdef DUMMY_PREPROCESSOR_TO_WORK_AROUND_HLSL_COMPILER_LINE_HANDLING
    D/Unity (29916): #endif
    D/Unity (29916): #line 7
    D/Unity (29916): #ifdef DUMMY_PREPROCESSOR_TO_WORK_AROUND_HLSL_COMPILER_LINE_HANDLING
    D/Unity (29916): #endif
    D/Unity (29916):
    D/Unity (29916): #extension GL_OES_EGL_image_external : require
    D/Unity (29916): precision highp float;
    D/Unity (29916): uniform samplerExternalOES _MainTex;
    D/Unity (29916): varying highp vec4 texCoords;
    D/Unity (29916): uniform lowp vec4 _Color;
    D/Unity (29916): uniform float _Scale;
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916): #define gl_FragColor _glesFragColor
    D/Unity (29916): layout(location = 0) out mediump vec4 _glesFragColor;
    D/Unity (29916): void main()
    D/Unity (29916): {
    D/Unity (29916): vec2 a_texCoords = vec2(texCoords);
    D/Unity (29916): float newT = 1.0 - a_texCoords.t;
    D/Unity (29916): newT = _Scale * newT;
    D/Unity (29916): vec4 texture = texture(_MainTex, vec2(a_texCoords.s, newT));
    D/Unity (29916): gl_FragColor = vec4(texture.rgb * (_Color.rgb * texture.a + (1. - texture.a)), 1);
    D/Unity (29916): // gl_FragColor = texture(_MainTex, vec2(texCoords));
    D/Unity (29916): }
    D/Unity (29916): -------- failed compiling:
    D/Unity (29916): fragment evaluation shader
    D/Unity (29916): -------- GLSL error:
    D/Unity (29916):
    D/Unity (29916): 0:11: P0001: Extension directive must occur before any non-preprocessor tokens
    D/Unity (29916): 0:13: L0001: Expected token '{', found 'identifier'
    D/Unity (29916): Note: Creation of internal variant of shader 'VideoShaderImageExternal' failed.
    D/ (29916): MALI GL_COMPILE_STATUS is not GL_TRUE, 0
    D/Unity (29916): -------- Shader compilation failed
    D/Unity (29916): #version 300 es
    D/Unity (29916): precision highp float;
    D/Unity (29916): #define UNITY_NO_DXT5nm 1
    D/Unity (29916): #define UNITY_NO_RGBM 1
    D/Unity (29916): #define UNITY_NO_SCREENSPACE_SHADOWS 1
    D/Unity (29916): #define UNITY_NO_LINEAR_COLORSPACE 1
    D/Unity (29916): #ifndef SHADER_TARGET
    D/Unity (29916): #define SHADER_TARGET 30
    D/Unity (29916): #endif
    D/Unity (29916): #ifndef SHADER_API_GLES3
    D/Unity (29916): #define SHADER_API_GLES3 1
    D/Unity (29916): #endif
    D/Unity (29916): #ifndef SHADER_API_MOBILE
    D/Unity (29916): #define SHADER_API_MOBILE 1
    D/Unity (29916): #endif
    D/Unity (29916): #line 7
    D/Unity (29916): #ifdef DUMMY_PREPROCESSOR_TO_WORK_AROUND_HLSL_COMPILER_LINE_HANDLING
    D/Unity (29916): #endif
    D/Unity (29916): #line 7
    D/Unity (29916): #ifdef DUMMY_PREPROCESSOR_TO_WORK_AROUND_HLSL_COMPILER_LINE_HANDLING
    D/Unity (29916): #endif
    D/Unity (29916):
    D/Unity (29916): #extension GL_OES_EGL_image_external : require
    D/Unity (29916): precision highp float;
    D/Unity (29916): uniform samplerExternalOES _MainTex;
    D/Unity (29916): varying highp vec4 texCoords;
    D/Unity (29916): uniform lowp vec4 _Color;
    D/Unity (29916): uniform float _Scale;
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916): #define gl_ModelViewProjectionMatrix glstate_matrix_mvp
    D/Unity (29916): uniform highp mat4 glstate_matrix_mvp;
    D/Unity (29916): #define gl_Vertex _glesVertex
    D/Unity (29916): in vec4 _glesVertex;
    D/Unity (29916): #define gl_MultiTexCoord0 _glesMultiTexCoord0
    D/Unity (29916): in vec4 _glesMultiTexCoord0;
    D/Unity (29916):
    D/Unity (29916): void main()
    D/Unity (29916): {
    D/Unity (29916): texCoords = gl_MultiTexCoord0; // Unity has predefined constants for vertex attributes
    D/Unity (29916): gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    D/Unity (29916): }
    D/Unity (29916): -------- failed compiling:
    D/Unity (29916): vertex shader
    D/Unity (29916): -------- GLSL error:
    D/Unity (29916):
    D/Unity (29916): 0:11: P0001: Extension directive must occur before any non-preprocessor tokens
    D/Unity (29916): 0:13: L0001: Expected token '{', found 'identifier'
    D/ (29916): MALI GL_COMPILE_STATUS is not GL_TRUE, 0
    D/Unity (29916): -------- Shader compilation failed
    D/Unity (29916): #version 300 es
    D/Unity (29916): precision highp float;
    D/Unity (29916): #define UNITY_NO_DXT5nm 1
    D/Unity (29916): #define UNITY_NO_RGBM 1
    D/Unity (29916): #define UNITY_NO_SCREENSPACE_SHADOWS 1
    D/Unity (29916): #define UNITY_NO_LINEAR_COLORSPACE 1
    D/Unity (29916): #ifndef SHADER_TARGET
    D/Unity (29916): #define SHADER_TARGET 30
    D/Unity (29916): #endif
    D/Unity (29916): #ifndef SHADER_API_GLES3
    D/Unity (29916): #define SHADER_API_GLES3 1
    D/Unity (29916): #endif
    D/Unity (29916): #ifndef SHADER_API_MOBILE
    D/Unity (29916): #define SHADER_API_MOBILE 1
    D/Unity (29916): #endif
    D/Unity (29916): #line 7
    D/Unity (29916): #ifdef DUMMY_PREPROCESSOR_TO_WORK_AROUND_HLSL_COMPILER_LINE_HANDLING
    D/Unity (29916): #endif
    D/Unity (29916): #line 7
    D/Unity (29916): #ifdef DUMMY_PREPROCESSOR_TO_WORK_AROUND_HLSL_COMPILER_LINE_HANDLING
    D/Unity (29916): #endif
    D/Unity (29916):
    D/Unity (29916): #extension GL_OES_EGL_image_external : require
    D/Unity (29916): precision highp float;
    D/Unity (29916): uniform samplerExternalOES _MainTex;
    D/Unity (29916): varying highp vec4 texCoords;
    D/Unity (29916): uniform lowp vec4 _Color;
    D/Unity (29916): uniform float _Scale;
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916):
    D/Unity (29916): #define gl_FragColor _glesFragColor
    D/Unity (29916): layout(location = 0) out mediump vec4 _glesFragColor;
    D/Unity (29916): void main()
    D/Unity (29916): {
    D/Unity (29916): vec2 a_texCoords = vec2(texCoords);
    D/Unity (29916): float newT = 1.0 - a_texCoords.t;
    D/Unity (29916): newT = _Scale * newT;
    D/Unity (29916): vec4 texture = texture(_MainTex, vec2(a_texCoords.s, newT));
    D/Unity (29916): gl_FragColor = vec4(texture.rgb * (_Color.rgb * texture.a + (1. - texture.a)), 1);
    D/Unity (29916): // gl_FragColor = texture(_MainTex, vec2(texCoords));
    D/Unity (29916): }
    D/Unity (29916): -------- failed compiling:
    D/Unity (29916): fragment evaluation shader
    D/Unity (29916): -------- GLSL error:
    D/Unity (29916):
    D/Unity (29916): 0:11: P0001: Extension directive must occur before any non-preprocessor tokens
    D/Unity (29916): 0:13: L0001: Expected token '{', found 'identifier'
    D/Unity (29916): Note: Creation of internal variant of shader 'VideoShaderImageExternal' failed.
  • I don't believe this is VR related, so maybe try checking on Unity forums or Unity Answers.