diff options
author | Marek Olšák <[email protected]> | 2010-04-18 06:32:10 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2010-04-18 16:09:21 +0200 |
commit | 7a1b5c937fa32968a04a11649e456a1ef8c5b442 (patch) | |
tree | 9888ba323d55000d51cbcbb8a27c0bfeafb113d1 /src/gallium/drivers/r300 | |
parent | bc8fa67926e8e094cd05bf7f1f690cf24e903e06 (diff) |
r300g: do not tell st that a buffer is referenced by hw
It saves a few libdrm calls and unnecessary flushes.
Diffstat (limited to 'src/gallium/drivers/r300')
-rw-r--r-- | src/gallium/drivers/r300/r300_render.c | 6 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_screen_buffer.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_texture.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_winsys.h | 10 |
4 files changed, 12 insertions, 8 deletions
diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c index f6bc68c43ad..26ff71c8461 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 739f723f163..c5c10af2a4c 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 a4a3f2166f8..e795c8df0bb 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 9c348d91158..2bd40176d10 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 * |