diff options
author | Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> | 2021-11-02 14:01:06 +0100 |
---|---|---|
committer | Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> | 2021-11-05 10:02:59 +0100 |
commit | 1ee3fbd703752460248958f9b7e42a855023b274 (patch) | |
tree | f74b85d85b2a4d2dc31674af148e06a5e16b821a /src/mesa | |
parent | 6b002d2549844915b13abe12f5ae21cc73f1ea82 (diff) |
mesa: always call _mesa_update_pixel
10c75ae4 moved handling of this state to the functions that
depend on ctx->_ImageTransferState.
So we can't depend on _NEW_PIXEL being set to call this function,
since it'll be always clear earlier by _mesa_update_state_locked.
Example sequence that would trigger the issue:
glPixelTransferi(...)
glClear(...)
glTexSubImage2D(...) <-- won't use the new value set by
glPixelTransferi because glClear caused
_NEW_PIXEL to be cleared.
_NEW_PIXEL itself is kept because st_update_pixel_transfer depends
on it.
Fixes: 10c75ae4 ("mesa: move _mesa_update_pixel out of _mesa_update_state")
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5273
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13596>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/main/drawpix.c | 9 | ||||
-rw-r--r-- | src/mesa/main/readpix.c | 3 | ||||
-rw-r--r-- | src/mesa/main/teximage.c | 15 |
3 files changed, 9 insertions, 18 deletions
diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c index a6c48f2d2e4..9df1406e1e6 100644 --- a/src/mesa/main/drawpix.c +++ b/src/mesa/main/drawpix.c @@ -73,8 +73,7 @@ _mesa_DrawPixels( GLsizei width, GLsizei height, */ _mesa_set_vp_override(ctx, GL_TRUE); - if (ctx->NewState & _NEW_PIXEL) - _mesa_update_pixel(ctx); + _mesa_update_pixel(ctx); if (ctx->NewState) _mesa_update_state(ctx); @@ -245,8 +244,7 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height, */ _mesa_set_vp_override(ctx, GL_TRUE); - if (ctx->NewState & _NEW_PIXEL) - _mesa_update_pixel(ctx); + _mesa_update_pixel(ctx); if (ctx->NewState) _mesa_update_state(ctx); @@ -334,8 +332,7 @@ _mesa_Bitmap( GLsizei width, GLsizei height, return; /* do nothing */ } - if (ctx->NewState & _NEW_PIXEL) - _mesa_update_pixel(ctx); + _mesa_update_pixel(ctx); if (ctx->NewState) _mesa_update_state(ctx); diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c index 4852cc0b2b4..c9136ffb3a4 100644 --- a/src/mesa/main/readpix.c +++ b/src/mesa/main/readpix.c @@ -1056,8 +1056,7 @@ read_pixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, return; } - if (ctx->NewState & _NEW_PIXEL) - _mesa_update_pixel(ctx); + _mesa_update_pixel(ctx); if (ctx->NewState) _mesa_update_state(ctx); diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 4254f106963..acf6ee651a2 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -3145,8 +3145,7 @@ teximage(struct gl_context *ctx, GLboolean compressed, GLuint dims, unpack = &unpack_no_border; } - if (ctx->NewState & _NEW_PIXEL) - _mesa_update_pixel(ctx); + _mesa_update_pixel(ctx); _mesa_lock_texture(ctx, texObj); { @@ -3587,8 +3586,7 @@ texture_sub_image(struct gl_context *ctx, GLuint dims, { FLUSH_VERTICES(ctx, 0, 0); - if (ctx->NewState & _NEW_PIXEL) - _mesa_update_pixel(ctx); + _mesa_update_pixel(ctx); _mesa_lock_texture(ctx, texObj); { @@ -4271,8 +4269,7 @@ copy_texture_sub_image_err(struct gl_context *ctx, GLuint dims, _mesa_enum_to_string(target), level, xoffset, yoffset, zoffset, x, y, width, height); - if (ctx->NewState & _NEW_PIXEL) - _mesa_update_pixel(ctx); + _mesa_update_pixel(ctx); if (ctx->NewState & NEW_COPY_TEX_STATE) _mesa_update_state(ctx); @@ -4297,8 +4294,7 @@ copy_texture_sub_image_no_error(struct gl_context *ctx, GLuint dims, { FLUSH_VERTICES(ctx, 0, 0); - if (ctx->NewState & _NEW_PIXEL) - _mesa_update_pixel(ctx); + _mesa_update_pixel(ctx); if (ctx->NewState & NEW_COPY_TEX_STATE) _mesa_update_state(ctx); @@ -4329,8 +4325,7 @@ copyteximage(struct gl_context *ctx, GLuint dims, struct gl_texture_object *texO _mesa_enum_to_string(internalFormat), x, y, width, height, border); - if (ctx->NewState & _NEW_PIXEL) - _mesa_update_pixel(ctx); + _mesa_update_pixel(ctx); if (ctx->NewState & NEW_COPY_TEX_STATE) _mesa_update_state(ctx); |