Forum Discussion
saeid
10 years agoHonored Guest
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
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
- saeidHonored Guestso 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. - cyberealityGrand ChampionI don't believe this is VR related, so maybe try checking on Unity forums or Unity Answers.
Quick Links
- Horizon Developer Support
- Quest User Forums
- Troubleshooting Forum for problems with a game or app
- Quest Support for problems with your device
Other Meta Support
Related Content
- 7 months ago