[Mesa-dev] [PATCH] mesa: return INVALID_OPERATION if there's no image in GetTex*Image
Brian Paul
brianp at vmware.com
Fri Jul 24 14:04:35 PDT 2015
On 07/24/2015 10:05 AM, Ilia Mirkin wrote:
> On Fri, Jul 24, 2015 at 9:55 AM, Brian Paul <brianp at vmware.com> wrote:
>> The commit subject line doesn't seem to match the code.
>
> It matches the code if you read the whole function... I think. Right
> now if there's no image, it'll succeed, whereas after this change,
> it'll return INVALID_OPERATION.
Hmm, both with and without your patch the piglit
arb_get_texture_sub_image-errors test passes. It tests getting of a
non-existent image.
Note that "no image" can be interpreted in two ways:
1. the gl_texture_object::Image[face][level] pointer is NULL
2. the gl_texture_object::Image[face][level] image exists but
width,height,depth are zero.
In my piglit test, the former case generates INVALID_OPERATION.
I'm adding some additional piglit tests to check the latter case. Your
patch does catch the case of width = 0 and xoffset+width>texwidth which
we didn't catch before.
I guess I'd simply name your patch "mesa: fix error checking for getting
zero-sized texture images".
-Brian
>
> Happy to use a different subject line, let me know what you had in mind.
>
>>
>> The code looks good though.
>>
>> Reviewed-by: Brian Paul <brianp at vmware.com>
>>
>>
>> On 07/23/2015 06:40 PM, Ilia Mirkin wrote:
>>>
>>> Commit 17f714836 (mesa: rearrange texture error checking order) moved
>>> the width/height/depth == 0 allowance before checking if the image was
>>> there. This was in part due to depth having to be == 1 for 2D images and
>>> width having to be == 1 for 1D images. Instead relax the height/depth
>>> checks to also accept 0 as valid.
>>>
>>> With this change,
>>>
>>> bin/arb_direct_state_access-get-textures
>>>
>>> starts passing again.
>>>
>>> Fixes: 17f714836 (mesa: rearrange texture error checking order)
>>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>>>
>>> ---
>>> src/mesa/main/texgetimage.c | 18 +++++++++---------
>>> 1 file changed, 9 insertions(+), 9 deletions(-)
>>>
>>> diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c
>>> index cdbd618..c0ccce3 100644
>>> --- a/src/mesa/main/texgetimage.c
>>> +++ b/src/mesa/main/texgetimage.c
>>> @@ -928,13 +928,6 @@ dimensions_error_check(struct gl_context *ctx,
>>> const struct gl_texture_image *texImage;
>>> int i;
>>>
>>> - if (width == 0 || height == 0 || depth == 0) {
>>> - /* Not an error, but nothing to do. Return 'true' so that the
>>> - * caller simply returns.
>>> - */
>>> - return true;
>>> - }
>>> -
>>> if (xoffset < 0) {
>>> _mesa_error(ctx, GL_INVALID_VALUE, "%s(xoffset = %d)", caller,
>>> xoffset);
>>> return true;
>>> @@ -973,7 +966,7 @@ dimensions_error_check(struct gl_context *ctx,
>>> "%s(1D, yoffset = %d)", caller, yoffset);
>>> return true;
>>> }
>>> - if (height != 1) {
>>> + if (height > 1) {
>>> _mesa_error(ctx, GL_INVALID_VALUE,
>>> "%s(1D, height = %d)", caller, height);
>>> return true;
>>> @@ -987,7 +980,7 @@ dimensions_error_check(struct gl_context *ctx,
>>> "%s(zoffset = %d)", caller, zoffset);
>>> return true;
>>> }
>>> - if (depth != 1) {
>>> + if (depth > 1) {
>>> _mesa_error(ctx, GL_INVALID_VALUE,
>>> "%s(depth = %d)", caller, depth);
>>> return true;
>>> @@ -1086,6 +1079,13 @@ dimensions_error_check(struct gl_context *ctx,
>>> }
>>> }
>>
>> Reviewed-by: Brian Paul <brianp at vmware.com>
>>
>>
>>>
>>> + if (width == 0 || height == 0 || depth == 0) {
>>> + /* Not an error, but nothing to do. Return 'true' so that the
>>> + * caller simply returns.
>>> + */
>>> + return true;
>>> + }
>>> +
>>> return false;
>>> }
>>>
>>>
>>
More information about the mesa-dev
mailing list