mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 08:08:06 +02:00
st/glx: Sync the back buffer to the front buffer.
Consider this rendering sequence * render to the back buffer * swap buffers * read from the front buffer The front buffer is expected to have the contents of the back buffer.
This commit is contained in:
parent
48bc3cca89
commit
d6262bdcfb
1 changed files with 22 additions and 4 deletions
|
|
@ -197,18 +197,36 @@ xmesa_st_framebuffer_validate(struct st_framebuffer_iface *stfbi,
|
|||
struct pipe_texture **out)
|
||||
{
|
||||
struct xmesa_st_framebuffer *xstfb = xmesa_st_framebuffer(stfbi);
|
||||
unsigned statt_mask, i;
|
||||
unsigned statt_mask, new_mask, i;
|
||||
boolean resized;
|
||||
|
||||
statt_mask = 0x0;
|
||||
for (i = 0; i < count; i++)
|
||||
statt_mask |= 1 << statts[i];
|
||||
/* record newly allocated textures */
|
||||
new_mask = statt_mask & ~xstfb->texture_mask;
|
||||
|
||||
resized = (xstfb->buffer->width != xstfb->texture_width ||
|
||||
xstfb->buffer->height != xstfb->texture_height);
|
||||
|
||||
/* revalidate textures */
|
||||
if (xstfb->buffer->width != xstfb->texture_width ||
|
||||
xstfb->buffer->height != xstfb->texture_height ||
|
||||
(xstfb->texture_mask & statt_mask) != statt_mask) {
|
||||
if (resized || new_mask) {
|
||||
xmesa_st_framebuffer_validate_textures(stfbi,
|
||||
xstfb->buffer->width, xstfb->buffer->height, statt_mask);
|
||||
|
||||
if (!resized) {
|
||||
enum st_attachment_type back, front;
|
||||
|
||||
back = ST_ATTACHMENT_BACK_LEFT;
|
||||
front = ST_ATTACHMENT_FRONT_LEFT;
|
||||
/* copy the contents if front is newly allocated and back is not */
|
||||
if ((statt_mask & (1 << back)) &&
|
||||
(new_mask & (1 << front)) &&
|
||||
!(new_mask & (1 << back))) {
|
||||
xmesa_st_framebuffer_copy_textures(stfbi, back, front,
|
||||
0, 0, xstfb->texture_width, xstfb->texture_height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue