X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fvc4%2Fvc4_job.c;h=5d18cb9bb8261ea72f103c109985b18b34c1050e;hb=09c1c13c4442148e45a4aeac3425382bbe90e8cd;hp=afdac8c991d4af99ffc62d90874800e0542211a6;hpb=4cef255872e8467aabce52938038a9d2bf27d9b2;p=mesa.git diff --git a/src/gallium/drivers/vc4/vc4_job.c b/src/gallium/drivers/vc4/vc4_job.c index afdac8c991d..5d18cb9bb82 100644 --- a/src/gallium/drivers/vc4/vc4_job.c +++ b/src/gallium/drivers/vc4/vc4_job.c @@ -27,6 +27,7 @@ */ #include +#include "vc4_cl_dump.h" #include "vc4_context.h" #include "util/hash_table.h" @@ -89,6 +90,8 @@ vc4_job_create(struct vc4_context *vc4) job->draw_max_x = 0; job->draw_max_y = 0; + job->last_gem_handle_hindex = ~0; + return job; } @@ -117,12 +120,17 @@ vc4_flush_jobs_reading_resource(struct vc4_context *vc4, struct vc4_job *job = entry->data; struct vc4_bo **referenced_bos = job->bo_pointers.base; + bool found = false; for (int i = 0; i < cl_offset(&job->bo_handles) / 4; i++) { if (referenced_bos[i] == rsc->bo) { - vc4_job_submit(vc4, job); - continue; + found = true; + break; } } + if (found) { + vc4_job_submit(vc4, job); + continue; + } /* Also check for the Z/color buffers, since the references to * those are only added immediately before submit. @@ -258,6 +266,13 @@ vc4_get_job_for_fbo(struct vc4_context *vc4) job->draw_tiles_y = DIV_ROUND_UP(vc4->framebuffer.height, job->tile_height); + /* Initialize the job with the raster order flags -- each draw will + * check that we haven't changed the flags, since that requires a + * flush. + */ + if (vc4->rasterizer) + job->flags = vc4->rasterizer->tile_raster_order_flags; + vc4->job = job; return job; @@ -377,13 +392,11 @@ vc4_job_submit(struct vc4_context *vc4, struct vc4_job *job) * until the FLUSH completes. */ cl_ensure_space(&job->bcl, 8); - struct vc4_cl_out *bcl = cl_start(&job->bcl); - cl_emit(&bcl, INCREMENT_SEMAPHORE, incr); + cl_emit(&job->bcl, INCREMENT_SEMAPHORE, incr); /* The FLUSH caps all of our bin lists with a * VC4_PACKET_RETURN. */ - cl_emit(&bcl, FLUSH, flush); - cl_end(&job->bcl, bcl); + cl_emit(&job->bcl, FLUSH, flush); } struct drm_vc4_submit_cl submit = { .color_read.hindex = ~0, @@ -457,6 +470,7 @@ vc4_job_submit(struct vc4_context *vc4, struct vc4_job *job) submit.clear_z = job->clear_depth; submit.clear_s = job->clear_stencil; } + submit.flags |= job->flags; if (!(vc4_debug & VC4_DEBUG_NORAST)) { int ret;