diff --git a/.gitignore b/.gitignore index 093975b..992a92d 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,4 @@ mesa-20100720.tar.bz2 /mesa-20130610.tar.xz /mesa-20130723.tar.xz /mesa-20130902.tar.xz +/mesa-20130919.tar.xz diff --git a/0001-st-dri-do-not-create-a-new-context-for-msaa-copy.patch b/0001-st-dri-do-not-create-a-new-context-for-msaa-copy.patch new file mode 100644 index 0000000..8a722db --- /dev/null +++ b/0001-st-dri-do-not-create-a-new-context-for-msaa-copy.patch @@ -0,0 +1,313 @@ +From b217d48364f368f541e53006af5dd56f664be24d Mon Sep 17 00:00:00 2001 +From: Maarten Lankhorst +Date: Mon, 9 Sep 2013 13:02:08 +0200 +Subject: [PATCH] st/dri: do not create a new context for msaa copy +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Commit b77316ad7594f + st/dri: always copy new DRI front and back buffers to corresponding MSAA buffers + +introduced creating a pipe_context for every call to validate, which is not required +because the callers have a context anyway. + +Only exception is egl_g3d_create_pbuffer_from_client_buffer, can someone test if it +still works with NULL passed as context for validate? From examining the code I +believe it does, but I didn't thoroughly test it. + +Signed-off-by: Maarten Lankhorst +Cc: 9.2 +Reviewed-by: Marek Olšák +--- + src/gallium/include/state_tracker/st_api.h | 3 ++- + .../state_trackers/dri/common/dri_drawable.c | 13 +++++++----- + .../state_trackers/dri/common/dri_drawable.h | 3 ++- + src/gallium/state_trackers/dri/drm/dri2.c | 23 ++++++---------------- + src/gallium/state_trackers/dri/sw/drisw.c | 3 ++- + .../state_trackers/egl/common/egl_g3d_api.c | 2 +- + src/gallium/state_trackers/egl/common/egl_g3d_st.c | 6 ++++-- + src/gallium/state_trackers/glx/xlib/xm_st.c | 3 ++- + src/gallium/state_trackers/osmesa/osmesa.c | 3 ++- + src/gallium/state_trackers/vega/vg_manager.c | 3 ++- + src/gallium/state_trackers/wgl/stw_st.c | 3 ++- + src/mesa/state_tracker/st_manager.c | 2 +- + 12 files changed, 34 insertions(+), 33 deletions(-) + +diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h +index 3ecd12e..9dcb76f 100644 +--- a/src/gallium/include/state_tracker/st_api.h ++++ b/src/gallium/include/state_tracker/st_api.h +@@ -342,7 +342,8 @@ struct st_framebuffer_iface + * the last call might be destroyed. This behavior might change in the + * future. + */ +- boolean (*validate)(struct st_framebuffer_iface *stfbi, ++ boolean (*validate)(struct st_context_iface *stctx, ++ struct st_framebuffer_iface *stfbi, + const enum st_attachment_type *statts, + unsigned count, + struct pipe_resource **out); +diff --git a/src/gallium/state_trackers/dri/common/dri_drawable.c b/src/gallium/state_trackers/dri/common/dri_drawable.c +index 18d8d89..ddf9400 100644 +--- a/src/gallium/state_trackers/dri/common/dri_drawable.c ++++ b/src/gallium/state_trackers/dri/common/dri_drawable.c +@@ -42,11 +42,13 @@ static void + swap_fences_unref(struct dri_drawable *draw); + + static boolean +-dri_st_framebuffer_validate(struct st_framebuffer_iface *stfbi, ++dri_st_framebuffer_validate(struct st_context_iface *stctx, ++ struct st_framebuffer_iface *stfbi, + const enum st_attachment_type *statts, + unsigned count, + struct pipe_resource **out) + { ++ struct dri_context *ctx = (struct dri_context *)stctx->st_manager_private; + struct dri_drawable *drawable = + (struct dri_drawable *) stfbi->st_manager_private; + struct dri_screen *screen = dri_screen(drawable->sPriv); +@@ -78,7 +80,7 @@ dri_st_framebuffer_validate(struct st_framebuffer_iface *stfbi, + if (new_stamp && drawable->update_drawable_info) + drawable->update_drawable_info(drawable); + +- drawable->allocate_textures(drawable, statts, count); ++ drawable->allocate_textures(ctx, drawable, statts, count); + + /* add existing textures */ + for (i = 0; i < ST_ATTACHMENT_COUNT; i++) { +@@ -183,7 +185,8 @@ dri_destroy_buffer(__DRIdrawable * dPriv) + * exist. Used by the TFP extension. + */ + static void +-dri_drawable_validate_att(struct dri_drawable *drawable, ++dri_drawable_validate_att(struct dri_context *ctx, ++ struct dri_drawable *drawable, + enum st_attachment_type statt) + { + enum st_attachment_type statts[ST_ATTACHMENT_COUNT]; +@@ -203,7 +206,7 @@ dri_drawable_validate_att(struct dri_drawable *drawable, + + drawable->texture_stamp = drawable->dPriv->lastStamp - 1; + +- drawable->base.validate(&drawable->base, statts, count, NULL); ++ drawable->base.validate(ctx->st, &drawable->base, statts, count, NULL); + } + + /** +@@ -217,7 +220,7 @@ dri_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target, + struct dri_drawable *drawable = dri_drawable(dPriv); + struct pipe_resource *pt; + +- dri_drawable_validate_att(drawable, ST_ATTACHMENT_FRONT_LEFT); ++ dri_drawable_validate_att(ctx, drawable, ST_ATTACHMENT_FRONT_LEFT); + + /* Use the pipe resource associated with the X drawable */ + pt = drawable->textures[ST_ATTACHMENT_FRONT_LEFT]; +diff --git a/src/gallium/state_trackers/dri/common/dri_drawable.h b/src/gallium/state_trackers/dri/common/dri_drawable.h +index 50e5cc4..c514218 100644 +--- a/src/gallium/state_trackers/dri/common/dri_drawable.h ++++ b/src/gallium/state_trackers/dri/common/dri_drawable.h +@@ -71,7 +71,8 @@ struct dri_drawable + struct pipe_surface *drisw_surface; + + /* hooks filled in by dri2 & drisw */ +- void (*allocate_textures)(struct dri_drawable *drawable, ++ void (*allocate_textures)(struct dri_context *ctx, ++ struct dri_drawable *drawable, + const enum st_attachment_type *statts, + unsigned count); + +diff --git a/src/gallium/state_trackers/dri/drm/dri2.c b/src/gallium/state_trackers/dri/drm/dri2.c +index e4477d6..fea1c8d 100644 +--- a/src/gallium/state_trackers/dri/drm/dri2.c ++++ b/src/gallium/state_trackers/dri/drm/dri2.c +@@ -169,7 +169,8 @@ dri2_drawable_get_buffers(struct dri_drawable *drawable, + * Process __DRIbuffer and convert them into pipe_resources. + */ + static void +-dri2_drawable_process_buffers(struct dri_drawable *drawable, ++dri2_drawable_process_buffers(struct dri_context *ctx, ++ struct dri_drawable *drawable, + __DRIbuffer *buffers, unsigned buffer_count, + const enum st_attachment_type *atts, + unsigned att_count) +@@ -180,8 +181,6 @@ dri2_drawable_process_buffers(struct dri_drawable *drawable, + struct winsys_handle whandle; + boolean alloc_depthstencil = FALSE; + unsigned i, j, bind; +- struct pipe_screen *pscreen = screen->base.screen; +- struct pipe_context *pipe = NULL; + + if (drawable->old_num == buffer_count && + drawable->old_w == dri_drawable->w && +@@ -308,14 +307,8 @@ dri2_drawable_process_buffers(struct dri_drawable *drawable, + * The single-sample resources are not exposed + * to the state tracker. + * +- * We don't have a context here, so create one temporarily. +- * We may need to create a persistent context if creation and +- * destruction of the context becomes a bottleneck. + */ +- if (!pipe) +- pipe = pscreen->context_create(pscreen, NULL); +- +- dri_pipe_blit(pipe, ++ dri_pipe_blit(ctx->st->pipe, + drawable->msaa_textures[att], + drawable->textures[att]); + } +@@ -371,11 +364,6 @@ dri2_drawable_process_buffers(struct dri_drawable *drawable, + drawable->old_w = dri_drawable->w; + drawable->old_h = dri_drawable->h; + memcpy(drawable->old, buffers, sizeof(__DRIbuffer) * buffer_count); +- +- if (pipe) { +- pipe->flush(pipe, NULL, 0); +- pipe->destroy(pipe); +- } + } + + static __DRIbuffer * +@@ -470,7 +458,8 @@ dri2_release_buffer(__DRIscreen *sPriv, __DRIbuffer *bPriv) + */ + + static void +-dri2_allocate_textures(struct dri_drawable *drawable, ++dri2_allocate_textures(struct dri_context *ctx, ++ struct dri_drawable *drawable, + const enum st_attachment_type *statts, + unsigned statts_count) + { +@@ -479,7 +468,7 @@ dri2_allocate_textures(struct dri_drawable *drawable, + + buffers = dri2_drawable_get_buffers(drawable, statts, &num_buffers); + if (buffers) +- dri2_drawable_process_buffers(drawable, buffers, num_buffers, ++ dri2_drawable_process_buffers(ctx, drawable, buffers, num_buffers, + statts, statts_count); + } + +diff --git a/src/gallium/state_trackers/dri/sw/drisw.c b/src/gallium/state_trackers/dri/sw/drisw.c +index 41f66d5..121a205 100644 +--- a/src/gallium/state_trackers/dri/sw/drisw.c ++++ b/src/gallium/state_trackers/dri/sw/drisw.c +@@ -182,7 +182,8 @@ drisw_flush_frontbuffer(struct dri_context *ctx, + * framebuffer is resized or destroyed. + */ + static void +-drisw_allocate_textures(struct dri_drawable *drawable, ++drisw_allocate_textures(struct dri_context *stctx, ++ struct dri_drawable *drawable, + const enum st_attachment_type *statts, + unsigned count) + { +diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_api.c b/src/gallium/state_trackers/egl/common/egl_g3d_api.c +index 3ee0d67..46a3245 100644 +--- a/src/gallium/state_trackers/egl/common/egl_g3d_api.c ++++ b/src/gallium/state_trackers/egl/common/egl_g3d_api.c +@@ -443,7 +443,7 @@ egl_g3d_create_pbuffer_from_client_buffer(_EGLDriver *drv, _EGLDisplay *dpy, + gsurf->client_buffer = buffer; + + /* validate now so that it fails if the client buffer is invalid */ +- if (!gsurf->stfbi->validate(gsurf->stfbi, ++ if (!gsurf->stfbi->validate(NULL, gsurf->stfbi, + &gsurf->stvis.render_buffer, 1, &ptex)) { + egl_g3d_destroy_st_framebuffer(gsurf->stfbi); + FREE(gsurf); +diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_st.c b/src/gallium/state_trackers/egl/common/egl_g3d_st.c +index f2ee11c..cf1846c 100644 +--- a/src/gallium/state_trackers/egl/common/egl_g3d_st.c ++++ b/src/gallium/state_trackers/egl/common/egl_g3d_st.c +@@ -149,7 +149,8 @@ pbuffer_allocate_pbuffer_texture(struct egl_g3d_surface *gsurf) + } + + static boolean +-egl_g3d_st_framebuffer_validate_pbuffer(struct st_framebuffer_iface *stfbi, ++egl_g3d_st_framebuffer_validate_pbuffer(struct st_context_iface *stctx, ++ struct st_framebuffer_iface *stfbi, + const enum st_attachment_type *statts, + unsigned count, + struct pipe_resource **out) +@@ -202,7 +203,8 @@ egl_g3d_st_framebuffer_flush_front(struct st_context_iface *stctx, + } + + static boolean +-egl_g3d_st_framebuffer_validate(struct st_framebuffer_iface *stfbi, ++egl_g3d_st_framebuffer_validate(struct st_context_iface *stctx, ++ struct st_framebuffer_iface *stfbi, + const enum st_attachment_type *statts, + unsigned count, + struct pipe_resource **out) +diff --git a/src/gallium/state_trackers/glx/xlib/xm_st.c b/src/gallium/state_trackers/glx/xlib/xm_st.c +index 30e69ea..fb69998 100644 +--- a/src/gallium/state_trackers/glx/xlib/xm_st.c ++++ b/src/gallium/state_trackers/glx/xlib/xm_st.c +@@ -194,7 +194,8 @@ xmesa_st_framebuffer_validate_textures(struct st_framebuffer_iface *stfbi, + * \param out returns resources for each of the attachments + */ + static boolean +-xmesa_st_framebuffer_validate(struct st_framebuffer_iface *stfbi, ++xmesa_st_framebuffer_validate(struct st_context_iface *stctx, ++ struct st_framebuffer_iface *stfbi, + const enum st_attachment_type *statts, + unsigned count, + struct pipe_resource **out) +diff --git a/src/gallium/state_trackers/osmesa/osmesa.c b/src/gallium/state_trackers/osmesa/osmesa.c +index bb85e5c..3546183 100644 +--- a/src/gallium/state_trackers/osmesa/osmesa.c ++++ b/src/gallium/state_trackers/osmesa/osmesa.c +@@ -342,7 +342,8 @@ osmesa_st_framebuffer_flush_front(struct st_context_iface *stctx, + * its resources). + */ + static boolean +-osmesa_st_framebuffer_validate(struct st_framebuffer_iface *stfbi, ++osmesa_st_framebuffer_validate(struct st_context_iface *stctx, ++ struct st_framebuffer_iface *stfbi, + const enum st_attachment_type *statts, + unsigned count, + struct pipe_resource **out) +diff --git a/src/gallium/state_trackers/vega/vg_manager.c b/src/gallium/state_trackers/vega/vg_manager.c +index c079d90..2c43d76 100644 +--- a/src/gallium/state_trackers/vega/vg_manager.c ++++ b/src/gallium/state_trackers/vega/vg_manager.c +@@ -113,7 +113,8 @@ vg_manager_validate_framebuffer(struct vg_context *ctx) + if (stfb->iface_stamp != new_stamp) { + do { + /* validate the fb */ +- if (!stfb->iface->validate(stfb->iface, &stfb->strb_att, ++ if (!stfb->iface->validate((struct st_context_iface *)ctx, ++ stfb->iface, &stfb->strb_att, + 1, &pt) || !pt) + return; + +diff --git a/src/gallium/state_trackers/wgl/stw_st.c b/src/gallium/state_trackers/wgl/stw_st.c +index 9427398..e95c37f 100644 +--- a/src/gallium/state_trackers/wgl/stw_st.c ++++ b/src/gallium/state_trackers/wgl/stw_st.c +@@ -121,7 +121,8 @@ stw_st_framebuffer_validate_locked(struct st_framebuffer_iface *stfb, + } + + static boolean +-stw_st_framebuffer_validate(struct st_framebuffer_iface *stfb, ++stw_st_framebuffer_validate(struct st_context_iface *stctx, ++ struct st_framebuffer_iface *stfb, + const enum st_attachment_type *statts, + unsigned count, + struct pipe_resource **out) +diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c +index 098e6c0..b1fd91a 100644 +--- a/src/mesa/state_tracker/st_manager.c ++++ b/src/mesa/state_tracker/st_manager.c +@@ -189,7 +189,7 @@ st_framebuffer_validate(struct st_framebuffer *stfb, + + /* validate the fb */ + do { +- if (!stfb->iface->validate(stfb->iface, stfb->statts, ++ if (!stfb->iface->validate(&st->iface, stfb->iface, stfb->statts, + stfb->num_statts, textures)) + return; + +-- +1.8.3.1 + diff --git a/mesa.spec b/mesa.spec index 68458dc..40c45f5 100644 --- a/mesa.spec +++ b/mesa.spec @@ -48,7 +48,7 @@ %define _default_patch_fuzz 2 -%define gitdate 20130902 +%define gitdate 20130919 #% define snapshot Summary: Mesa graphics libraries @@ -76,6 +76,9 @@ Patch12: mesa-8.0.1-fix-16bpp.patch Patch15: mesa-9.2-hardware-float.patch Patch16: mesa-9.2-no-useless-vdpau.patch Patch20: mesa-9.2-evergreen-big-endian.patch +# https://bugs.freedesktop.org/show_bug.cgi?id=68665 +# http://cgit.freedesktop.org/mesa/mesa/commit/?id=b217d48364f368f541e53006af5dd56f664be24d +Patch21: 0001-st-dri-do-not-create-a-new-context-for-msaa-copy.patch BuildRequires: pkgconfig autoconf automake libtool %if %{with_hardware} @@ -301,6 +304,7 @@ grep -q ^/ src/gallium/auxiliary/vl/vl_decoder.c && exit 1 %patch15 -p1 -b .hwfloat %patch16 -p1 -b .vdpau %patch20 -p1 -b .egbe +%patch21 -p1 -b .msaa %if 0%{with_private_llvm} sed -i 's/llvm-config/mesa-private-llvm-config-%{__isa_bits}/g' configure.ac @@ -600,6 +604,11 @@ rm -rf $RPM_BUILD_ROOT %endif %changelog +* Thu Sep 19 2013 Igor Gnatenko - 9.2-1.20130919 +- Today's git snap of 9.2 branch +- [NVE4] Fix crashing games when set AA to x2 on GTX760 +- (freedesktop 68665 rhbz 1001714 1001698 1001740 1004674) + * Mon Sep 02 2013 Dave Airlie 9.2-1.20130902 - 9.2 upstream release + fixes from git branch diff --git a/sources b/sources index 201d693..82c8d86 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -a87aedfb1bbd4522b576e99906131008 mesa-20130902.tar.xz +99e1cbf18a76c540d5026a6db6e94199 mesa-20130919.tar.xz