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

Dave Airlie airlied at gmail.com
Thu Jun 2 03:42:43 UTC 2016


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;
-- 
2.5.5



More information about the mesa-dev mailing list