[Mesa-dev] [PATCH] mesa: validate the indirect param before the shader in DispatchComputeIndirect

Brian Paul brianp at vmware.com
Mon Aug 22 16:20:17 UTC 2016


On 08/22/2016 08:06 AM, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> This is required by and fixes GL45-CTS.compute_shader.api-indirect.
>
> I know it's silly, but it's the path of least resistence.
> ---
>   src/mesa/main/api_validate.c | 6 +++---
>   1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
> index 384a8858..27c17fa 100644
> --- a/src/mesa/main/api_validate.c
> +++ b/src/mesa/main/api_validate.c
> @@ -1102,40 +1102,40 @@ _mesa_validate_DispatchCompute(struct gl_context *ctx,
>      return GL_TRUE;
>   }
>
>   static GLboolean
>   valid_dispatch_indirect(struct gl_context *ctx,
>                           GLintptr indirect,
>                           GLsizei size, const char *name)
>   {
>      const uint64_t end = (uint64_t) indirect + size;
>
> -   if (!check_valid_to_compute(ctx, name))
> -      return GL_FALSE;
> -
>      /* From the OpenGL 4.3 Core Specification, Chapter 19, Compute Shaders:
>       *
>       * "An INVALID_VALUE error is generated if indirect is negative or is not a
>       *  multiple of four."
>       */
>      if (indirect & (sizeof(GLuint) - 1)) {
>         _mesa_error(ctx, GL_INVALID_VALUE,
>                     "%s(indirect is not aligned)", name);
>         return GL_FALSE;
>      }
>
>      if (indirect < 0) {
>         _mesa_error(ctx, GL_INVALID_VALUE,
>                     "%s(indirect is less than zero)", name);
>         return GL_FALSE;
>      }
>
> +   if (!check_valid_to_compute(ctx, name))
> +      return GL_FALSE;
> +
>      /* From the OpenGL 4.3 Core Specification, Chapter 19, Compute Shaders:
>       *
>       * "An INVALID_OPERATION error is generated if no buffer is bound to the
>       *  DRAW_INDIRECT_BUFFER binding, or if the command would source data
>       *  beyond the end of the buffer object."
>       */
>      if (!_mesa_is_bufferobj(ctx->DispatchIndirectBuffer)) {
>         _mesa_error(ctx, GL_INVALID_OPERATION,
>                     "%s: no buffer bound to DISPATCH_INDIRECT_BUFFER", name);
>         return GL_FALSE;
>

Reviewed-by: Brian Paul <brianp at vmware.com>



More information about the mesa-dev mailing list