mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 01:30:08 +01:00
r600g: emit CS using radeon_winsys
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
685b8345a8
commit
e6fb62594f
7 changed files with 20 additions and 49 deletions
|
|
@ -236,16 +236,16 @@ struct r600_context {
|
|||
struct list_head resource_dirty;
|
||||
struct list_head enable_list;
|
||||
unsigned pm4_ndwords;
|
||||
unsigned pm4_cdwords;
|
||||
unsigned pm4_dirty_cdwords;
|
||||
unsigned ctx_pm4_ndwords;
|
||||
unsigned init_dwords;
|
||||
|
||||
unsigned creloc;
|
||||
unsigned *reloc;
|
||||
struct radeon_bo **bo;
|
||||
|
||||
u32 *pm4;
|
||||
unsigned pm4_cdwords;
|
||||
|
||||
struct list_head query_list;
|
||||
unsigned num_query_running;
|
||||
unsigned backend_mask;
|
||||
|
|
|
|||
|
|
@ -995,11 +995,7 @@ int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon)
|
|||
goto out_err;
|
||||
}
|
||||
ctx->pm4_ndwords = RADEON_CTX_MAX_PM4;
|
||||
ctx->pm4 = calloc(ctx->pm4_ndwords, 4);
|
||||
if (ctx->pm4 == NULL) {
|
||||
r = -ENOMEM;
|
||||
goto out_err;
|
||||
}
|
||||
ctx->pm4 = ctx->cs->buf;
|
||||
|
||||
r600_init_cs(ctx);
|
||||
/* save 16dwords space for fence mecanism */
|
||||
|
|
|
|||
|
|
@ -292,6 +292,9 @@ struct radeon *radeon_create(struct radeon_winsys *ws)
|
|||
radeon_get_backend_map(radeon);
|
||||
}
|
||||
|
||||
/* XXX disable ioctl thread offloading until the porting is done. */
|
||||
setenv("RADEON_THREAD", "0", 0);
|
||||
|
||||
return radeon;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -776,7 +776,6 @@ void r600_context_fini(struct r600_context *ctx)
|
|||
free(ctx->range);
|
||||
free(ctx->blocks);
|
||||
free(ctx->bo);
|
||||
free(ctx->pm4);
|
||||
ctx->radeon->ws->cs_destroy(ctx->cs);
|
||||
|
||||
memset(ctx, 0, sizeof(struct r600_context));
|
||||
|
|
@ -920,11 +919,7 @@ int r600_context_init(struct r600_context *ctx, struct radeon *radeon)
|
|||
goto out_err;
|
||||
}
|
||||
ctx->pm4_ndwords = RADEON_CTX_MAX_PM4;
|
||||
ctx->pm4 = calloc(ctx->pm4_ndwords, 4);
|
||||
if (ctx->pm4 == NULL) {
|
||||
r = -ENOMEM;
|
||||
goto out_err;
|
||||
}
|
||||
ctx->pm4 = ctx->cs->buf;
|
||||
|
||||
r600_init_cs(ctx);
|
||||
/* save 16dwords space for fence mecanism */
|
||||
|
|
@ -1492,10 +1487,6 @@ void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)
|
|||
|
||||
void r600_context_flush(struct r600_context *ctx)
|
||||
{
|
||||
struct drm_radeon_cs drmib = {};
|
||||
struct drm_radeon_cs_chunk chunks[2];
|
||||
uint64_t chunk_array[2];
|
||||
int r;
|
||||
struct r600_block *enable_block = NULL;
|
||||
|
||||
if (ctx->pm4_cdwords == ctx->init_dwords)
|
||||
|
|
@ -1513,27 +1504,12 @@ void r600_context_flush(struct r600_context *ctx)
|
|||
ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0, 0);
|
||||
ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_PS_PARTIAL_FLUSH) | EVENT_INDEX(4);
|
||||
|
||||
#if 1
|
||||
/* emit cs */
|
||||
drmib.num_chunks = 2;
|
||||
drmib.chunks = (uint64_t)(uintptr_t)chunk_array;
|
||||
chunks[0].chunk_id = RADEON_CHUNK_ID_IB;
|
||||
chunks[0].length_dw = ctx->pm4_cdwords;
|
||||
chunks[0].chunk_data = (uint64_t)(uintptr_t)ctx->pm4;
|
||||
chunks[1].chunk_id = RADEON_CHUNK_ID_RELOCS;
|
||||
chunks[1].length_dw = ctx->creloc * 4;
|
||||
chunks[1].chunk_data = (uint64_t)(uintptr_t)ctx->reloc;
|
||||
chunk_array[0] = (uint64_t)(uintptr_t)&chunks[0];
|
||||
chunk_array[1] = (uint64_t)(uintptr_t)&chunks[1];
|
||||
r = drmCommandWriteRead(ctx->radeon->info.fd, DRM_RADEON_CS, &drmib,
|
||||
sizeof(struct drm_radeon_cs));
|
||||
if (r) {
|
||||
fprintf(stderr, "radeon: The kernel rejected CS, "
|
||||
"see dmesg for more information.\n");
|
||||
}
|
||||
#else
|
||||
*ctx->radeon->cfence = ctx->radeon->fence;
|
||||
#endif
|
||||
/* Flush the CS. */
|
||||
ctx->cs->cdw = ctx->pm4_cdwords;
|
||||
ctx->radeon->ws->cs_flush(ctx->cs, 0);
|
||||
/* We need to get the pointer to the other CS,
|
||||
* the command streams are double-buffered. */
|
||||
ctx->pm4 = ctx->cs->buf;
|
||||
|
||||
/* restart */
|
||||
for (int i = 0; i < ctx->creloc; i++) {
|
||||
|
|
@ -1544,7 +1520,6 @@ void r600_context_flush(struct r600_context *ctx)
|
|||
ctx->pm4_dirty_cdwords = 0;
|
||||
ctx->pm4_cdwords = 0;
|
||||
ctx->flags = 0;
|
||||
ctx->radeon->ws->cs_flush(ctx->cs, 0);
|
||||
|
||||
r600_init_cs(ctx);
|
||||
|
||||
|
|
|
|||
|
|
@ -134,10 +134,11 @@ static INLINE unsigned r600_context_bo_reloc(struct r600_context *ctx, struct r6
|
|||
|
||||
assert(bo != NULL);
|
||||
|
||||
reloc_index = ctx->radeon->ws->trans_add_reloc(
|
||||
ctx->cs, bo->cs_buf,
|
||||
rbo->domains, rbo->domains,
|
||||
(void**)&ctx->reloc, &ctx->creloc);
|
||||
reloc_index =
|
||||
ctx->radeon->ws->trans_add_reloc(ctx->cs, bo->cs_buf, rbo->domains, rbo->domains);
|
||||
|
||||
if (reloc_index >= ctx->creloc)
|
||||
ctx->creloc = reloc_index+1;
|
||||
|
||||
radeon_bo_reference(ctx->radeon, &ctx->bo[reloc_index], bo);
|
||||
return reloc_index * 4;
|
||||
|
|
|
|||
|
|
@ -473,8 +473,7 @@ static boolean radeon_bo_is_referenced(struct radeon_winsys_cs *rcs,
|
|||
static unsigned trans_add_reloc(struct radeon_winsys_cs *rcs,
|
||||
struct radeon_winsys_cs_handle *buf,
|
||||
enum radeon_bo_domain rd,
|
||||
enum radeon_bo_domain wd,
|
||||
void **reloc_list, unsigned *reloc_count)
|
||||
enum radeon_bo_domain wd)
|
||||
{
|
||||
struct radeon_drm_cs *cs = radeon_drm_cs(rcs);
|
||||
struct radeon_bo *bo = (struct radeon_bo*)buf;
|
||||
|
|
@ -487,8 +486,6 @@ static unsigned trans_add_reloc(struct radeon_winsys_cs *rcs,
|
|||
if (added_domains & RADEON_DOMAIN_VRAM)
|
||||
cs->csc->used_vram += bo->size;
|
||||
|
||||
*reloc_list = cs->csc->relocs;
|
||||
*reloc_count = cs->csc->crelocs;
|
||||
return index;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -332,8 +332,7 @@ struct radeon_winsys {
|
|||
unsigned (*trans_add_reloc)(struct radeon_winsys_cs *cs,
|
||||
struct radeon_winsys_cs_handle *buf,
|
||||
enum radeon_bo_domain rd,
|
||||
enum radeon_bo_domain wd,
|
||||
void **reloc_list, unsigned *reloc_count);
|
||||
enum radeon_bo_domain wd);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue