mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 06:10:13 +01:00
winsys/radeon: add usage parameter to cs_is_buffer_referenced
Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
parent
96ef4ddc3d
commit
29e55bc5f1
5 changed files with 21 additions and 6 deletions
|
|
@ -90,7 +90,7 @@ r300_texture_get_transfer(struct pipe_context *ctx,
|
|||
boolean referenced_cs, referenced_hw;
|
||||
|
||||
referenced_cs =
|
||||
r300->rws->cs_is_buffer_referenced(r300->cs, tex->cs_buf);
|
||||
r300->rws->cs_is_buffer_referenced(r300->cs, tex->cs_buf, RADEON_USAGE_READWRITE);
|
||||
if (referenced_cs) {
|
||||
referenced_hw = TRUE;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -346,7 +346,7 @@ static void r600_begin_query(struct pipe_context *ctx, struct pipe_query *query)
|
|||
}
|
||||
|
||||
/* Obtain a new buffer if the current one can't be mapped without a stall. */
|
||||
if (rctx->ws->cs_is_buffer_referenced(rctx->cs, rquery->buffer.buf->cs_buf) ||
|
||||
if (rctx->ws->cs_is_buffer_referenced(rctx->cs, rquery->buffer.buf->cs_buf, RADEON_USAGE_READWRITE) ||
|
||||
rctx->ws->buffer_is_busy(rquery->buffer.buf->buf, RADEON_USAGE_READWRITE)) {
|
||||
pipe_resource_reference((struct pipe_resource**)&rquery->buffer.buf, NULL);
|
||||
rquery->buffer.buf = r600_new_query_buffer(rctx, rquery->type);
|
||||
|
|
|
|||
|
|
@ -796,7 +796,7 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
|
|||
|
||||
/* Use a staging texture for uploads if the underlying BO is busy. */
|
||||
if (!(usage & PIPE_TRANSFER_READ) &&
|
||||
(rctx->ws->cs_is_buffer_referenced(rctx->cs, rtex->resource.cs_buf) ||
|
||||
(rctx->ws->cs_is_buffer_referenced(rctx->cs, rtex->resource.cs_buf, RADEON_USAGE_READWRITE) ||
|
||||
rctx->ws->buffer_is_busy(rtex->resource.buf, RADEON_USAGE_READWRITE)))
|
||||
use_staging_texture = TRUE;
|
||||
|
||||
|
|
|
|||
|
|
@ -512,12 +512,26 @@ static void radeon_drm_cs_set_flush(struct radeon_winsys_cs *rcs,
|
|||
}
|
||||
|
||||
static boolean radeon_bo_is_referenced(struct radeon_winsys_cs *rcs,
|
||||
struct radeon_winsys_cs_handle *_buf)
|
||||
struct radeon_winsys_cs_handle *_buf,
|
||||
enum radeon_bo_usage usage)
|
||||
{
|
||||
struct radeon_drm_cs *cs = radeon_drm_cs(rcs);
|
||||
struct radeon_bo *bo = (struct radeon_bo*)_buf;
|
||||
int index;
|
||||
|
||||
return radeon_bo_is_referenced_by_cs(cs, bo);
|
||||
if (!bo->num_cs_references)
|
||||
return FALSE;
|
||||
|
||||
index = radeon_get_reloc(cs->csc, bo);
|
||||
if (index == -1)
|
||||
return FALSE;
|
||||
|
||||
if ((usage & RADEON_USAGE_WRITE) && cs->csc->relocs[index].write_domain)
|
||||
return TRUE;
|
||||
if ((usage & RADEON_USAGE_READ) && cs->csc->relocs[index].read_domains)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void radeon_drm_cs_init_functions(struct radeon_drm_winsys *ws)
|
||||
|
|
|
|||
|
|
@ -341,7 +341,8 @@ struct radeon_winsys {
|
|||
* \param buf A winsys buffer.
|
||||
*/
|
||||
boolean (*cs_is_buffer_referenced)(struct radeon_winsys_cs *cs,
|
||||
struct radeon_winsys_cs_handle *buf);
|
||||
struct radeon_winsys_cs_handle *buf,
|
||||
enum radeon_bo_usage usage);
|
||||
|
||||
/**
|
||||
* Request access to a feature for a command stream.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue