diff --git a/.gitignore b/.gitignore index 9b05a4b..72c37ac 100644 --- a/.gitignore +++ b/.gitignore @@ -62,4 +62,8 @@ mesa-20100720.tar.bz2 /mesa-20131206.tar.xz /mesa-20131220.tar.xz /mesa-20140206.tar.xz -/mesa-20140312.tar.xz +/mesa-20140208.tar.xz +/mesa-20140222.tar.xz +/mesa-20140225.tar.xz +/mesa-20140301.tar.xz +/mesa-20140305.tar.xz diff --git a/0001-mesa-Don-t-optimize-out-glClear-if-drawbuffer-size-i.patch b/0001-mesa-Don-t-optimize-out-glClear-if-drawbuffer-size-i.patch new file mode 100644 index 0000000..7084ab7 --- /dev/null +++ b/0001-mesa-Don-t-optimize-out-glClear-if-drawbuffer-size-i.patch @@ -0,0 +1,34 @@ +From 1fb986f3a722e8476af90b5ab512e495f0caf10f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= +Date: Thu, 6 Mar 2014 16:58:32 -0800 +Subject: [PATCH] mesa: Don't optimize out glClear() if drawbuffer size is 0x0 + +The driver acquires buffer lazily and may not yet have buffers for +a newly current drawable. In that case the drawable size is 0x0 but +we still need to call into the driver and make it fetch buffers and get +the drawable size. + +https://bugs.freedesktop.org/show_bug.cgi?id=75797 +--- + src/mesa/main/clear.c | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/src/mesa/main/clear.c b/src/mesa/main/clear.c +index 077c5fc..c3f7474 100644 +--- a/src/mesa/main/clear.c ++++ b/src/mesa/main/clear.c +@@ -155,11 +155,6 @@ _mesa_Clear( GLbitfield mask ) + return; + } + +- if (ctx->DrawBuffer->Width == 0 || ctx->DrawBuffer->Height == 0 || +- ctx->DrawBuffer->_Xmin >= ctx->DrawBuffer->_Xmax || +- ctx->DrawBuffer->_Ymin >= ctx->DrawBuffer->_Ymax) +- return; +- + if (ctx->RasterDiscard) + return; + +-- +1.8.5.3 + diff --git a/0001-swrast-gallium-classic-add-MESA_copy_sub_buffer-supp.patch b/0001-swrast-gallium-classic-add-MESA_copy_sub_buffer-supp.patch deleted file mode 100644 index c1fdcb2..0000000 --- a/0001-swrast-gallium-classic-add-MESA_copy_sub_buffer-supp.patch +++ /dev/null @@ -1,1038 +0,0 @@ -From ba00f2f6f54cbc5ffdb0f0b94bcd672d147cdc36 Mon Sep 17 00:00:00 2001 -From: Dave Airlie -Date: Thu, 28 Nov 2013 11:08:11 +1000 -Subject: [PATCH] swrast* (gallium, classic): add MESA_copy_sub_buffer support - (v3) - -This patches add MESA_copy_sub_buffer support to the dri sw loader and -then to gallium state tracker, llvmpipe, softpipe and other bits. - -It reuses the dri1 driver extension interface, and it updates the swrast -loader interface for a new putimage which can take a stride. - -I've tested this with gnome-shell with a cogl hacked to reenable sub copies -for llvmpipe and the one piglit test. - -I could probably split this patch up as well. - -v2: pass a pipe_box, to reduce the entrypoints, as per Jose's review, -add to p_screen doc comments. - -v3: finish off winsys interfaces, add swrast classic support as well. - -Reviewed-by: Jose Fonseca -Signed-off-by: Dave Airlie - -swrast: add support for copy_sub_buffer ---- - include/GL/internal/dri_interface.h | 9 +++- - src/gallium/auxiliary/vl/vl_winsys_dri.c | 2 +- - src/gallium/drivers/galahad/glhd_screen.c | 5 +- - src/gallium/drivers/i915/i915_screen.c | 4 +- - src/gallium/drivers/identity/id_screen.c | 5 +- - src/gallium/drivers/llvmpipe/lp_screen.c | 6 +-- - src/gallium/drivers/noop/noop_pipe.c | 2 +- - src/gallium/drivers/rbug/rbug_screen.c | 4 +- - src/gallium/drivers/softpipe/sp_screen.c | 5 +- - src/gallium/drivers/trace/tr_screen.c | 5 +- - src/gallium/include/pipe/p_screen.h | 7 +-- - src/gallium/include/state_tracker/drisw_api.h | 2 + - src/gallium/include/state_tracker/sw_winsys.h | 5 +- - src/gallium/state_trackers/dri/sw/drisw.c | 58 ++++++++++++++++++++-- - .../state_trackers/egl/common/native_helper.c | 2 +- - src/gallium/state_trackers/egl/x11/native_ximage.c | 2 +- - src/gallium/state_trackers/glx/xlib/xm_st.c | 2 +- - src/gallium/state_trackers/vdpau/presentation.c | 2 +- - src/gallium/state_trackers/xvmc/surface.c | 2 +- - .../targets/haiku-softpipe/GalliumContext.cpp | 4 +- - src/gallium/tests/graw/clear.c | 2 +- - src/gallium/tests/graw/fs-test.c | 2 +- - src/gallium/tests/graw/graw_util.h | 2 +- - src/gallium/tests/graw/gs-test.c | 2 +- - src/gallium/tests/graw/quad-sample.c | 2 +- - src/gallium/tests/graw/shader-leak.c | 2 +- - src/gallium/tests/graw/tri-gs.c | 2 +- - src/gallium/tests/graw/tri-instanced.c | 2 +- - src/gallium/tests/graw/vs-test.c | 2 +- - .../winsys/sw/android/android_sw_winsys.cpp | 3 +- - src/gallium/winsys/sw/dri/dri_sw_winsys.c | 16 ++++-- - src/gallium/winsys/sw/fbdev/fbdev_sw_winsys.c | 3 +- - src/gallium/winsys/sw/gdi/gdi_sw_winsys.c | 3 +- - src/gallium/winsys/sw/hgl/hgl_sw_winsys.c | 3 +- - src/gallium/winsys/sw/null/null_sw_winsys.c | 3 +- - src/gallium/winsys/sw/wayland/wayland_sw_winsys.c | 3 +- - src/gallium/winsys/sw/xlib/xlib_sw_winsys.c | 3 +- - src/glx/drisw_glx.c | 43 ++++++++++++++-- - src/mesa/drivers/dri/common/dri_util.c | 15 ++++++ - src/mesa/drivers/dri/common/dri_util.h | 5 +- - src/mesa/drivers/dri/swrast/swrast.c | 35 +++++++++++++ - 41 files changed, 227 insertions(+), 59 deletions(-) - -diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h -index b012570..81f7e60 100644 ---- a/include/GL/internal/dri_interface.h -+++ b/include/GL/internal/dri_interface.h -@@ -437,7 +437,7 @@ struct __DRIdamageExtensionRec { - * SWRast Loader extension. - */ - #define __DRI_SWRAST_LOADER "DRI_SWRastLoader" --#define __DRI_SWRAST_LOADER_VERSION 1 -+#define __DRI_SWRAST_LOADER_VERSION 2 - struct __DRIswrastLoaderExtensionRec { - __DRIextension base; - -@@ -461,6 +461,13 @@ struct __DRIswrastLoaderExtensionRec { - void (*getImage)(__DRIdrawable *readable, - int x, int y, int width, int height, - char *data, void *loaderPrivate); -+ -+ /** -+ * Put image to drawable -+ */ -+ void (*putImage2)(__DRIdrawable *drawable, int op, -+ int x, int y, int width, int height, int stride, -+ char *data, void *loaderPrivate); - }; - - /** -diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri.c b/src/gallium/auxiliary/vl/vl_winsys_dri.c -index 7aec3fe..e747a66 100644 ---- a/src/gallium/auxiliary/vl/vl_winsys_dri.c -+++ b/src/gallium/auxiliary/vl/vl_winsys_dri.c -@@ -115,7 +115,7 @@ static void - vl_dri2_flush_frontbuffer(struct pipe_screen *screen, - struct pipe_resource *resource, - unsigned level, unsigned layer, -- void *context_private) -+ void *context_private, struct pipe_box *sub_box) - { - struct vl_dri_screen *scrn = (struct vl_dri_screen*)context_private; - uint32_t msc_hi, msc_lo; -diff --git a/src/gallium/drivers/galahad/glhd_screen.c b/src/gallium/drivers/galahad/glhd_screen.c -index 16a5ff1..5a91077 100644 ---- a/src/gallium/drivers/galahad/glhd_screen.c -+++ b/src/gallium/drivers/galahad/glhd_screen.c -@@ -275,7 +275,8 @@ static void - galahad_screen_flush_frontbuffer(struct pipe_screen *_screen, - struct pipe_resource *_resource, - unsigned level, unsigned layer, -- void *context_private) -+ void *context_private, -+ struct pipe_box *sub_box) - { - struct galahad_screen *glhd_screen = galahad_screen(_screen); - struct galahad_resource *glhd_resource = galahad_resource(_resource); -@@ -285,7 +286,7 @@ galahad_screen_flush_frontbuffer(struct pipe_screen *_screen, - screen->flush_frontbuffer(screen, - resource, - level, layer, -- context_private); -+ context_private, sub_box); - } - - static void -diff --git a/src/gallium/drivers/i915/i915_screen.c b/src/gallium/drivers/i915/i915_screen.c -index abb9796..8b29fc2 100644 ---- a/src/gallium/drivers/i915/i915_screen.c -+++ b/src/gallium/drivers/i915/i915_screen.c -@@ -423,7 +423,8 @@ static void - i915_flush_frontbuffer(struct pipe_screen *screen, - struct pipe_resource *resource, - unsigned level, unsigned layer, -- void *winsys_drawable_handle) -+ void *winsys_drawable_handle, -+ struct pipe_box *sub_box) - { - /* XXX: Dummy right now. */ - (void)screen; -@@ -431,6 +432,7 @@ i915_flush_frontbuffer(struct pipe_screen *screen, - (void)level; - (void)layer; - (void)winsys_drawable_handle; -+ (void)sub_box; - } - - static void -diff --git a/src/gallium/drivers/identity/id_screen.c b/src/gallium/drivers/identity/id_screen.c -index 26df7f6..28cfa1f6 100644 ---- a/src/gallium/drivers/identity/id_screen.c -+++ b/src/gallium/drivers/identity/id_screen.c -@@ -192,7 +192,8 @@ static void - identity_screen_flush_frontbuffer(struct pipe_screen *_screen, - struct pipe_resource *_resource, - unsigned level, unsigned layer, -- void *context_private) -+ void *context_private, -+ struct pipe_box *sub_box) - { - struct identity_screen *id_screen = identity_screen(_screen); - struct identity_resource *id_resource = identity_resource(_resource); -@@ -202,7 +203,7 @@ identity_screen_flush_frontbuffer(struct pipe_screen *_screen, - screen->flush_frontbuffer(screen, - resource, - level, layer, -- context_private); -+ context_private, sub_box); - } - - static void -diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c -index 742e7f2..c8eb3ba 100644 ---- a/src/gallium/drivers/llvmpipe/lp_screen.c -+++ b/src/gallium/drivers/llvmpipe/lp_screen.c -@@ -411,7 +411,8 @@ static void - llvmpipe_flush_frontbuffer(struct pipe_screen *_screen, - struct pipe_resource *resource, - unsigned level, unsigned layer, -- void *context_private) -+ void *context_private, -+ struct pipe_box *sub_box) - { - struct llvmpipe_screen *screen = llvmpipe_screen(_screen); - struct sw_winsys *winsys = screen->winsys; -@@ -419,10 +420,9 @@ llvmpipe_flush_frontbuffer(struct pipe_screen *_screen, - - assert(texture->dt); - if (texture->dt) -- winsys->displaytarget_display(winsys, texture->dt, context_private); -+ winsys->displaytarget_display(winsys, texture->dt, context_private, sub_box); - } - -- - static void - llvmpipe_destroy_screen( struct pipe_screen *_screen ) - { -diff --git a/src/gallium/drivers/noop/noop_pipe.c b/src/gallium/drivers/noop/noop_pipe.c -index 889e95e..27197a5 100644 ---- a/src/gallium/drivers/noop/noop_pipe.c -+++ b/src/gallium/drivers/noop/noop_pipe.c -@@ -296,7 +296,7 @@ static struct pipe_context *noop_create_context(struct pipe_screen *screen, void - static void noop_flush_frontbuffer(struct pipe_screen *_screen, - struct pipe_resource *resource, - unsigned level, unsigned layer, -- void *context_private) -+ void *context_private, struct pipe_box *box) - { - } - -diff --git a/src/gallium/drivers/rbug/rbug_screen.c b/src/gallium/drivers/rbug/rbug_screen.c -index 2471fdb..8576e2f 100644 ---- a/src/gallium/drivers/rbug/rbug_screen.c -+++ b/src/gallium/drivers/rbug/rbug_screen.c -@@ -190,7 +190,7 @@ static void - rbug_screen_flush_frontbuffer(struct pipe_screen *_screen, - struct pipe_resource *_resource, - unsigned level, unsigned layer, -- void *context_private) -+ void *context_private, struct pipe_box *sub_box) - { - struct rbug_screen *rb_screen = rbug_screen(_screen); - struct rbug_resource *rb_resource = rbug_resource(_resource); -@@ -200,7 +200,7 @@ rbug_screen_flush_frontbuffer(struct pipe_screen *_screen, - screen->flush_frontbuffer(screen, - resource, - level, layer, -- context_private); -+ context_private, sub_box); - } - - static void -diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c -index 0c8c94d..69cb09f 100644 ---- a/src/gallium/drivers/softpipe/sp_screen.c -+++ b/src/gallium/drivers/softpipe/sp_screen.c -@@ -369,7 +369,8 @@ static void - softpipe_flush_frontbuffer(struct pipe_screen *_screen, - struct pipe_resource *resource, - unsigned level, unsigned layer, -- void *context_private) -+ void *context_private, -+ struct pipe_box *sub_box) - { - struct softpipe_screen *screen = softpipe_screen(_screen); - struct sw_winsys *winsys = screen->winsys; -@@ -377,7 +378,7 @@ softpipe_flush_frontbuffer(struct pipe_screen *_screen, - - assert(texture->dt); - if (texture->dt) -- winsys->displaytarget_display(winsys, texture->dt, context_private); -+ winsys->displaytarget_display(winsys, texture->dt, context_private, sub_box); - } - - static uint64_t -diff --git a/src/gallium/drivers/trace/tr_screen.c b/src/gallium/drivers/trace/tr_screen.c -index c6745af..debd031 100644 ---- a/src/gallium/drivers/trace/tr_screen.c -+++ b/src/gallium/drivers/trace/tr_screen.c -@@ -209,7 +209,8 @@ static void - trace_screen_flush_frontbuffer(struct pipe_screen *_screen, - struct pipe_resource *_resource, - unsigned level, unsigned layer, -- void *context_private) -+ void *context_private, -+ struct pipe_box *sub_box) - { - struct trace_screen *tr_scr = trace_screen(_screen); - struct trace_resource *tr_res = trace_resource(_resource); -@@ -226,7 +227,7 @@ trace_screen_flush_frontbuffer(struct pipe_screen *_screen, - trace_dump_arg(ptr, context_private); - */ - -- screen->flush_frontbuffer(screen, resource, level, layer, context_private); -+ screen->flush_frontbuffer(screen, resource, level, layer, context_private, sub_box); - - trace_dump_call_end(); - } -diff --git a/src/gallium/include/pipe/p_screen.h b/src/gallium/include/pipe/p_screen.h -index 3ed7f26..bdd727d 100644 ---- a/src/gallium/include/pipe/p_screen.h -+++ b/src/gallium/include/pipe/p_screen.h -@@ -56,6 +56,7 @@ struct pipe_fence_handle; - struct pipe_resource; - struct pipe_surface; - struct pipe_transfer; -+struct pipe_box; - - - /** -@@ -181,13 +182,13 @@ struct pipe_screen { - * displayed, eg copy fake frontbuffer. - * \param winsys_drawable_handle an opaque handle that the calling context - * gets out-of-band -+ * \param subbox an optional sub region to flush - */ - void (*flush_frontbuffer)( struct pipe_screen *screen, - struct pipe_resource *resource, - unsigned level, unsigned layer, -- void *winsys_drawable_handle ); -- -- -+ void *winsys_drawable_handle, -+ struct pipe_box *subbox ); - - /** Set ptr = fence, with reference counting */ - void (*fence_reference)( struct pipe_screen *screen, -diff --git a/src/gallium/include/state_tracker/drisw_api.h b/src/gallium/include/state_tracker/drisw_api.h -index 944a649..328440c 100644 ---- a/src/gallium/include/state_tracker/drisw_api.h -+++ b/src/gallium/include/state_tracker/drisw_api.h -@@ -13,6 +13,8 @@ struct drisw_loader_funcs - { - void (*put_image) (struct dri_drawable *dri_drawable, - void *data, unsigned width, unsigned height); -+ void (*put_image2) (struct dri_drawable *dri_drawable, -+ void *data, int x, int y, unsigned width, unsigned height, unsigned stride); - }; - - /** -diff --git a/src/gallium/include/state_tracker/sw_winsys.h b/src/gallium/include/state_tracker/sw_winsys.h -index 0b11fe3..d08ddd6 100644 ---- a/src/gallium/include/state_tracker/sw_winsys.h -+++ b/src/gallium/include/state_tracker/sw_winsys.h -@@ -48,7 +48,7 @@ struct winsys_handle; - struct pipe_screen; - struct pipe_context; - struct pipe_resource; -- -+struct pipe_box; - - /** - * Opaque pointer. -@@ -129,7 +129,8 @@ struct sw_winsys - void - (*displaytarget_display)( struct sw_winsys *ws, - struct sw_displaytarget *dt, -- void *context_private ); -+ void *context_private, -+ struct pipe_box *box ); - - void - (*displaytarget_destroy)( struct sw_winsys *ws, -diff --git a/src/gallium/state_trackers/dri/sw/drisw.c b/src/gallium/state_trackers/dri/sw/drisw.c -index 9f00a53..64a64af 100644 ---- a/src/gallium/state_trackers/dri/sw/drisw.c -+++ b/src/gallium/state_trackers/dri/sw/drisw.c -@@ -37,6 +37,7 @@ - #include "util/u_format.h" - #include "util/u_memory.h" - #include "util/u_inlines.h" -+#include "util/u_box.h" - #include "pipe/p_context.h" - #include "state_tracker/drisw_api.h" - #include "state_tracker/st_context.h" -@@ -71,6 +72,18 @@ put_image(__DRIdrawable *dPriv, void *data, unsigned width, unsigned height) - } - - static INLINE void -+put_image2(__DRIdrawable *dPriv, void *data, int x, int y, -+ unsigned width, unsigned height, unsigned stride) -+{ -+ __DRIscreen *sPriv = dPriv->driScreenPriv; -+ const __DRIswrastLoaderExtension *loader = sPriv->swrast_loader; -+ -+ loader->putImage2(dPriv, __DRI_SWRAST_IMAGE_OP_SWAP, -+ x, y, width, height, stride, -+ data, dPriv->loaderPrivate); -+} -+ -+static INLINE void - get_image(__DRIdrawable *dPriv, int x, int y, int width, int height, void *data) - { - __DRIscreen *sPriv = dPriv->driScreenPriv; -@@ -99,9 +112,19 @@ drisw_put_image(struct dri_drawable *drawable, - put_image(dPriv, data, width, height); - } - -+static void -+drisw_put_image2(struct dri_drawable *drawable, -+ void *data, int x, int y, unsigned width, unsigned height, -+ unsigned stride) -+{ -+ __DRIdrawable *dPriv = drawable->dPriv; -+ -+ put_image2(dPriv, data, x, y, width, height, stride); -+} -+ - static INLINE void - drisw_present_texture(__DRIdrawable *dPriv, -- struct pipe_resource *ptex) -+ struct pipe_resource *ptex, struct pipe_box *sub_box) - { - struct dri_drawable *drawable = dri_drawable(dPriv); - struct dri_screen *screen = dri_screen(drawable->sPriv); -@@ -109,7 +132,7 @@ drisw_present_texture(__DRIdrawable *dPriv, - if (swrast_no_present) - return; - -- screen->base.screen->flush_frontbuffer(screen->base.screen, ptex, 0, 0, drawable); -+ screen->base.screen->flush_frontbuffer(screen->base.screen, ptex, 0, 0, drawable, sub_box); - } - - static INLINE void -@@ -126,7 +149,7 @@ static INLINE void - drisw_copy_to_front(__DRIdrawable * dPriv, - struct pipe_resource *ptex) - { -- drisw_present_texture(dPriv, ptex); -+ drisw_present_texture(dPriv, ptex, NULL); - - drisw_invalidate_drawable(dPriv); - } -@@ -158,6 +181,30 @@ drisw_swap_buffers(__DRIdrawable *dPriv) - } - - static void -+drisw_copy_sub_buffer(__DRIdrawable *dPriv, int x, int y, -+ int w, int h) -+{ -+ struct dri_context *ctx = dri_get_current(dPriv->driScreenPriv); -+ struct dri_drawable *drawable = dri_drawable(dPriv); -+ struct pipe_resource *ptex; -+ struct pipe_box box; -+ if (!ctx) -+ return; -+ -+ ptex = drawable->textures[ST_ATTACHMENT_BACK_LEFT]; -+ -+ if (ptex) { -+ if (ctx->pp && drawable->textures[ST_ATTACHMENT_DEPTH_STENCIL]) -+ pp_run(ctx->pp, ptex, ptex, drawable->textures[ST_ATTACHMENT_DEPTH_STENCIL]); -+ -+ ctx->st->flush(ctx->st, ST_FLUSH_FRONT, NULL); -+ -+ u_box_2d(x, dPriv->h - y - h, w, h, &box); -+ drisw_present_texture(dPriv, ptex, &box); -+ } -+} -+ -+static void - drisw_flush_frontbuffer(struct dri_context *ctx, - struct dri_drawable *drawable, - enum st_attachment_type statt) -@@ -288,7 +335,8 @@ static const __DRIextension *drisw_screen_extensions[] = { - }; - - static struct drisw_loader_funcs drisw_lf = { -- .put_image = drisw_put_image -+ .put_image = drisw_put_image, -+ .put_image2 = drisw_put_image2 - }; - - static const __DRIconfig ** -@@ -359,12 +407,14 @@ const struct __DriverAPIRec driDriverAPI = { - .SwapBuffers = drisw_swap_buffers, - .MakeCurrent = dri_make_current, - .UnbindContext = dri_unbind_context, -+ .CopySubBuffer = drisw_copy_sub_buffer, - }; - - /* This is the table of extensions that the loader will dlsym() for. */ - PUBLIC const __DRIextension *__driDriverExtensions[] = { - &driCoreExtension.base, - &driSWRastExtension.base, -+ &driCopySubBufferExtension, - &gallium_config_options.base, - NULL - }; -diff --git a/src/gallium/state_trackers/egl/common/native_helper.c b/src/gallium/state_trackers/egl/common/native_helper.c -index d1e1acd..4a77a50 100644 ---- a/src/gallium/state_trackers/egl/common/native_helper.c -+++ b/src/gallium/state_trackers/egl/common/native_helper.c -@@ -244,7 +244,7 @@ resource_surface_present(struct resource_surface *rsurf, - return TRUE; - - rsurf->screen->flush_frontbuffer(rsurf->screen, -- pres, 0, 0, winsys_drawable_handle); -+ pres, 0, 0, winsys_drawable_handle, NULL); - - return TRUE; - } -diff --git a/src/gallium/state_trackers/egl/x11/native_ximage.c b/src/gallium/state_trackers/egl/x11/native_ximage.c -index 28c6442..019e535 100644 ---- a/src/gallium/state_trackers/egl/x11/native_ximage.c -+++ b/src/gallium/state_trackers/egl/x11/native_ximage.c -@@ -476,7 +476,7 @@ ximage_display_copy_to_pixmap(struct native_display *ndpy, - xdraw.drawable = (Drawable) pix; - - xdpy->base.screen->flush_frontbuffer(xdpy->base.screen, -- src, 0, 0, &xdraw); -+ src, 0, 0, &xdraw, NULL); - - return TRUE; - } -diff --git a/src/gallium/state_trackers/glx/xlib/xm_st.c b/src/gallium/state_trackers/glx/xlib/xm_st.c -index fb69998..7f73a3a 100644 ---- a/src/gallium/state_trackers/glx/xlib/xm_st.c -+++ b/src/gallium/state_trackers/glx/xlib/xm_st.c -@@ -74,7 +74,7 @@ xmesa_st_framebuffer_display(struct st_framebuffer_iface *stfbi, - pres = xstfb->display_resource; - } - -- xstfb->screen->flush_frontbuffer(xstfb->screen, pres, 0, 0, &xstfb->buffer->ws); -+ xstfb->screen->flush_frontbuffer(xstfb->screen, pres, 0, 0, &xstfb->buffer->ws, NULL); - return TRUE; - } - -diff --git a/src/gallium/state_trackers/vdpau/presentation.c b/src/gallium/state_trackers/vdpau/presentation.c -index 81e0328..b574ddd 100644 ---- a/src/gallium/state_trackers/vdpau/presentation.c -+++ b/src/gallium/state_trackers/vdpau/presentation.c -@@ -269,7 +269,7 @@ vlVdpPresentationQueueDisplay(VdpPresentationQueue presentation_queue, - pipe->screen->flush_frontbuffer - ( - pipe->screen, tex, 0, 0, -- vl_screen_get_private(pq->device->vscreen) -+ vl_screen_get_private(pq->device->vscreen), NULL - ); - - pipe->screen->fence_reference(pipe->screen, &surf->fence, NULL); -diff --git a/src/gallium/state_trackers/xvmc/surface.c b/src/gallium/state_trackers/xvmc/surface.c -index 13f337c..f6876be 100644 ---- a/src/gallium/state_trackers/xvmc/surface.c -+++ b/src/gallium/state_trackers/xvmc/surface.c -@@ -447,7 +447,7 @@ Status XvMCPutSurface(Display *dpy, XvMCSurface *surface, Drawable drawable, - pipe->screen->flush_frontbuffer - ( - pipe->screen, tex, 0, 0, -- vl_screen_get_private(context_priv->vscreen) -+ vl_screen_get_private(context_priv->vscreen), NULL - ); - - if(dump_window == -1) { -diff --git a/src/gallium/targets/haiku-softpipe/GalliumContext.cpp b/src/gallium/targets/haiku-softpipe/GalliumContext.cpp -index b750f65..1078cb7 100644 ---- a/src/gallium/targets/haiku-softpipe/GalliumContext.cpp -+++ b/src/gallium/targets/haiku-softpipe/GalliumContext.cpp -@@ -504,14 +504,14 @@ GalliumContext::SwapBuffers(context_id contextID) - // We pass our destination bitmap to flush_fronbuffer which passes it - // to the private winsys display call. - fScreen->flush_frontbuffer(fScreen, surface->texture, 0, 0, -- context->bitmap); -+ context->bitmap, NULL); - } - - #if 0 - // TODO... should we flush the z stencil buffer? - pipe_surface* zSurface = stContext->state.framebuffer.zsbuf; - fScreen->flush_frontbuffer(fScreen, zSurface->texture, 0, 0, -- context->bitmap); -+ context->bitmap, NULL); - #endif - - return B_OK; -diff --git a/src/gallium/tests/graw/clear.c b/src/gallium/tests/graw/clear.c -index 77c59db..f38da47 100644 ---- a/src/gallium/tests/graw/clear.c -+++ b/src/gallium/tests/graw/clear.c -@@ -33,7 +33,7 @@ static void draw( void ) - - graw_save_surface_to_file(ctx, surf, NULL); - -- screen->flush_frontbuffer(screen, tex, 0, 0, window); -+ screen->flush_frontbuffer(screen, tex, 0, 0, window, NULL); - } - - static void init( void ) -diff --git a/src/gallium/tests/graw/fs-test.c b/src/gallium/tests/graw/fs-test.c -index 4d38e08..0560e31 100644 ---- a/src/gallium/tests/graw/fs-test.c -+++ b/src/gallium/tests/graw/fs-test.c -@@ -240,7 +240,7 @@ static void draw( void ) - - graw_save_surface_to_file(ctx, surf, NULL); - -- screen->flush_frontbuffer(screen, rttex, 0, 0, window); -+ screen->flush_frontbuffer(screen, rttex, 0, 0, window, NULL); - } - - #define SIZE 16 -diff --git a/src/gallium/tests/graw/graw_util.h b/src/gallium/tests/graw/graw_util.h -index 8557285..1856f0d 100644 ---- a/src/gallium/tests/graw/graw_util.h -+++ b/src/gallium/tests/graw/graw_util.h -@@ -211,7 +211,7 @@ static INLINE void - graw_util_flush_front(const struct graw_info *info) - { - info->screen->flush_frontbuffer(info->screen, info->color_buf[0], -- 0, 0, info->window); -+ 0, 0, info->window, NULL); - } - - -diff --git a/src/gallium/tests/graw/gs-test.c b/src/gallium/tests/graw/gs-test.c -index 3ada18a..879bf3e 100644 ---- a/src/gallium/tests/graw/gs-test.c -+++ b/src/gallium/tests/graw/gs-test.c -@@ -347,7 +347,7 @@ static void draw( void ) - - graw_save_surface_to_file(ctx, surf, NULL); - -- screen->flush_frontbuffer(screen, rttex, 0, 0, window); -+ screen->flush_frontbuffer(screen, rttex, 0, 0, window, NULL); - } - - #define SIZE 16 -diff --git a/src/gallium/tests/graw/quad-sample.c b/src/gallium/tests/graw/quad-sample.c -index b4a29e1..2e248a8 100644 ---- a/src/gallium/tests/graw/quad-sample.c -+++ b/src/gallium/tests/graw/quad-sample.c -@@ -156,7 +156,7 @@ static void draw( void ) - - graw_save_surface_to_file(ctx, surf, NULL); - -- screen->flush_frontbuffer(screen, rttex, 0, 0, window); -+ screen->flush_frontbuffer(screen, rttex, 0, 0, window, NULL); - } - - #define SIZE 16 -diff --git a/src/gallium/tests/graw/shader-leak.c b/src/gallium/tests/graw/shader-leak.c -index 4ef752b..754ada6 100644 ---- a/src/gallium/tests/graw/shader-leak.c -+++ b/src/gallium/tests/graw/shader-leak.c -@@ -158,7 +158,7 @@ static void draw( void ) - ctx->delete_fs_state(ctx, fs); - } - -- screen->flush_frontbuffer(screen, tex, 0, 0, window); -+ screen->flush_frontbuffer(screen, tex, 0, 0, window, NULL); - ctx->destroy(ctx); - - exit(0); -diff --git a/src/gallium/tests/graw/tri-gs.c b/src/gallium/tests/graw/tri-gs.c -index 37323aa..24de12b 100644 ---- a/src/gallium/tests/graw/tri-gs.c -+++ b/src/gallium/tests/graw/tri-gs.c -@@ -168,7 +168,7 @@ static void draw( void ) - util_draw_arrays(ctx, PIPE_PRIM_TRIANGLES, 0, 3); - ctx->flush(ctx, NULL, 0); - -- screen->flush_frontbuffer(screen, tex, 0, 0, window); -+ screen->flush_frontbuffer(screen, tex, 0, 0, window, NULL); - } - - -diff --git a/src/gallium/tests/graw/tri-instanced.c b/src/gallium/tests/graw/tri-instanced.c -index f84463d..55bc3a5 100644 ---- a/src/gallium/tests/graw/tri-instanced.c -+++ b/src/gallium/tests/graw/tri-instanced.c -@@ -219,7 +219,7 @@ static void draw( void ) - - graw_save_surface_to_file(ctx, surf, NULL); - -- screen->flush_frontbuffer(screen, tex, 0, 0, window); -+ screen->flush_frontbuffer(screen, tex, 0, 0, window, NULL); - } - - -diff --git a/src/gallium/tests/graw/vs-test.c b/src/gallium/tests/graw/vs-test.c -index f7d4d73..0e9fc53 100644 ---- a/src/gallium/tests/graw/vs-test.c -+++ b/src/gallium/tests/graw/vs-test.c -@@ -234,7 +234,7 @@ static void draw( void ) - - graw_save_surface_to_file(ctx, surf, NULL); - -- screen->flush_frontbuffer(screen, rttex, 0, 0, window); -+ screen->flush_frontbuffer(screen, rttex, 0, 0, window, NULL); - } - - #define SIZE 16 -diff --git a/src/gallium/winsys/sw/android/android_sw_winsys.cpp b/src/gallium/winsys/sw/android/android_sw_winsys.cpp -index cb91aad..4b1040c 100644 ---- a/src/gallium/winsys/sw/android/android_sw_winsys.cpp -+++ b/src/gallium/winsys/sw/android/android_sw_winsys.cpp -@@ -74,7 +74,8 @@ namespace android { - static void - android_displaytarget_display(struct sw_winsys *ws, - struct sw_displaytarget *dt, -- void *context_private) -+ void *context_private, -+ struct pipe_box *box) - { - } - -diff --git a/src/gallium/winsys/sw/dri/dri_sw_winsys.c b/src/gallium/winsys/sw/dri/dri_sw_winsys.c -index edb3a38..6fed22b 100644 ---- a/src/gallium/winsys/sw/dri/dri_sw_winsys.c -+++ b/src/gallium/winsys/sw/dri/dri_sw_winsys.c -@@ -166,25 +166,33 @@ dri_sw_displaytarget_get_handle(struct sw_winsys *winsys, - static void - dri_sw_displaytarget_display(struct sw_winsys *ws, - struct sw_displaytarget *dt, -- void *context_private) -+ void *context_private, -+ struct pipe_box *box) - { - struct dri_sw_winsys *dri_sw_ws = dri_sw_winsys(ws); - struct dri_sw_displaytarget *dri_sw_dt = dri_sw_displaytarget(dt); - struct dri_drawable *dri_drawable = (struct dri_drawable *)context_private; - unsigned width, height; -+ unsigned blsize = util_format_get_blocksize(dri_sw_dt->format); - - /* Set the width to 'stride / cpp'. - * - * PutImage correctly clips to the width of the dst drawable. - */ -- width = dri_sw_dt->stride / util_format_get_blocksize(dri_sw_dt->format); -+ width = dri_sw_dt->stride / blsize; - - height = dri_sw_dt->height; - -- dri_sw_ws->lf->put_image(dri_drawable, dri_sw_dt->data, width, height); -+ if (box) { -+ void *data; -+ data = dri_sw_dt->data + (dri_sw_dt->stride * box->y) + box->x * blsize; -+ dri_sw_ws->lf->put_image2(dri_drawable, data, -+ box->x, box->y, box->width, box->height, dri_sw_dt->stride); -+ } else { -+ dri_sw_ws->lf->put_image(dri_drawable, dri_sw_dt->data, width, height); -+ } - } - -- - static void - dri_destroy_sw_winsys(struct sw_winsys *winsys) - { -diff --git a/src/gallium/winsys/sw/fbdev/fbdev_sw_winsys.c b/src/gallium/winsys/sw/fbdev/fbdev_sw_winsys.c -index a280985..cc3ce1a 100644 ---- a/src/gallium/winsys/sw/fbdev/fbdev_sw_winsys.c -+++ b/src/gallium/winsys/sw/fbdev/fbdev_sw_winsys.c -@@ -74,7 +74,8 @@ fbdev_sw_winsys(struct sw_winsys *ws) - static void - fbdev_displaytarget_display(struct sw_winsys *ws, - struct sw_displaytarget *dt, -- void *winsys_private) -+ void *winsys_private, -+ struct pipe_box *box) - { - struct fbdev_sw_winsys *fbdev = fbdev_sw_winsys(ws); - struct fbdev_sw_displaytarget *src = fbdev_sw_displaytarget(dt); -diff --git a/src/gallium/winsys/sw/gdi/gdi_sw_winsys.c b/src/gallium/winsys/sw/gdi/gdi_sw_winsys.c -index 2e12f6e..aae3ec5 100644 ---- a/src/gallium/winsys/sw/gdi/gdi_sw_winsys.c -+++ b/src/gallium/winsys/sw/gdi/gdi_sw_winsys.c -@@ -207,7 +207,8 @@ gdi_sw_display( struct sw_winsys *winsys, - static void - gdi_sw_displaytarget_display(struct sw_winsys *winsys, - struct sw_displaytarget *dt, -- void *context_private) -+ void *context_private, -+ struct pipe_box *box) - { - /* nasty: - */ -diff --git a/src/gallium/winsys/sw/hgl/hgl_sw_winsys.c b/src/gallium/winsys/sw/hgl/hgl_sw_winsys.c -index b09584c..27eca2b 100644 ---- a/src/gallium/winsys/sw/hgl/hgl_sw_winsys.c -+++ b/src/gallium/winsys/sw/hgl/hgl_sw_winsys.c -@@ -160,7 +160,8 @@ hgl_winsys_displaytarget_unmap(struct sw_winsys* winsys, - - static void - hgl_winsys_displaytarget_display(struct sw_winsys* winsys, -- struct sw_displaytarget* displayTarget, void* contextPrivate) -+ struct sw_displaytarget* displayTarget, void* contextPrivate, -+ struct pipe_box *box) - { - assert(contextPrivate); - -diff --git a/src/gallium/winsys/sw/null/null_sw_winsys.c b/src/gallium/winsys/sw/null/null_sw_winsys.c -index 44849da..9c8b3ec 100644 ---- a/src/gallium/winsys/sw/null/null_sw_winsys.c -+++ b/src/gallium/winsys/sw/null/null_sw_winsys.c -@@ -114,7 +114,8 @@ null_sw_displaytarget_get_handle(struct sw_winsys *winsys, - static void - null_sw_displaytarget_display(struct sw_winsys *winsys, - struct sw_displaytarget *dt, -- void *context_private) -+ void *context_private, -+ struct pipe_box *box) - { - assert(0); - } -diff --git a/src/gallium/winsys/sw/wayland/wayland_sw_winsys.c b/src/gallium/winsys/sw/wayland/wayland_sw_winsys.c -index f432de9..e428613 100644 ---- a/src/gallium/winsys/sw/wayland/wayland_sw_winsys.c -+++ b/src/gallium/winsys/sw/wayland/wayland_sw_winsys.c -@@ -75,7 +75,8 @@ wayland_sw_winsys(struct sw_winsys *ws) - static void - wayland_displaytarget_display(struct sw_winsys *ws, - struct sw_displaytarget *dt, -- void *context_private) -+ void *context_private, -+ struct pipe_box *box) - { - } - -diff --git a/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c b/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c -index 6e71530..99da2ae 100644 ---- a/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c -+++ b/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c -@@ -376,7 +376,8 @@ xlib_sw_display(struct xlib_drawable *xlib_drawable, - static void - xlib_displaytarget_display(struct sw_winsys *ws, - struct sw_displaytarget *dt, -- void *context_private) -+ void *context_private, -+ struct pipe_box *box) - { - struct xlib_drawable *xlib_drawable = (struct xlib_drawable *)context_private; - xlib_sw_display(xlib_drawable, dt); -diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c -index cb1d650..13a4b96 100644 ---- a/src/glx/drisw_glx.c -+++ b/src/glx/drisw_glx.c -@@ -49,6 +49,7 @@ struct drisw_screen - const __DRIcoreExtension *core; - const __DRIswrastExtension *swrast; - const __DRItexBufferExtension *texBuffer; -+ const __DRIcopySubBufferExtension *copySubBuffer; - - const __DRIconfig **driver_configs; - -@@ -171,9 +172,9 @@ bytes_per_line(unsigned pitch_bits, unsigned mul) - } - - static void --swrastPutImage(__DRIdrawable * draw, int op, -- int x, int y, int w, int h, -- char *data, void *loaderPrivate) -+swrastPutImage2(__DRIdrawable * draw, int op, -+ int x, int y, int w, int h, int stride, -+ char *data, void *loaderPrivate) - { - struct drisw_drawable *pdp = loaderPrivate; - __GLXDRIdrawable *pdraw = &(pdp->base); -@@ -199,7 +200,7 @@ swrastPutImage(__DRIdrawable * draw, int op, - ximage->data = data; - ximage->width = w; - ximage->height = h; -- ximage->bytes_per_line = bytes_per_line(w * ximage->bits_per_pixel, 32); -+ ximage->bytes_per_line = stride ? stride : bytes_per_line(w * ximage->bits_per_pixel, 32); - - XPutImage(dpy, drawable, gc, ximage, 0, 0, x, y, w, h); - -@@ -207,6 +208,14 @@ swrastPutImage(__DRIdrawable * draw, int op, - } - - static void -+swrastPutImage(__DRIdrawable * draw, int op, -+ int x, int y, int w, int h, -+ char *data, void *loaderPrivate) -+{ -+ swrastPutImage2(draw, op, x, y, w, h, 0, data, loaderPrivate); -+} -+ -+static void - swrastGetImage(__DRIdrawable * read, - int x, int y, int w, int h, - char *data, void *loaderPrivate) -@@ -234,7 +243,8 @@ static const __DRIswrastLoaderExtension swrastLoaderExtension = { - {__DRI_SWRAST_LOADER, __DRI_SWRAST_LOADER_VERSION}, - swrastGetDrawableInfo, - swrastPutImage, -- swrastGetImage -+ swrastGetImage, -+ swrastPutImage2, - }; - - static const __DRIextension *loader_extensions[] = { -@@ -585,6 +595,21 @@ driswSwapBuffers(__GLXDRIdrawable * pdraw, - } - - static void -+driswCopySubBuffer(__GLXDRIdrawable * pdraw, -+ int x, int y, int width, int height, Bool flush) -+{ -+ struct drisw_drawable *pdp = (struct drisw_drawable *) pdraw; -+ struct drisw_screen *psc = (struct drisw_screen *) pdp->base.psc; -+ -+ if (flush) { -+ glFlush(); -+ } -+ -+ (*psc->copySubBuffer->copySubBuffer) (pdp->driDrawable, -+ x, y, width, height); -+} -+ -+static void - driswDestroyScreen(struct glx_screen *base) - { - struct drisw_screen *psc = (struct drisw_screen *) base; -@@ -632,6 +657,9 @@ driswBindExtensions(struct drisw_screen *psc, const __DRIextension **extensions) - "GLX_EXT_create_context_es2_profile"); - } - -+ if (psc->copySubBuffer) -+ __glXEnableDirectExtension(&psc->base, "GLX_MESA_copy_sub_buffer"); -+ - /* FIXME: Figure out what other extensions can be ported here from dri2. */ - for (i = 0; extensions[i]; i++) { - if ((strcmp(extensions[i]->name, __DRI_TEX_BUFFER) == 0)) { -@@ -673,6 +701,8 @@ driswCreateScreen(int screen, struct glx_display *priv) - psc->core = (__DRIcoreExtension *) extensions[i]; - if (strcmp(extensions[i]->name, __DRI_SWRAST) == 0) - psc->swrast = (__DRIswrastExtension *) extensions[i]; -+ if (strcmp(extensions[i]->name, __DRI_COPY_SUB_BUFFER) == 0) -+ psc->copySubBuffer = (__DRIcopySubBufferExtension *) extensions[i]; - } - - if (psc->core == NULL || psc->swrast == NULL) { -@@ -718,6 +748,9 @@ driswCreateScreen(int screen, struct glx_display *priv) - psp->createDrawable = driswCreateDrawable; - psp->swapBuffers = driswSwapBuffers; - -+ if (psc->copySubBuffer) -+ psp->copySubBuffer = driswCopySubBuffer; -+ - return &psc->base; - - handle_error: -diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c -index 0bce77e..fd2eca7 100644 ---- a/src/mesa/drivers/dri/common/dri_util.c -+++ b/src/mesa/drivers/dri/common/dri_util.c -@@ -873,3 +873,18 @@ const __DRIimageDriverExtension driImageDriverExtension = { - .getAPIMask = driGetAPIMask, - .createContextAttribs = driCreateContextAttribs, - }; -+ -+/* swrast copy sub buffer entrypoint. */ -+static void driCopySubBuffer(__DRIdrawable *pdp, int x, int y, -+ int w, int h) -+{ -+ assert(pdp->driScreenPriv->swrast_loader); -+ -+ pdp->driScreenPriv->driver->CopySubBuffer(pdp, x, y, w, h); -+} -+ -+/* for swrast only */ -+const __DRIcopySubBufferExtension driCopySubBufferExtension = { -+ { __DRI_COPY_SUB_BUFFER, 1 }, -+ .copySubBuffer = driCopySubBuffer, -+}; -diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h -index 79a8564..4cfa75d 100644 ---- a/src/mesa/drivers/dri/common/dri_util.h -+++ b/src/mesa/drivers/dri/common/dri_util.h -@@ -66,7 +66,7 @@ extern const __DRIcoreExtension driCoreExtension; - extern const __DRIswrastExtension driSWRastExtension; - extern const __DRIdri2Extension driDRI2Extension; - extern const __DRI2configQueryExtension dri2ConfigQueryExtension; -- -+extern const __DRIcopySubBufferExtension driCopySubBufferExtension; - /** - * Driver callback functions. - * -@@ -115,6 +115,9 @@ struct __DriverAPIRec { - int width, int height); - - void (*ReleaseBuffer) (__DRIscreen *screenPrivate, __DRIbuffer *buffer); -+ -+ void (*CopySubBuffer)(__DRIdrawable *driDrawPriv, int x, int y, -+ int w, int h); - }; - - extern const struct __DriverAPIRec driDriverAPI; -diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c -index 0e1c530..7eed5a4 100644 ---- a/src/mesa/drivers/dri/swrast/swrast.c -+++ b/src/mesa/drivers/dri/swrast/swrast.c -@@ -820,6 +820,39 @@ dri_unbind_context(__DRIcontext * cPriv) - return GL_TRUE; - } - -+static void -+dri_copy_sub_buffer(__DRIdrawable *dPriv, int x, int y, -+ int w, int h) -+{ -+ __DRIscreen *sPriv = dPriv->driScreenPriv; -+ void *data; -+ int iy; -+ struct dri_drawable *drawable = dri_drawable(dPriv); -+ struct gl_framebuffer *fb; -+ struct dri_swrast_renderbuffer *frontrb, *backrb; -+ -+ TRACE; -+ -+ fb = &drawable->Base; -+ -+ frontrb = -+ dri_swrast_renderbuffer(fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer); -+ backrb = -+ dri_swrast_renderbuffer(fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer); -+ -+ /* check for signle-buffered */ -+ if (backrb == NULL) -+ return; -+ -+ iy = frontrb->Base.Base.Height - y - h; -+ data = (char *)backrb->Base.Buffer + (iy * backrb->pitch) + (x * ((backrb->bpp + 7) / 8)); -+ sPriv->swrast_loader->putImage2(dPriv, __DRI_SWRAST_IMAGE_OP_SWAP, -+ x, iy, w, h, -+ frontrb->pitch, -+ data, -+ dPriv->loaderPrivate); -+} -+ - - static const struct __DriverAPIRec swrast_driver_api = { - .InitScreen = dri_init_screen, -@@ -831,6 +864,7 @@ static const struct __DriverAPIRec swrast_driver_api = { - .SwapBuffers = dri_swap_buffers, - .MakeCurrent = dri_make_current, - .UnbindContext = dri_unbind_context, -+ .CopySubBuffer = dri_copy_sub_buffer, - }; - - static const struct __DRIDriverVtableExtensionRec swrast_vtable = { -@@ -841,6 +875,7 @@ static const struct __DRIDriverVtableExtensionRec swrast_vtable = { - static const __DRIextension *swrast_driver_extensions[] = { - &driCoreExtension.base, - &driSWRastExtension.base, -+ &driCopySubBufferExtension.base, - &swrast_vtable.base, - NULL - }; --- -1.8.3.1 - diff --git a/make-git-snapshot.sh b/make-git-snapshot.sh index 57c3db3..70be1fe 100755 --- a/make-git-snapshot.sh +++ b/make-git-snapshot.sh @@ -15,11 +15,11 @@ DIRNAME=mesa-$( date +%Y%m%d ) echo REF ${REF:+--reference $REF} echo DIRNAME $DIRNAME -echo HEAD ${1:-10.0} +echo HEAD ${1:-10.1} rm -rf $DIRNAME -git clone --depth 1 ${REF:+--reference $REF} --branch 10.0 \ +git clone --depth 1 ${REF:+--reference $REF} --branch 10.1 \ git://git.freedesktop.org/git/mesa/mesa $DIRNAME GIT_DIR=$DIRNAME/.git git archive --format=tar --prefix=$DIRNAME/ ${1:-HEAD} \ diff --git a/mesa.spec b/mesa.spec index 2131a6a..990c82d 100644 --- a/mesa.spec +++ b/mesa.spec @@ -7,10 +7,14 @@ %define with_wayland 1 %endif +%ifarch ppc64le +%undefine with_vdpau +%endif + # S390 doesn't have video cards, but we need swrast for xserver's GLX # llvm (and thus llvmpipe) doesn't actually work on ppc32 or s390 -%ifnarch s390 ppc +%ifnarch s390 ppc ppc64le %define with_llvm 1 %endif @@ -23,9 +27,9 @@ %define with_freedreno 1 %endif -%ifarch s390 s390x +%ifarch s390 s390x ppc64le %define with_hardware 0 -%ifarch s390 +%ifarch s390 ppc64le %define base_drivers swrast %endif %else @@ -36,7 +40,7 @@ %define with_vmware 1 %define with_opencl 1 %endif -%ifarch ppc +%ifarch ppc ppc64le %define platform_drivers ,swrast %endif %endif @@ -45,13 +49,13 @@ %define _default_patch_fuzz 2 -%define gitdate 20140312 +%define gitdate 20140305 #% define snapshot Summary: Mesa graphics libraries Name: mesa -Version: 10.0.4 -Release: 1.%{gitdate}%{?dist} +Version: 10.1 +Release: 5.%{gitdate}%{?dist} License: MIT Group: System Environment/Libraries URL: http://www.mesa3d.org @@ -73,12 +77,14 @@ Patch12: mesa-8.0.1-fix-16bpp.patch Patch15: mesa-9.2-hardware-float.patch Patch20: mesa-9.2-evergreen-big-endian.patch -# backport from upstream to allow cogl use copy_sub_buffer -Patch30: 0001-swrast-gallium-classic-add-MESA_copy_sub_buffer-supp.patch +# https://bugs.freedesktop.org/show_bug.cgi?id=75797#c1 +Patch21: 0001-mesa-Don-t-optimize-out-glClear-if-drawbuffer-size-i.patch # https://bugs.freedesktop.org/show_bug.cgi?id=73512 Patch99: 0001-opencl-use-versioned-.so-in-mesa.icd.patch +Patch100: radeonsi-llvm-version-hack.patch + BuildRequires: pkgconfig autoconf automake libtool %if %{with_hardware} BuildRequires: kernel-headers @@ -95,6 +101,7 @@ BuildRequires: libXfixes-devel BuildRequires: libXdamage-devel BuildRequires: libXi-devel BuildRequires: libXmu-devel +BuildRequires: libxshmfence-devel BuildRequires: elfutils BuildRequires: python BuildRequires: gettext @@ -102,7 +109,7 @@ BuildRequires: gettext %if 0%{?with_private_llvm} BuildRequires: mesa-private-llvm-devel %else -BuildRequires: llvm-devel >= 3.0 +BuildRequires: llvm-devel >= 3.4-5 %if 0%{?with_opencl} BuildRequires: clang-devel >= 3.0 %endif @@ -327,13 +334,14 @@ grep -q ^/ src/gallium/auxiliary/vl/vl_decoder.c && exit 1 %patch15 -p1 -b .hwfloat %patch20 -p1 -b .egbe - -%patch30 -p1 -b .copy_sub_buffer +%patch21 -p1 -b .clear %if 0%{?with_opencl} %patch99 -p1 -b .icd %endif +%patch100 -p1 -b .radeonsi + %if 0%{with_private_llvm} sed -i 's/llvm-config/mesa-private-llvm-config-%{__isa_bits}/g' configure.ac sed -i 's/`$LLVM_CONFIG --version`/&-mesa/' configure.ac @@ -634,8 +642,57 @@ rm -rf $RPM_BUILD_ROOT %endif %changelog -* Wed Mar 12 2014 Igor Gnatenko - 10.0.4-1.20140312 -- 10.0.4 upstream release +* Wed Mar 26 2014 Adam Jackson 10.1-5.20140305 +- Initial ppc64le enablement (no hardware drivers or vdpau yet) + +* Fri Mar 21 2014 Adam Jackson 10.1-4.20140305 +- mesa: Don't optimize out glClear if drawbuffer size is 0x0 (fdo #75797) + +* Wed Mar 19 2014 Dave Airlie 10.1-3.20140305 +- rebuild against backported llvm 3.4-5 for radeonsi GL 3.3 support. + +* Wed Mar 12 2014 Dave Airlie 10.1-2.20140305 +- disable r600 llvm compiler (upstream advice) + +* Wed Mar 05 2014 Igor Gnatenko - 10.1-1.20140305 +- mesa: Bump version to 10.1 (final) (Ian Romanick) +- glx/dri2: fix build failure on HURD (Julien Cristau) +- i965: Validate (and resolve) all the bound textures. (Chris Forbes) +- i965: Widen sampler key bitfields for 32 samplers (Chris Forbes) + +* Sat Mar 01 2014 Igor Gnatenko - 10.1-0.rc3.20140301 +- 10.1-rc3 + +* Tue Feb 25 2014 Igor Gnatenko - 10.1-0.rc2.20140225 +- really 10.1-rc2 + +* Sat Feb 22 2014 Igor Gnatenko - 10.1-0.rc2.20140222 +- 10.1-rc2 + +* Sat Feb 08 2014 Adel Gadllah - 10.1-0.rc1.20140208 +- 10.1rc1 +- Drop upstreamed patches + +* Thu Feb 06 2014 Igor Gnatenko - 10.0.3-1.20140206 +- 10.0.3 upstream release + +* Tue Feb 04 2014 Kyle McMartin - 10.0.2-6.20140118 +- Fix accidentally inverted logic that meant radeonsi_dri.so went missing + on all architectures instead of just ppc and s390. Sorry! + +* Sun Feb 02 2014 Kyle McMartin - 10.0.2-5.20140118 +- Fix a thinko in previous commit wrt libdrm_nouveau2. + +* Sun Feb 02 2014 Kyle McMartin - 10.0.2-4.20140118 +- Fix up building drivers on AArch64, enable LLVM there. +- Eliminate some F17 cruft from the spec, since we don't support it anymore. +- Conditionalize with_radeonsi on with_llvm instead of ppc,s390 && >F-17. +- Conditionalize libvdpau_radeonsi.so.1* on with_radeonsi instead of simply + with_llvm to fix a build failure on AArch64. + +* Sun Jan 19 2014 Igor Gnatenko - 10.0.2-3.20140118 +- Enable OpenCL (RHBZ #887628) +- Enable r600 llvm compiler (RHBZ #1055098) * Wed Mar 12 2014 Dave Airlie 10.0.3-2.20140206 - disable r600 llvmcompiler on upstream advice. diff --git a/radeonsi-llvm-version-hack.patch b/radeonsi-llvm-version-hack.patch new file mode 100644 index 0000000..6d12480 --- /dev/null +++ b/radeonsi-llvm-version-hack.patch @@ -0,0 +1,99 @@ +diff -up mesa-20140305/src/gallium/drivers/radeonsi/si_descriptors.c.radeonsi mesa-20140305/src/gallium/drivers/radeonsi/si_descriptors.c +--- mesa-20140305/src/gallium/drivers/radeonsi/si_descriptors.c.radeonsi 2014-03-18 04:37:30.009681609 +0000 ++++ mesa-20140305/src/gallium/drivers/radeonsi/si_descriptors.c 2014-03-18 04:37:36.751681788 +0000 +@@ -151,7 +151,7 @@ static void si_update_descriptors(struct + 7 + /* copy */ + (4 + desc->element_dw_size) * util_bitcount(desc->dirty_mask) + /* update */ + 4; /* pointer update */ +-#if HAVE_LLVM >= 0x0305 ++#if HAVE_LLVM >= 0x0304 + if (desc->shader_userdata_reg >= R_00B130_SPI_SHADER_USER_DATA_VS_0 && + desc->shader_userdata_reg < R_00B230_SPI_SHADER_USER_DATA_GS_0) + desc->atom.num_dw += 4; /* second pointer update */ +@@ -176,7 +176,7 @@ static void si_emit_shader_pointer(struc + radeon_emit(cs, va); + radeon_emit(cs, va >> 32); + +-#if HAVE_LLVM >= 0x0305 ++#if HAVE_LLVM >= 0x0304 + if (desc->shader_userdata_reg >= R_00B130_SPI_SHADER_USER_DATA_VS_0 && + desc->shader_userdata_reg < R_00B230_SPI_SHADER_USER_DATA_GS_0) { + radeon_emit(cs, PKT3(PKT3_SET_SH_REG, 2, 0)); +diff -up mesa-20140305/src/gallium/drivers/radeonsi/si_pipe.c.radeonsi mesa-20140305/src/gallium/drivers/radeonsi/si_pipe.c +--- mesa-20140305/src/gallium/drivers/radeonsi/si_pipe.c.radeonsi 2014-03-05 06:59:46.000000000 +0000 ++++ mesa-20140305/src/gallium/drivers/radeonsi/si_pipe.c 2014-03-18 04:37:10.090681081 +0000 +@@ -269,7 +269,7 @@ static int si_get_param(struct pipe_scre + return 256; + + case PIPE_CAP_GLSL_FEATURE_LEVEL: +- return HAVE_LLVM >= 0x0305 ? 330 : 140; ++ return HAVE_LLVM >= 0x0304 ? 330 : 140; + + case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT: + return 1; +@@ -313,7 +313,7 @@ static int si_get_param(struct pipe_scre + case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS: + return 16384; + case PIPE_CAP_MAX_COMBINED_SAMPLERS: +- return HAVE_LLVM >= 0x0305 ? 48 : 32; ++ return HAVE_LLVM >= 0x0304 ? 48 : 32; + + /* Render targets. */ + case PIPE_CAP_MAX_RENDER_TARGETS: +@@ -346,7 +346,7 @@ static int si_get_shader_param(struct pi + case PIPE_SHADER_VERTEX: + break; + case PIPE_SHADER_GEOMETRY: +-#if HAVE_LLVM < 0x0305 ++#if HAVE_LLVM < 0x0304 + return 0; + #endif + break; +diff -up mesa-20140305/src/gallium/drivers/radeonsi/si_state.c.radeonsi mesa-20140305/src/gallium/drivers/radeonsi/si_state.c +--- mesa-20140305/src/gallium/drivers/radeonsi/si_state.c.radeonsi 2014-03-05 06:59:46.000000000 +0000 ++++ mesa-20140305/src/gallium/drivers/radeonsi/si_state.c 2014-03-18 04:37:10.092681081 +0000 +@@ -2307,7 +2307,7 @@ static void *si_create_fs_state(struct p + return si_create_shader_state(ctx, state, PIPE_SHADER_FRAGMENT); + } + +-#if HAVE_LLVM >= 0x0305 ++#if HAVE_LLVM >= 0x0304 + + static void *si_create_gs_state(struct pipe_context *ctx, + const struct pipe_shader_state *state) +@@ -2337,7 +2337,7 @@ static void si_bind_vs_shader(struct pip + sctx->vs_shader = sel; + } + +-#if HAVE_LLVM >= 0x0305 ++#if HAVE_LLVM >= 0x0304 + + static void si_bind_gs_shader(struct pipe_context *ctx, void *state) + { +@@ -2396,7 +2396,7 @@ static void si_delete_vs_shader(struct p + si_delete_shader_selector(ctx, sel); + } + +-#if HAVE_LLVM >= 0x0305 ++#if HAVE_LLVM >= 0x0304 + + static void si_delete_gs_shader(struct pipe_context *ctx, void *state) + { +@@ -2890,7 +2890,7 @@ static void si_bind_vs_sampler_states(st + si_set_sampler_states(sctx, pm4, count, states, + &sctx->samplers[PIPE_SHADER_VERTEX], + R_00B130_SPI_SHADER_USER_DATA_VS_0); +-#if HAVE_LLVM >= 0x0305 ++#if HAVE_LLVM >= 0x0304 + si_set_sampler_states(sctx, pm4, count, states, + &sctx->samplers[PIPE_SHADER_VERTEX], + R_00B330_SPI_SHADER_USER_DATA_ES_0); +@@ -3166,7 +3166,7 @@ void si_init_state_functions(struct si_c + sctx->b.b.bind_fs_state = si_bind_ps_shader; + sctx->b.b.delete_vs_state = si_delete_vs_shader; + sctx->b.b.delete_fs_state = si_delete_ps_shader; +-#if HAVE_LLVM >= 0x0305 ++#if HAVE_LLVM >= 0x0304 + sctx->b.b.create_gs_state = si_create_gs_state; + sctx->b.b.bind_gs_state = si_bind_gs_shader; + sctx->b.b.delete_gs_state = si_delete_gs_shader; diff --git a/sources b/sources index 582a66f..ac044ff 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -fbd84e27dee95da69a581ffde02cd796 mesa-20140312.tar.xz +242b9395d6b0303ddcd88987a93f5e8c mesa-20140305.tar.xz