mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-25 23:10:23 +01:00
mesa: flush bitmap caches when changing scissors or window rects state
If we change the sate without flushing the bitmap cache, the cache might be
rendered with the new scissor, which excludes some parts that should've
been rendered with the old state, and vice versa.
Cc: mesa-stable
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6233
Signed-off-by: Sviatoslav Peleshko <sviatoslav.peleshko@globallogic.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15881>
(cherry picked from commit dd7278aa10)
This commit is contained in:
parent
b40e15c07a
commit
1163e9a8e2
3 changed files with 12 additions and 1 deletions
|
|
@ -1476,7 +1476,7 @@
|
|||
"description": "mesa: flush bitmap caches when changing scissors or window rects state",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"because_sha": null
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@
|
|||
#include "varray.h"
|
||||
#include "api_exec_decl.h"
|
||||
|
||||
#include "state_tracker/st_cb_bitmap.h"
|
||||
#include "state_tracker/st_context.h"
|
||||
|
||||
void
|
||||
|
|
@ -865,6 +866,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
|
|||
GLbitfield newEnabled =
|
||||
state * ((1 << ctx->Const.MaxViewports) - 1);
|
||||
if (newEnabled != ctx->Scissor.EnableFlags) {
|
||||
st_flush_bitmap_cache(st_context(ctx));
|
||||
|
||||
FLUSH_VERTICES(ctx, 0,
|
||||
GL_SCISSOR_BIT | GL_ENABLE_BIT);
|
||||
ctx->NewDriverState |= ST_NEW_SCISSOR | ST_NEW_RASTERIZER;
|
||||
|
|
@ -1390,6 +1393,8 @@ _mesa_set_enablei(struct gl_context *ctx, GLenum cap,
|
|||
return;
|
||||
}
|
||||
if (((ctx->Scissor.EnableFlags >> index) & 1) != state) {
|
||||
st_flush_bitmap_cache(st_context(ctx));
|
||||
|
||||
FLUSH_VERTICES(ctx, 0,
|
||||
GL_SCISSOR_BIT | GL_ENABLE_BIT);
|
||||
ctx->NewDriverState |= ST_NEW_SCISSOR | ST_NEW_RASTERIZER;
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
#include "main/scissor.h"
|
||||
#include "api_exec_decl.h"
|
||||
|
||||
#include "state_tracker/st_cb_bitmap.h"
|
||||
#include "state_tracker/st_context.h"
|
||||
|
||||
/**
|
||||
|
|
@ -50,6 +51,9 @@ set_scissor_no_notify(struct gl_context *ctx, unsigned idx,
|
|||
height == ctx->Scissor.ScissorArray[idx].Height)
|
||||
return;
|
||||
|
||||
if (ctx->Scissor.EnableFlags)
|
||||
st_flush_bitmap_cache(st_context(ctx));
|
||||
|
||||
FLUSH_VERTICES(ctx, 0, GL_SCISSOR_BIT);
|
||||
ctx->NewDriverState |= ST_NEW_SCISSOR;
|
||||
|
||||
|
|
@ -294,6 +298,8 @@ _mesa_WindowRectanglesEXT(GLenum mode, GLsizei count, const GLint *box)
|
|||
box += 4;
|
||||
}
|
||||
|
||||
st_flush_bitmap_cache(st_context(ctx));
|
||||
|
||||
FLUSH_VERTICES(ctx, 0, GL_SCISSOR_BIT);
|
||||
ctx->NewDriverState |= ST_NEW_WINDOW_RECTANGLES;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue