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

Dave Airlie airlied at gmail.com
Mon May 23 20:43:43 UTC 2016


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



More information about the mesa-dev mailing list