[Mesa-dev] [PATCH] mesa/copyimage: fix num samples check to handle renderbuffers.

Nicolai Hähnle nhaehnle at gmail.com
Thu Jun 2 15:59:09 UTC 2016


Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

On 02.06.2016 05:42, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> This test was only happening for textures, but there is
> nothing in the spec to say this, so test it for all cases.
>
> This fixes:
> GL45-CTS.copy_image.invalid_target
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>   src/mesa/main/copyimage.c | 11 +++++++----
>   1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/main/copyimage.c b/src/mesa/main/copyimage.c
> index 63ce13a..6aa6bcb 100644
> --- a/src/mesa/main/copyimage.c
> +++ b/src/mesa/main/copyimage.c
> @@ -65,6 +65,7 @@ prepare_target(struct gl_context *ctx, GLuint name, GLenum target,
>                  GLenum *internalFormat,
>                  GLuint *width,
>                  GLuint *height,
> +               GLuint *num_samples,
>                  const char *dbg_prefix)
>   {
>      if (name == 0) {
> @@ -131,6 +132,7 @@ prepare_target(struct gl_context *ctx, GLuint name, GLenum target,
>         *internalFormat = rb->InternalFormat;
>         *width = rb->Width;
>         *height = rb->Height;
> +      *num_samples = rb->NumSamples;
>         *tex_image = NULL;
>      } else {
>         struct gl_texture_object *texObj = _mesa_lookup_texture(ctx, name);
> @@ -201,6 +203,7 @@ prepare_target(struct gl_context *ctx, GLuint name, GLenum target,
>         *internalFormat = (*tex_image)->InternalFormat;
>         *width = (*tex_image)->Width;
>         *height = (*tex_image)->Height;
> +      *num_samples = (*tex_image)->NumSamples;
>      }
>
>      return true;
> @@ -456,6 +459,7 @@ _mesa_CopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel,
>      GLenum srcIntFormat, dstIntFormat;
>      GLuint src_w, src_h, dst_w, dst_h;
>      GLuint src_bw, src_bh, dst_bw, dst_bh;
> +   GLuint src_num_samples, dst_num_samples;
>      int dstWidth, dstHeight, dstDepth;
>      int i;
>
> @@ -477,12 +481,12 @@ _mesa_CopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel,
>
>      if (!prepare_target(ctx, srcName, srcTarget, srcLevel, srcZ, srcDepth,
>                          &srcTexImage, &srcRenderbuffer, &srcFormat,
> -                       &srcIntFormat, &src_w, &src_h, "src"))
> +                       &srcIntFormat, &src_w, &src_h, &src_num_samples, "src"))
>         return;
>
>      if (!prepare_target(ctx, dstName, dstTarget, dstLevel, dstZ, srcDepth,
>                          &dstTexImage, &dstRenderbuffer, &dstFormat,
> -                       &dstIntFormat, &dst_w, &dst_h, "dst"))
> +                       &dstIntFormat, &dst_w, &dst_h, &dst_num_samples, "dst"))
>         return;
>
>      _mesa_get_format_block_size(srcFormat, &src_bw, &src_bh);
> @@ -565,8 +569,7 @@ _mesa_CopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel,
>         return;
>      }
>
> -   if (srcTexImage && dstTexImage &&
> -       srcTexImage->NumSamples != dstTexImage->NumSamples) {
> +   if (src_num_samples != dst_num_samples) {
>         _mesa_error(ctx, GL_INVALID_OPERATION,
>                     "glCopyImageSubData(number of samples mismatch)");
>         return;
>


More information about the mesa-dev mailing list