From 7a1b5c937fa32968a04a11649e456a1ef8c5b442 Mon Sep 17 00:00:00 2001 From: Marek Olšák Date: Sun, 18 Apr 2010 06:32:10 +0200 Subject: r300g: do not tell st that a buffer is referenced by hw It saves a few libdrm calls and unnecessary flushes. --- src/gallium/drivers/r300/r300_render.c | 6 +++--- src/gallium/drivers/r300/r300_screen_buffer.c | 2 +- src/gallium/drivers/r300/r300_texture.c | 2 +- src/gallium/drivers/r300/r300_winsys.h | 10 +++++++--- 4 files changed, 12 insertions(+), 8 deletions(-) (limited to 'src/gallium/drivers') diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c index f6bc68c43a..26ff71c846 100644 --- a/src/gallium/drivers/r300/r300_render.c +++ b/src/gallium/drivers/r300/r300_render.c @@ -152,9 +152,9 @@ static boolean immd_is_good_idea(struct r300_context *r300, if (!checked[vbi]) { vbuf = &r300->vertex_buffer[vbi]; - if (r300->context.is_resource_referenced(&r300->context, - vbuf->buffer, - 0, 0)) { + if (r300->rws->is_buffer_referenced(r300->rws, + r300_buffer(vbuf->buffer)->buf, + R300_REF_CS | R300_REF_HW)) { /* It's a very bad idea to map it... */ return FALSE; } diff --git a/src/gallium/drivers/r300/r300_screen_buffer.c b/src/gallium/drivers/r300/r300_screen_buffer.c index 739f723f16..c5c10af2a4 100644 --- a/src/gallium/drivers/r300/r300_screen_buffer.c +++ b/src/gallium/drivers/r300/r300_screen_buffer.c @@ -44,7 +44,7 @@ static unsigned r300_buffer_is_referenced(struct pipe_context *context, if (r300_buffer_is_user_buffer(buf)) return PIPE_UNREFERENCED; - if (r300->rws->is_buffer_referenced(r300->rws, rbuf->buf)) + if (r300->rws->is_buffer_referenced(r300->rws, rbuf->buf, R300_REF_CS)) return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; return PIPE_UNREFERENCED; diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c index a4a3f2166f..e795c8df0b 100644 --- a/src/gallium/drivers/r300/r300_texture.c +++ b/src/gallium/drivers/r300/r300_texture.c @@ -880,7 +880,7 @@ static unsigned r300_texture_is_referenced(struct pipe_context *context, struct r300_context *r300 = r300_context(context); struct r300_texture *rtex = (struct r300_texture *)texture; - if (r300->rws->is_buffer_referenced(r300->rws, rtex->buffer)) + if (r300->rws->is_buffer_referenced(r300->rws, rtex->buffer, R300_REF_CS)) return PIPE_REFERENCED_FOR_READ | PIPE_REFERENCED_FOR_WRITE; return PIPE_UNREFERENCED; diff --git a/src/gallium/drivers/r300/r300_winsys.h b/src/gallium/drivers/r300/r300_winsys.h index 9c348d9115..2bd40176d1 100644 --- a/src/gallium/drivers/r300/r300_winsys.h +++ b/src/gallium/drivers/r300/r300_winsys.h @@ -42,6 +42,11 @@ enum r300_value_id { R300_VID_TEX3D_MIP_BUG, }; +enum r300_reference_domain { /* bitfield */ + R300_REF_CS = 1, + R300_REF_HW = 2 +}; + struct r300_winsys_screen { void (*destroy)(struct r300_winsys_screen *ws); @@ -160,9 +165,8 @@ struct r300_winsys_screen { struct winsys_handle *whandle); boolean (*is_buffer_referenced)(struct r300_winsys_screen *winsys, - struct r300_winsys_buffer *buffer); - - + struct r300_winsys_buffer *buffer, + enum r300_reference_domain domain); }; struct r300_winsys_screen * -- cgit v1.2.3