r600g: only emit NOP relocations for queries if VM is disabled
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
This commit is contained in:
parent
4e5c70e066
commit
dc76eea22c
|
@ -66,6 +66,20 @@ static INLINE unsigned r600_context_bo_reloc(struct r600_common_context *rctx,
|
||||||
return rctx->ws->cs_add_reloc(ring->cs, rbo->cs_buf, usage, rbo->domains) * 4;
|
return rctx->ws->cs_add_reloc(ring->cs, rbo->cs_buf, usage, rbo->domains) * 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INLINE void r600_emit_reloc(struct r600_common_context *rctx,
|
||||||
|
struct r600_ring *ring, struct r600_resource *rbo,
|
||||||
|
enum radeon_bo_usage usage)
|
||||||
|
{
|
||||||
|
struct radeon_winsys_cs *cs = ring->cs;
|
||||||
|
bool has_vm = ((struct r600_common_screen*)rctx->b.screen)->info.r600_virtual_address;
|
||||||
|
unsigned reloc = r600_context_bo_reloc(rctx, ring, rbo, usage);
|
||||||
|
|
||||||
|
if (!has_vm) {
|
||||||
|
radeon_emit(cs, PKT3(PKT3_NOP, 0, 0));
|
||||||
|
radeon_emit(cs, reloc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static INLINE void r600_write_config_reg_seq(struct radeon_winsys_cs *cs, unsigned reg, unsigned num)
|
static INLINE void r600_write_config_reg_seq(struct radeon_winsys_cs *cs, unsigned reg, unsigned num)
|
||||||
{
|
{
|
||||||
assert(reg < R600_CONTEXT_REG_OFFSET);
|
assert(reg < R600_CONTEXT_REG_OFFSET);
|
||||||
|
|
|
@ -206,8 +206,7 @@ static void r600_emit_query_begin(struct r600_common_context *ctx, struct r600_q
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
cs->buf[cs->cdw++] = PKT3(PKT3_NOP, 0, 0);
|
r600_emit_reloc(ctx, &ctx->rings.gfx, query->buffer.buf, RADEON_USAGE_WRITE);
|
||||||
cs->buf[cs->cdw++] = r600_context_bo_reloc(ctx, &ctx->rings.gfx, query->buffer.buf, RADEON_USAGE_WRITE);
|
|
||||||
|
|
||||||
if (!r600_is_timer_query(query->type)) {
|
if (!r600_is_timer_query(query->type)) {
|
||||||
ctx->num_cs_dw_nontimer_queries_suspend += query->num_cs_dw;
|
ctx->num_cs_dw_nontimer_queries_suspend += query->num_cs_dw;
|
||||||
|
@ -272,8 +271,7 @@ static void r600_emit_query_end(struct r600_common_context *ctx, struct r600_que
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
cs->buf[cs->cdw++] = PKT3(PKT3_NOP, 0, 0);
|
r600_emit_reloc(ctx, &ctx->rings.gfx, query->buffer.buf, RADEON_USAGE_WRITE);
|
||||||
cs->buf[cs->cdw++] = r600_context_bo_reloc(ctx, &ctx->rings.gfx, query->buffer.buf, RADEON_USAGE_WRITE);
|
|
||||||
|
|
||||||
query->buffer.results_end += query->result_size;
|
query->buffer.results_end += query->result_size;
|
||||||
|
|
||||||
|
@ -322,8 +320,7 @@ static void r600_emit_query_predication(struct r600_common_context *ctx, struct
|
||||||
cs->buf[cs->cdw++] = PKT3(PKT3_SET_PREDICATION, 1, 0);
|
cs->buf[cs->cdw++] = PKT3(PKT3_SET_PREDICATION, 1, 0);
|
||||||
cs->buf[cs->cdw++] = (va + results_base) & 0xFFFFFFFFUL;
|
cs->buf[cs->cdw++] = (va + results_base) & 0xFFFFFFFFUL;
|
||||||
cs->buf[cs->cdw++] = op | (((va + results_base) >> 32UL) & 0xFF);
|
cs->buf[cs->cdw++] = op | (((va + results_base) >> 32UL) & 0xFF);
|
||||||
cs->buf[cs->cdw++] = PKT3(PKT3_NOP, 0, 0);
|
r600_emit_reloc(ctx, &ctx->rings.gfx, qbuf->buf, RADEON_USAGE_READ);
|
||||||
cs->buf[cs->cdw++] = r600_context_bo_reloc(ctx, &ctx->rings.gfx, qbuf->buf, RADEON_USAGE_READ);
|
|
||||||
results_base += query->result_size;
|
results_base += query->result_size;
|
||||||
|
|
||||||
/* set CONTINUE bit for all packets except the first */
|
/* set CONTINUE bit for all packets except the first */
|
||||||
|
@ -818,10 +815,9 @@ void r600_query_init_backend_mask(struct r600_common_context *ctx)
|
||||||
cs->buf[cs->cdw++] = PKT3(PKT3_EVENT_WRITE, 2, 0);
|
cs->buf[cs->cdw++] = PKT3(PKT3_EVENT_WRITE, 2, 0);
|
||||||
cs->buf[cs->cdw++] = EVENT_TYPE(EVENT_TYPE_ZPASS_DONE) | EVENT_INDEX(1);
|
cs->buf[cs->cdw++] = EVENT_TYPE(EVENT_TYPE_ZPASS_DONE) | EVENT_INDEX(1);
|
||||||
cs->buf[cs->cdw++] = va;
|
cs->buf[cs->cdw++] = va;
|
||||||
cs->buf[cs->cdw++] = (va >> 32UL) & 0xFF;
|
cs->buf[cs->cdw++] = va >> 32;
|
||||||
|
|
||||||
cs->buf[cs->cdw++] = PKT3(PKT3_NOP, 0, 0);
|
r600_emit_reloc(ctx, &ctx->rings.gfx, buffer, RADEON_USAGE_WRITE);
|
||||||
cs->buf[cs->cdw++] = r600_context_bo_reloc(ctx, &ctx->rings.gfx, buffer, RADEON_USAGE_WRITE);
|
|
||||||
|
|
||||||
/* analyze results */
|
/* analyze results */
|
||||||
results = r600_buffer_map_sync_with_rings(ctx, buffer, PIPE_TRANSFER_READ);
|
results = r600_buffer_map_sync_with_rings(ctx, buffer, PIPE_TRANSFER_READ);
|
||||||
|
|
|
@ -199,20 +199,6 @@ static void evergreen_set_streamout_enable(struct r600_common_context *rctx, uns
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void r600_emit_reloc(struct r600_common_context *rctx,
|
|
||||||
struct r600_ring *ring, struct r600_resource *rbo,
|
|
||||||
enum radeon_bo_usage usage)
|
|
||||||
{
|
|
||||||
struct radeon_winsys_cs *cs = ring->cs;
|
|
||||||
bool has_vm = ((struct r600_common_screen*)rctx->b.screen)->info.r600_virtual_address;
|
|
||||||
unsigned reloc = r600_context_bo_reloc(rctx, ring, rbo, usage);
|
|
||||||
|
|
||||||
if (!has_vm) {
|
|
||||||
radeon_emit(cs, PKT3(PKT3_NOP, 0, 0));
|
|
||||||
radeon_emit(cs, reloc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void r600_emit_streamout_begin(struct r600_common_context *rctx, struct r600_atom *atom)
|
static void r600_emit_streamout_begin(struct r600_common_context *rctx, struct r600_atom *atom)
|
||||||
{
|
{
|
||||||
struct radeon_winsys_cs *cs = rctx->rings.gfx.cs;
|
struct radeon_winsys_cs *cs = rctx->rings.gfx.cs;
|
||||||
|
|
Loading…
Reference in New Issue