[Mesa-dev] [PATCH] mesa: Require mipmap completeness for glCopyImageSubData(), sometimes.

Roland Scheidegger sroland at vmware.com
Mon Feb 27 13:42:36 UTC 2017


Sounds exactly like something which applications would get wrong (as the
condition is indeed quite bizarre).
At least, unlike using texelFetch with an incomplete texture (due to
mipfilter again, even though that sampler state is unused with
texelFetch) it is a honest error here...
But if other drivers honor that (even with GL not just GLES?) it
hopefully won't do too much harm, and chances are it gets mostly used
with immutable textures in any case...

Roland



Am 27.02.2017 um 13:54 schrieb Kenneth Graunke:
> This patch makes glCopyImageSubData require mipmap completeness when the
> texture object's built-in sampler object has a mipmapping MinFilter.
> 
> Fixes (on i965):
> dEQP-GLES31.functional.debug.negative_coverage.*.buffer.copy_image_sub_data
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/main/copyimage.c | 25 +++++++++++++++++++++++--
>  1 file changed, 23 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/main/copyimage.c b/src/mesa/main/copyimage.c
> index cf25159e880..877c8ac246d 100644
> --- a/src/mesa/main/copyimage.c
> +++ b/src/mesa/main/copyimage.c
> @@ -149,9 +149,30 @@ prepare_target(struct gl_context *ctx, GLuint name, GLenum target,
>           return false;
>        }
>  
> +      /* The ARB_copy_image specification says:
> +       *
> +       *    "INVALID_OPERATION is generated if either object is a texture and
> +       *     the texture is not complete (as defined in section 3.9.14)"
> +       *
> +       * The cited section says:
> +       *
> +       *    "Using the preceding definitions, a texture is complete unless any
> +       *     of the following conditions hold true: [...]
> +       *
> +       *     * The minification filter requires a mipmap (is neither NEAREST
> +       *       nor LINEAR), and the texture is not mipmap complete."
> +       *
> +       * This imposes the bizarre restriction that glCopyImageSubData requires
> +       * mipmap completion at times, which dEQP mandates, and other drivers
> +       * appear to implement.  We don't have any texture units here, so we
> +       * can't look at any bound separate sampler objects...it appears that
> +       * you're supposed to use the sampler object which is built-in to the
> +       * texture object.
> +       *
> +       * See https://urldefense.proofpoint.com/v2/url?u=https-3A__cvs.khronos.org_bugzilla_show-5Fbug.cgi-3Fid-3D16224&d=DwIGaQ&c=uilaK90D4TOVoH58JNXRgQ&r=_QIjpv-UJ77xEQY8fIYoQtr5qv8wKrPJc7v7_-CYAb0&m=FMREf3nTTdTa7MfivWF_L2WkZbF93lPMJnxeb7zaphU&s=TmBXrQEdUNEWT9Une0MMenjj1L93vrDTj4LeDfBhC14&e= .
> +       */
>        _mesa_test_texobj_completeness(ctx, texObj);
> -      if (!texObj->_BaseComplete ||
> -          (level != 0 && !texObj->_MipmapComplete)) {
> +      if (!_mesa_is_texture_complete(texObj, &texObj->Sampler)) {
>           _mesa_error(ctx, GL_INVALID_OPERATION,
>                       "glCopyImageSubData(%sName incomplete)", dbg_prefix);
>           return false;
> 



More information about the mesa-dev mailing list