mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 18:00:10 +01:00
st/mesa: flush bitmap cache before texture functions
As far as I can tell, a sequence of glBitmap followed by texture functions that refer to a texture bound as the framebuffer is well within what should be allowed. Found by inspection. Cc: 11.2 12.0 <mesa-stable@lists.freedesktop.org> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
c542b7e43d
commit
e7fff3cfe1
2 changed files with 12 additions and 0 deletions
|
|
@ -48,6 +48,7 @@
|
|||
|
||||
#include "state_tracker/st_debug.h"
|
||||
#include "state_tracker/st_context.h"
|
||||
#include "state_tracker/st_cb_bitmap.h"
|
||||
#include "state_tracker/st_cb_fbo.h"
|
||||
#include "state_tracker/st_cb_flush.h"
|
||||
#include "state_tracker/st_cb_texture.h"
|
||||
|
|
@ -1323,6 +1324,8 @@ st_TexSubImage(struct gl_context *ctx, GLuint dims,
|
|||
unsigned dstz = texImage->Face + texImage->TexObject->MinLayer;
|
||||
unsigned dst_level = 0;
|
||||
|
||||
st_flush_bitmap_cache(st);
|
||||
|
||||
if (stObj->pt == stImage->pt)
|
||||
dst_level = texImage->TexObject->MinLevel + texImage->Level;
|
||||
|
||||
|
|
@ -1791,6 +1794,8 @@ st_GetTexSubImage(struct gl_context * ctx,
|
|||
assert(!_mesa_is_format_etc2(texImage->TexFormat) &&
|
||||
texImage->TexFormat != MESA_FORMAT_ETC1_RGB8);
|
||||
|
||||
st_flush_bitmap_cache(st);
|
||||
|
||||
if (!st->prefer_blit_based_texture_transfer &&
|
||||
!_mesa_is_format_compressed(texImage->TexFormat)) {
|
||||
/* Try to avoid the fallback if we're doing texture decompression here */
|
||||
|
|
@ -2254,6 +2259,8 @@ st_CopyTexSubImage(struct gl_context *ctx, GLuint dims,
|
|||
unsigned bind;
|
||||
GLint srcY0, srcY1;
|
||||
|
||||
st_flush_bitmap_cache(st);
|
||||
|
||||
assert(!_mesa_is_format_etc2(texImage->TexFormat) &&
|
||||
texImage->TexFormat != MESA_FORMAT_ETC1_RGB8);
|
||||
|
||||
|
|
@ -2776,6 +2783,8 @@ st_ClearTexSubImage(struct gl_context *ctx,
|
|||
if (!pt)
|
||||
return;
|
||||
|
||||
st_flush_bitmap_cache(st);
|
||||
|
||||
u_box_3d(xoffset, yoffset, zoffset + texImage->Face,
|
||||
width, height, depth, &box);
|
||||
if (texImage->TexObject->Immutable) {
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@
|
|||
#include "st_context.h"
|
||||
#include "st_texture.h"
|
||||
#include "st_gen_mipmap.h"
|
||||
#include "st_cb_bitmap.h"
|
||||
#include "st_cb_texture.h"
|
||||
|
||||
|
||||
|
|
@ -96,6 +97,8 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
|
|||
if (lastLevel == 0)
|
||||
return;
|
||||
|
||||
st_flush_bitmap_cache(st);
|
||||
|
||||
/* The texture isn't in a "complete" state yet so set the expected
|
||||
* lastLevel here, since it won't get done in st_finalize_texture().
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue