st/mesa: add a winsys buffers list in st_context
authorCharmaine Lee <charmainel@vmware.com>
Tue, 11 Jul 2017 06:06:11 +0000 (23:06 -0700)
committerCharmaine Lee <charmainel@vmware.com>
Wed, 12 Jul 2017 02:40:17 +0000 (19:40 -0700)
commit147d7fb772a7e6b5207c70d02d133af324b0ccf2
tree43bb9284d387bc85119e76a7a385accdeb6aedf1
parent76acbd07fcc62ea3a6ecd499a553e7a99ec77f47
st/mesa: add a winsys buffers list in st_context

Commit a5e733c6b52e93de3000647d075f5ca2f55fcb71 fixes the dangling
framebuffer object by unreferencing the window system draw/read buffers
when context is released. However this can prematurely destroy the
resources associated with these window system buffers. The problem is
reproducible with Turbine Demo running with VMware driver. In this case,
the depth buffer content was lost when the context is rebound to a
drawable.

To prevent premature destroy of the resources associated with
window system buffers, this patch maintains a list of these buffers in
the context, making sure the reference counts of these buffers will not
reach zero until the associated framebuffer interface objects no
longer exist. This also helps to avoid unnecessary destruction and
re-construction of the resources associated with the framebuffer.

Fixes VMware bug 1909807.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/include/state_tracker/st_api.h
src/gallium/state_trackers/dri/dri_drawable.c
src/gallium/state_trackers/wgl/stw_st.c
src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_context.h
src/mesa/state_tracker/st_manager.c
src/mesa/state_tracker/st_manager.h