mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 21:40:08 +01:00
vc4: Make some assertions about how many flushes/EOFs the simulator sees.
This caught the previous commit's bug in the kernel validator.
This commit is contained in:
parent
1f7048419e
commit
9ebfb3014e
4 changed files with 26 additions and 9 deletions
|
|
@ -43,7 +43,7 @@ struct vc4_cl {
|
|||
void vc4_init_cl(struct vc4_context *vc4, struct vc4_cl *cl);
|
||||
void vc4_grow_cl(struct vc4_cl *cl);
|
||||
void vc4_reset_cl(struct vc4_cl *cl);
|
||||
void vc4_dump_cl(struct vc4_cl *cl, bool is_render);
|
||||
void vc4_dump_cl(void *cl, uint32_t size, bool is_render);
|
||||
uint32_t vc4_gem_hindex(struct vc4_context *vc4, struct vc4_bo *bo);
|
||||
|
||||
static inline void
|
||||
|
|
|
|||
|
|
@ -83,12 +83,12 @@ static const struct packet_info {
|
|||
};
|
||||
|
||||
void
|
||||
vc4_dump_cl(struct vc4_cl *cl, bool is_render)
|
||||
vc4_dump_cl(void *cl, uint32_t size, bool is_render)
|
||||
{
|
||||
uint32_t offset = 0, hw_offset = 0;
|
||||
uint8_t *cmds = cl->base;
|
||||
uint8_t *cmds = cl;
|
||||
|
||||
while (offset < cl->end - cl->base) {
|
||||
while (offset < size) {
|
||||
uint8_t header = cmds[offset];
|
||||
|
||||
if (header > ARRAY_SIZE(packet_info) ||
|
||||
|
|
@ -105,7 +105,7 @@ vc4_dump_cl(struct vc4_cl *cl, bool is_render)
|
|||
header, p->name);
|
||||
|
||||
for (uint32_t i = 1; i < p->size; i++) {
|
||||
if (offset + i >= cl->end - cl->base) {
|
||||
if (offset + i >= size) {
|
||||
fprintf(stderr, "0x%08x 0x%08x: CL overflow!\n",
|
||||
offset + i, hw_offset + i);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -273,9 +273,9 @@ vc4_flush(struct pipe_context *pctx)
|
|||
|
||||
if (vc4_debug & VC4_DEBUG_CL) {
|
||||
fprintf(stderr, "BCL:\n");
|
||||
vc4_dump_cl(&vc4->bcl, false);
|
||||
vc4_dump_cl(vc4->bcl.base, vc4->bcl.end - vc4->bcl.base, false);
|
||||
fprintf(stderr, "RCL:\n");
|
||||
vc4_dump_cl(&vc4->rcl, true);
|
||||
vc4_dump_cl(vc4->rcl.base, vc4->rcl.end - vc4->rcl.base, true);
|
||||
}
|
||||
|
||||
struct drm_vc4_submit_cl submit;
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ vc4_simulator_unpin_bos(struct exec_info *exec)
|
|||
int
|
||||
vc4_simulator_flush(struct vc4_context *vc4, struct drm_vc4_submit_cl *args)
|
||||
{
|
||||
struct vc4_screen *screen = vc4->screen;
|
||||
struct vc4_surface *csurf = vc4_surface(vc4->framebuffer.cbufs[0]);
|
||||
struct vc4_resource *ctex = csurf ? vc4_resource(csurf->base.texture) : NULL;
|
||||
uint32_t winsys_stride = ctex ? ctex->bo->simulator_winsys_stride : 0;
|
||||
|
|
@ -149,8 +150,24 @@ vc4_simulator_flush(struct vc4_context *vc4, struct drm_vc4_submit_cl *args)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
simpenrose_do_binning(exec.ct0ca, exec.ct0ea);
|
||||
simpenrose_do_rendering(exec.ct1ca, exec.ct1ea);
|
||||
int bfc = simpenrose_do_binning(exec.ct0ca, exec.ct0ea);
|
||||
if (bfc != 1) {
|
||||
fprintf(stderr, "Binning returned %d flushes, should be 1.\n",
|
||||
bfc);
|
||||
fprintf(stderr, "Relocated binning command list:\n");
|
||||
vc4_dump_cl(screen->simulator_mem_base + exec.ct0ca,
|
||||
exec.ct0ea - exec.ct0ca, false);
|
||||
abort();
|
||||
}
|
||||
int rfc = simpenrose_do_rendering(exec.ct1ca, exec.ct1ea);
|
||||
if (rfc != 1) {
|
||||
fprintf(stderr, "Rendering returned %d frames, should be 1.\n",
|
||||
rfc);
|
||||
fprintf(stderr, "Relocated render command list:\n");
|
||||
vc4_dump_cl(screen->simulator_mem_base + exec.ct1ca,
|
||||
exec.ct1ea - exec.ct1ca, true);
|
||||
abort();
|
||||
}
|
||||
|
||||
ret = vc4_simulator_unpin_bos(&exec);
|
||||
if (ret)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue