[Mesa-dev] [PATCH] [rfc] mesa/program_resource: return -1 for index if no location.

Dave Airlie airlied at gmail.com
Thu Jun 2 22:21:11 UTC 2016


ping?


On 24 May 2016 at 06:43, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> The GL4.5 spec quote seems clear on this:
> "The value -1 will be returned by either command if an error occurs,
> if name does not identify an active variable on programInterface,
> or if name identifies an active variable that does not have a valid
> location assigned, as described above."
>
> This fixes:
> GL45-CTS.program_interface_query.output-built-in
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/mesa/main/shader_query.cpp | 20 +++++++++++++++++---
>  1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp
> index c8c3df4..467e9b7 100644
> --- a/src/mesa/main/shader_query.cpp
> +++ b/src/mesa/main/shader_query.cpp
> @@ -884,6 +884,13 @@ _mesa_program_resource_location_index(struct gl_shader_program *shProg,
>     if (!res || !(res->StageReferences & (1 << MESA_SHADER_FRAGMENT)))
>        return -1;
>
> +   /* From OpenGL 4.5 spec, 7.3 Program Objects
> +    * "The value -1 will be returned by either command...
> +    *  ... or if name identifies an active variable that does not have a
> +    * valid location assigned.
> +    */
> +   if (RESOURCE_VAR(res)->location == -1)
> +      return -1;
>     return RESOURCE_VAR(res)->index;
>  }
>
> @@ -1238,12 +1245,19 @@ _mesa_program_resource_prop(struct gl_shader_program *shProg,
>        default:
>           goto invalid_operation;
>        }
> -   case GL_LOCATION_INDEX:
> +   case GL_LOCATION_INDEX: {
> +      int tmp;
>        if (res->Type != GL_PROGRAM_OUTPUT)
>           goto invalid_operation;
> -      *val = RESOURCE_VAR(res)->index;
> +      tmp = program_resource_location(shProg, res,
> +                                      _mesa_program_resource_name(res),
> +                                      0);
> +      if (tmp == -1)
> +         *val = -1;
> +      else
> +         *val = RESOURCE_VAR(res)->index;
>        return 1;
> -
> +   }
>     case GL_NUM_COMPATIBLE_SUBROUTINES:
>        if (res->Type != GL_VERTEX_SUBROUTINE_UNIFORM &&
>            res->Type != GL_FRAGMENT_SUBROUTINE_UNIFORM &&
> --
> 2.5.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list