summaryrefslogtreecommitdiffstats
path: root/src/gallium/include
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2013-11-28 11:08:11 +1000
committerDave Airlie <[email protected]>2013-12-13 14:37:01 +1000
commitba00f2f6f54cbc5ffdb0f0b94bcd672d147cdc36 (patch)
tree93cec2b58156f3fb87cbc425a7680253bb1fe82f /src/gallium/include
parent40070e72d4f27797d03986a68b1540339eb2b496 (diff)
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 <[email protected]> Signed-off-by: Dave Airlie <[email protected]> swrast: add support for copy_sub_buffer
Diffstat (limited to 'src/gallium/include')
-rw-r--r--src/gallium/include/pipe/p_screen.h7
-rw-r--r--src/gallium/include/state_tracker/drisw_api.h2
-rw-r--r--src/gallium/include/state_tracker/sw_winsys.h5
3 files changed, 9 insertions, 5 deletions
diff --git a/src/gallium/include/pipe/p_screen.h b/src/gallium/include/pipe/p_screen.h
index 3ed7f269e4f..bdd727d8cb4 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 944a649257e..328440cf5ff 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 0b11fe3beb9..d08ddd6c397 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,