Hi Dave, I fixed this test too using a slightly different check. See https://github.com/Igalia/mesa/commit/45bb76f54bd406d8395df46e0cdcb7a59e87f468.
I check variable is a built-in by using the "gl_" prefix check, because that's what is consistently used in the file. Checking location == -1 seems more elegant though. In any case, you should probably use _mesa_program_resource_location_index() in the switch case, as I did in my patch. With that, patch is: Reviewed-by: Eduardo Lima Mitev <[email protected]> Thanks! On 06/03/2016 12:21 AM, Dave Airlie wrote: > ping? > > > On 24 May 2016 at 06:43, Dave Airlie <[email protected]> wrote: >> From: Dave Airlie <[email protected]> >> >> 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 <[email protected]> >> --- >> 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 >> [email protected] >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
