mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-16 15:10:31 +01:00
r600g: avoid reemiting literal, avoid scheduling empty cs
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
This commit is contained in:
parent
247b253d32
commit
72f8edfc0b
6 changed files with 40 additions and 32 deletions
|
|
@ -179,12 +179,13 @@ int r600_bc_add_literal(struct r600_bc *bc, const u32 *value)
|
|||
return -EINVAL;
|
||||
}
|
||||
alu = LIST_ENTRY(struct r600_bc_alu, bc->cf_last->alu.prev, list);
|
||||
if (!alu->last || !alu->nliteral) {
|
||||
if (!alu->last || !alu->nliteral || alu->literal_added) {
|
||||
return 0;
|
||||
}
|
||||
memcpy(alu->value, value, 4 * 4);
|
||||
bc->cf_last->ndw += alu->nliteral;
|
||||
bc->ndw += alu->nliteral;
|
||||
alu->literal_added = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ struct r600_bc_alu {
|
|||
unsigned last;
|
||||
unsigned is_op3;
|
||||
unsigned nliteral;
|
||||
unsigned literal_added;
|
||||
u32 value[4];
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -54,15 +54,18 @@ void r600_flush(struct pipe_context *ctx, unsigned flags,
|
|||
/* FIXME dumping should be removed once shader support instructions
|
||||
* without throwing bad code
|
||||
*/
|
||||
if (!rctx->ctx->cpm4)
|
||||
goto out;
|
||||
sprintf(dname, "gallium-%08d.bof", dc);
|
||||
if (dc < 1)
|
||||
radeon_ctx_dump_bof(rctx->ctx, dname);
|
||||
#if 1
|
||||
radeon_ctx_submit(rctx->ctx);
|
||||
#endif
|
||||
dc++;
|
||||
out:
|
||||
rctx->ctx = radeon_ctx_decref(rctx->ctx);
|
||||
rctx->ctx = radeon_ctx(rscreen->rw);
|
||||
dc++;
|
||||
}
|
||||
|
||||
static void r600_init_config(struct r600_context *rctx)
|
||||
|
|
|
|||
|
|
@ -156,6 +156,37 @@ int radeon_ctx_pm4(struct radeon_ctx *ctx);
|
|||
int radeon_ctx_submit(struct radeon_ctx *ctx);
|
||||
void radeon_ctx_dump_bof(struct radeon_ctx *ctx, const char *file);
|
||||
|
||||
/*
|
||||
* radeon context functions
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct radeon_cs_reloc {
|
||||
uint32_t handle;
|
||||
uint32_t read_domain;
|
||||
uint32_t write_domain;
|
||||
uint32_t flags;
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
struct radeon_ctx {
|
||||
int refcount;
|
||||
struct radeon *radeon;
|
||||
u32 *pm4;
|
||||
u32 cpm4;
|
||||
u32 draw_cpm4;
|
||||
unsigned id;
|
||||
unsigned next_id;
|
||||
unsigned nreloc;
|
||||
struct radeon_cs_reloc *reloc;
|
||||
unsigned nbo;
|
||||
struct radeon_bo **bo;
|
||||
unsigned ndraw;
|
||||
struct radeon_draw *cdraw;
|
||||
struct radeon_draw **draw;
|
||||
unsigned nstate;
|
||||
struct radeon_state **state;
|
||||
};
|
||||
|
||||
/*
|
||||
* R600/R700
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -151,6 +151,8 @@ int radeon_ctx_submit(struct radeon_ctx *ctx)
|
|||
uint64_t chunk_array[2];
|
||||
int r = 0;
|
||||
|
||||
if (!ctx->cpm4)
|
||||
return 0;
|
||||
#if 0
|
||||
for (r = 0; r < ctx->cpm4; r++) {
|
||||
fprintf(stderr, "0x%08X\n", ctx->pm4[r]);
|
||||
|
|
|
|||
|
|
@ -68,36 +68,6 @@ extern int radeon_is_family_compatible(unsigned family1, unsigned family2);
|
|||
extern int radeon_reg_id(struct radeon *radeon, unsigned offset, unsigned *typeid, unsigned *stateid, unsigned *id);
|
||||
extern unsigned radeon_type_from_id(struct radeon *radeon, unsigned id);
|
||||
|
||||
/*
|
||||
* radeon context functions
|
||||
*/
|
||||
#pragma pack(1)
|
||||
struct radeon_cs_reloc {
|
||||
uint32_t handle;
|
||||
uint32_t read_domain;
|
||||
uint32_t write_domain;
|
||||
uint32_t flags;
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
struct radeon_ctx {
|
||||
int refcount;
|
||||
struct radeon *radeon;
|
||||
u32 *pm4;
|
||||
u32 cpm4;
|
||||
u32 draw_cpm4;
|
||||
unsigned id;
|
||||
unsigned next_id;
|
||||
unsigned nreloc;
|
||||
struct radeon_cs_reloc *reloc;
|
||||
unsigned nbo;
|
||||
struct radeon_bo **bo;
|
||||
unsigned ndraw;
|
||||
struct radeon_draw *cdraw;
|
||||
struct radeon_draw **draw;
|
||||
unsigned nstate;
|
||||
struct radeon_state **state;
|
||||
};
|
||||
|
||||
int radeon_ctx_set_bo_new(struct radeon_ctx *ctx, struct radeon_bo *bo);
|
||||
struct radeon_bo *radeon_ctx_get_bo(struct radeon_ctx *ctx, unsigned reloc);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue