[Mesa-dev] [PATCH v2] getteximage: assume texture image is empty for non defined levels
Iago Toral
itoral at igalia.com
Fri Apr 13 05:34:16 UTC 2018
On Thu, 2018-04-12 at 17:59 +0200, Juan A. Suarez Romero wrote:
> Current code is returning an INVALID_OPERATION when trying to use
> getTextureImage() on a level that has not been explicitly defined.
>
> That is, we define a mipmapped Texture2D with 3 levels, and try to
> use
> GetTextureImage() for the 4th levels, and INVALID_OPERATION is
> returned.
>
> Nevertheless, such case is not listed as an error in OpenGL 4.6 spec,
> section 8.11.4 ("Texture Image Queries"), where all the case errors
> for
> this function are defined. So it seems this is a valid operation.
>
> On the other hand, in section 8.22 ("Texture State and Proxy State")
> it
> states:
>
> "Each initial texture image is null. It has zero width, height, and
> depth, internal format RGBA, or R8 for buffer textures, component
> sizes set to zero and component types set to NONE, the compressed
> flag set to FALSE, a zero compressed size, and the bound buffer
> object name is zero."
>
> We can assume that we are reading this initialized empty image when
> calling GetTextureImage() with a non defined level.
>
> With this assumption, we will reach one of the other error cases
> defined
> for the functions. At the end, this means that we will return a
> different error to the caller.
I would chancge the last sentence to:
"In the end this means that we would end up returning INVALID_VALUE to
the caller"
>
> This fixes arb_get_texture_sub_image piglit tests.
>
> v2: just return INVALID_VALUE if there isno defined level (Iago)
^
white space
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
>
> Signed-off-by: Juan A. Suarez Romero <jasuarez at igalia.com>
> ---
> src/mesa/main/texgetimage.c | 27 +++++++++++++++++++++++++--
> 1 file changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/main/texgetimage.c
> b/src/mesa/main/texgetimage.c
> index 85d0ffd4770..69521c5dd05 100644
> --- a/src/mesa/main/texgetimage.c
> +++ b/src/mesa/main/texgetimage.c
> @@ -1004,8 +1004,31 @@ dimensions_error_check(struct gl_context *ctx,
>
> texImage = select_tex_image(texObj, target, level, zoffset);
> if (!texImage) {
> - /* missing texture image */
> - _mesa_error(ctx, GL_INVALID_OPERATION, "%s(missing image)",
> caller);
> + /* Trying to return a non-defined level is a valid operation
> per se, as
> + * OpenGL 4.6 spec, section 8.11.4 ("Texture Image Queries")
> does not
> + * handle this case as an error.
> + *
> + * Rather, we need to look at section 8.22 ("Texture State and
> Proxy
> + * State"):
> + *
> + * "Each initial texture image is null. It has zero width,
> height, and
> + * depth, internal format RGBA, or R8 for buffer textures,
> component
> + * sizes set to zero and component types set to NONE, the
> compressed
> + * flag set to FALSE, a zero compressed size, and the bound
> buffer
> + * object name is zero."
> + *
> + * This means we need to assume the image for the non-defined
> level is
> + * an empty image. With this assumption, we can go back to
> section
> + * 8.11.4 and checking again the errors:
> + *
> + * "An INVALID_VALUE error is generated if xoffset + width
> is greater
> + * than the texture’s width, yoffset + height is greater
> than the
> + * texture’s height, or zoffset + depth is greater than the
> texture’s
> + * depth."
> + *
> + * Thus why we return INVALID_VALUE.
> + */
> + _mesa_error(ctx, GL_INVALID_VALUE, "%s(missing image)",
> caller);
> return true;
> }
>
More information about the mesa-dev
mailing list