[Mesa-dev] [PATCH] Linking fails when not writing gl_Position.
Ian Romanick
idr at freedesktop.org
Tue Sep 9 10:30:16 PDT 2014
On 09/08/2014 01:10 AM, Tapani Pälli wrote:
> From: Kalyan Kondapally <kalyan.kondapally at intel.com>
>
> According to GLSL-ES Spec(i.e. 1.0, 3.0), gl_Position value is undefined
> after the vertex processing stage if we don't write gl_Position. However,
> GLSL 1.10 Spec mentions that writing to gl_Position is mandatory. In case
> of GLSL-ES, it's not an error and atleast the linking should pass.
> Currently, Mesa throws an linker error in case we dont write to gl_position
> and Version is less then 140(GLSL) and 300(GLSL-ES). This patch changes
> it so that we don't report an error in case of GLSL-ES.
Wow. We can add this to the list of ways OpenGL ES is just plain
broken. Since there is absolutely NO WAY this shader can produce any
useful results, we should at least do the courtesy of generating a
warning. So, keep the first if-condistion the same, but do
linker_warning instead of linker_error if prog->IsES.
> Signed-off-by: Kalyan Kondapally <kalyan.kondapally at intel.com>
> Reviewed-by: Tapani Pälli <tapani.palli at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83380
> ---
> src/glsl/linker.cpp | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
> index 57be493..e9cf550 100644
> --- a/src/glsl/linker.cpp
> +++ b/src/glsl/linker.cpp
> @@ -559,10 +559,10 @@ validate_vertex_shader_executable(struct gl_shader_program *prog,
> * vertex processing has occurred. Its value is undefined if
> * the vertex shader executable does not write gl_Position."
> *
> - * GLSL ES 3.00 is similar to GLSL 1.40--failing to write to gl_Position is
> - * not an error.
> + * All GLSL ES Versions are similar to GLSL 1.40--failing to write to
> + * gl_Position is not an error.
> */
> - if (prog->Version < (prog->IsES ? 300 : 140)) {
> + if (!prog->IsES && prog->Version < 140) {
> find_assignment_visitor find("gl_Position");
> find.run(shader->ir);
> if (!find.variable_found()) {
>
More information about the mesa-dev
mailing list