gallium: add flush_resource context function

r600g needs explicit flushing before DRI2 buffers are presented on the screen.

v2: add (stub) implementations for all drivers, fix frontbuffer flushing
v3: fix galahad

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Marek Olšák
2013-09-20 15:08:29 +02:00
parent d2bd63433a
commit 419cd5f2a2
23 changed files with 188 additions and 3 deletions

View File

@@ -872,6 +872,20 @@ rbug_resource_copy_region(struct pipe_context *_pipe,
pipe_mutex_unlock(rb_pipe->call_mutex);
}
static void
rbug_flush_resource(struct pipe_context *_pipe,
struct pipe_resource *_res)
{
struct rbug_context *rb_pipe = rbug_context(_pipe);
struct rbug_resource *rb_resource_res = rbug_resource(_res);
struct pipe_context *pipe = rb_pipe->pipe;
struct pipe_resource *res = rb_resource_res->resource;
pipe_mutex_lock(rb_pipe->call_mutex);
pipe->flush_resource(pipe, res);
pipe_mutex_unlock(rb_pipe->call_mutex);
}
static void
rbug_clear(struct pipe_context *_pipe,
unsigned buffers,
@@ -1181,6 +1195,7 @@ rbug_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
rb_pipe->base.set_index_buffer = rbug_set_index_buffer;
rb_pipe->base.set_sample_mask = rbug_set_sample_mask;
rb_pipe->base.resource_copy_region = rbug_resource_copy_region;
rb_pipe->base.flush_resource = rbug_flush_resource;
rb_pipe->base.clear = rbug_clear;
rb_pipe->base.clear_render_target = rbug_clear_render_target;
rb_pipe->base.clear_depth_stencil = rbug_clear_depth_stencil;