mesa: recover target_check before get_current_tex_objects
At compressed_tex_sub_image we only can obtain the tex_object after
compressed_subtexture_target_check is validated for TEX_MODE_CURRENT.
So if the target is wrong the error is raised to the user.
This completes the fix for the regression introduced on "mesa: refactor
compressed_tex_sub_image function" of the pending failing tests:
dEQP-GLES3.functional.negative_api.texture.compressedtexsubimage3d
dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage3d
v2: Fix warning that texObj might be used uninitialized (Gert Wollny)
Fixes: 7df233d68d ("mesa: refactor compressed_tex_sub_image function")
Reviewed-By: Gert Wollny <gert.wollny@collabora.com>
This commit is contained in:
@@ -5588,7 +5588,7 @@ compressed_tex_sub_image(unsigned dim, GLenum target, GLuint textureOrIndex,
|
||||
const GLvoid *data, enum tex_mode mode,
|
||||
const char *caller)
|
||||
{
|
||||
struct gl_texture_object *texObj;
|
||||
struct gl_texture_object *texObj = NULL;
|
||||
struct gl_texture_image *texImage;
|
||||
bool no_error = false;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
@@ -5622,14 +5622,9 @@ compressed_tex_sub_image(unsigned dim, GLenum target, GLuint textureOrIndex,
|
||||
case TEX_MODE_CURRENT_ERROR:
|
||||
default:
|
||||
assert(textureOrIndex == 0);
|
||||
texObj = _mesa_get_current_tex_object(ctx, target);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!texObj)
|
||||
return;
|
||||
|
||||
|
||||
if (!no_error &&
|
||||
compressed_subtexture_target_check(ctx, target, dim, format,
|
||||
mode == TEX_MODE_DSA_ERROR,
|
||||
@@ -5637,7 +5632,12 @@ compressed_tex_sub_image(unsigned dim, GLenum target, GLuint textureOrIndex,
|
||||
return;
|
||||
}
|
||||
|
||||
if (!no_error && !texObj)
|
||||
if (mode == TEX_MODE_CURRENT_NO_ERROR ||
|
||||
mode == TEX_MODE_CURRENT_ERROR) {
|
||||
texObj = _mesa_get_current_tex_object(ctx, target);
|
||||
}
|
||||
|
||||
if (!texObj)
|
||||
return;
|
||||
|
||||
if (!no_error &&
|
||||
|
||||
Reference in New Issue
Block a user