mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 07:08:04 +02: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;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
alu = LIST_ENTRY(struct r600_bc_alu, bc->cf_last->alu.prev, list);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
memcpy(alu->value, value, 4 * 4);
|
memcpy(alu->value, value, 4 * 4);
|
||||||
bc->cf_last->ndw += alu->nliteral;
|
bc->cf_last->ndw += alu->nliteral;
|
||||||
bc->ndw += alu->nliteral;
|
bc->ndw += alu->nliteral;
|
||||||
|
alu->literal_added = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ struct r600_bc_alu {
|
||||||
unsigned last;
|
unsigned last;
|
||||||
unsigned is_op3;
|
unsigned is_op3;
|
||||||
unsigned nliteral;
|
unsigned nliteral;
|
||||||
|
unsigned literal_added;
|
||||||
u32 value[4];
|
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
|
/* FIXME dumping should be removed once shader support instructions
|
||||||
* without throwing bad code
|
* without throwing bad code
|
||||||
*/
|
*/
|
||||||
|
if (!rctx->ctx->cpm4)
|
||||||
|
goto out;
|
||||||
sprintf(dname, "gallium-%08d.bof", dc);
|
sprintf(dname, "gallium-%08d.bof", dc);
|
||||||
if (dc < 1)
|
if (dc < 1)
|
||||||
radeon_ctx_dump_bof(rctx->ctx, dname);
|
radeon_ctx_dump_bof(rctx->ctx, dname);
|
||||||
#if 1
|
#if 1
|
||||||
radeon_ctx_submit(rctx->ctx);
|
radeon_ctx_submit(rctx->ctx);
|
||||||
#endif
|
#endif
|
||||||
|
dc++;
|
||||||
|
out:
|
||||||
rctx->ctx = radeon_ctx_decref(rctx->ctx);
|
rctx->ctx = radeon_ctx_decref(rctx->ctx);
|
||||||
rctx->ctx = radeon_ctx(rscreen->rw);
|
rctx->ctx = radeon_ctx(rscreen->rw);
|
||||||
dc++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void r600_init_config(struct r600_context *rctx)
|
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);
|
int radeon_ctx_submit(struct radeon_ctx *ctx);
|
||||||
void radeon_ctx_dump_bof(struct radeon_ctx *ctx, const char *file);
|
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
|
* R600/R700
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -151,6 +151,8 @@ int radeon_ctx_submit(struct radeon_ctx *ctx)
|
||||||
uint64_t chunk_array[2];
|
uint64_t chunk_array[2];
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
|
if (!ctx->cpm4)
|
||||||
|
return 0;
|
||||||
#if 0
|
#if 0
|
||||||
for (r = 0; r < ctx->cpm4; r++) {
|
for (r = 0; r < ctx->cpm4; r++) {
|
||||||
fprintf(stderr, "0x%08X\n", ctx->pm4[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 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);
|
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);
|
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);
|
struct radeon_bo *radeon_ctx_get_bo(struct radeon_ctx *ctx, unsigned reloc);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue