mesa: support compute stage in _mesa_program_resource_prop
authorTapani Pälli <tapani.palli@intel.com>
Wed, 6 May 2015 06:36:15 +0000 (09:36 +0300)
committerTapani Pälli <tapani.palli@intel.com>
Wed, 6 May 2015 08:12:01 +0000 (11:12 +0300)
Increases pass rate of ES31-CTS.*program_interface_query* tests
when run with MESA_EXTENSION_OVERRIDE='GL_ARB_compute_shader'. Many
of the negative tests that happen to use compute stage in queries
start passing.

Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Martin Peres <martin.peres@linux.intel.com>
src/mesa/main/shader_query.cpp

index d2ca49b43a700bb4fa63a9bcc7b668dc25700e70..6e46553724be47b2f1ba35ea2e2fdc502bd5484f 100644 (file)
@@ -809,6 +809,8 @@ stage_from_enum(GLenum ref)
       return MESA_SHADER_GEOMETRY;
    case GL_REFERENCED_BY_FRAGMENT_SHADER:
       return MESA_SHADER_FRAGMENT;
+   case GL_REFERENCED_BY_COMPUTE_SHADER:
+      return MESA_SHADER_COMPUTE;
    default:
       assert(!"shader stage not supported");
       return MESA_SHADER_STAGES;
@@ -824,6 +826,10 @@ is_resource_referenced(struct gl_shader_program *shProg,
                        struct gl_program_resource *res,
                        GLuint index, uint8_t stage)
 {
+   /* First, check if we even have such a stage active. */
+   if (!shProg->_LinkedShaders[stage])
+      return false;
+
    if (res->Type == GL_ATOMIC_COUNTER_BUFFER)
       return RESOURCE_ATC(res)->StageReferences[stage];
 
@@ -979,6 +985,9 @@ _mesa_program_resource_prop(struct gl_shader_program *shProg,
    case GL_NUM_ACTIVE_VARIABLES:
    case GL_ACTIVE_VARIABLES:
       return get_buffer_property(shProg, res, prop, val, caller);
+   case GL_REFERENCED_BY_COMPUTE_SHADER:
+      if (!ctx->Extensions.ARB_compute_shader)
+         goto invalid_enum;
    case GL_REFERENCED_BY_VERTEX_SHADER:
    case GL_REFERENCED_BY_GEOMETRY_SHADER:
    case GL_REFERENCED_BY_FRAGMENT_SHADER:
@@ -1015,17 +1024,18 @@ _mesa_program_resource_prop(struct gl_shader_program *shProg,
    case GL_IS_PER_PATCH:
    case GL_REFERENCED_BY_TESS_CONTROL_SHADER:
    case GL_REFERENCED_BY_TESS_EVALUATION_SHADER:
-   /* GL_ARB_compute_shader */
-   case GL_REFERENCED_BY_COMPUTE_SHADER:
    default:
-      _mesa_error(ctx, GL_INVALID_ENUM, "%s(%s prop %s)", caller,
-                  _mesa_lookup_enum_by_nr(res->Type),
-                  _mesa_lookup_enum_by_nr(prop));
-      return 0;
+      goto invalid_enum;
    }
 
 #undef VALIDATE_TYPE
 
+invalid_enum:
+   _mesa_error(ctx, GL_INVALID_ENUM, "%s(%s prop %s)", caller,
+               _mesa_lookup_enum_by_nr(res->Type),
+               _mesa_lookup_enum_by_nr(prop));
+   return 0;
+
 invalid_operation:
    _mesa_error(ctx, GL_INVALID_OPERATION, "%s(%s prop %s)", caller,
                _mesa_lookup_enum_by_nr(res->Type),