Yes, I will remove the flag in the next patch series. Marek
On Sun, Apr 13, 2014 at 10:45 AM, Christian König <deathsim...@vodafone.de> wrote: > For this series: Reviewed-by: Christian König <christian.koe...@amd.com> > > BTW: Can we get rid of RADEON_FLUSH_ASYNC and always flush asynchronously? > Just calling cs_sync_flush directly after the flush should have the same > effect as synchronous flushing. > > Christian. > > Am 12.04.2014 18:34, schrieb Marek Olšák: > >> From: Marek Olšák <marek.ol...@amd.com> >> >> The only difference is that it doesn't write to the CS and only returns >> the index. >> --- >> src/gallium/drivers/r300/r300_cs.h | 3 ++- >> src/gallium/drivers/r300/r300_emit.c | 4 ++-- >> src/gallium/winsys/radeon/drm/radeon_drm_cs.c | 26 >> +++++++++----------------- >> src/gallium/winsys/radeon/drm/radeon_winsys.h | 19 ++++++++++--------- >> 4 files changed, 23 insertions(+), 29 deletions(-) >> >> diff --git a/src/gallium/drivers/r300/r300_cs.h >> b/src/gallium/drivers/r300/r300_cs.h >> index 744e19e..748d6ea 100644 >> --- a/src/gallium/drivers/r300/r300_cs.h >> +++ b/src/gallium/drivers/r300/r300_cs.h >> @@ -109,7 +109,8 @@ >> #define OUT_CS_RELOC(r) do { \ >> assert((r)); \ >> assert((r)->cs_buf); \ >> - cs_winsys->cs_write_reloc(cs_copy, (r)->cs_buf); \ >> + OUT_CS(0xc0001000); /* PKT3_NOP */ \ >> + OUT_CS(cs_winsys->cs_get_reloc(cs_copy, (r)->cs_buf) * 4); \ >> CS_USED_DW(2); \ >> } while (0) >> diff --git a/src/gallium/drivers/r300/r300_emit.c >> b/src/gallium/drivers/r300/r300_emit.c >> index d99b919..9f16413 100644 >> --- a/src/gallium/drivers/r300/r300_emit.c >> +++ b/src/gallium/drivers/r300/r300_emit.c >> @@ -1043,8 +1043,8 @@ void r300_emit_vertex_arrays_swtcl(struct >> r300_context *r300, boolean indexed) >> OUT_CS(0); >> assert(r300->vbo_cs); >> - cs_winsys->cs_write_reloc(cs_copy, r300->vbo_cs); >> - CS_USED_DW(2); >> + OUT_CS(0xc0001000); /* PKT3_NOP */ >> + OUT_CS(r300->rws->cs_get_reloc(r300->cs, r300->vbo_cs) * 4); >> END_CS; >> } >> diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c >> b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c >> index b55eb80..4ce1717 100644 >> --- a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c >> +++ b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c >> @@ -313,6 +313,14 @@ static unsigned radeon_drm_cs_add_reloc(struct >> radeon_winsys_cs *rcs, >> return index; >> } >> +static int radeon_drm_cs_get_reloc(struct radeon_winsys_cs *rcs, >> + struct radeon_winsys_cs_handle *buf) >> +{ >> + struct radeon_drm_cs *cs = radeon_drm_cs(rcs); >> + >> + return radeon_get_reloc(cs->csc, (struct radeon_bo*)buf, NULL); >> +} >> + >> static boolean radeon_drm_cs_validate(struct radeon_winsys_cs *rcs) >> { >> struct radeon_drm_cs *cs = radeon_drm_cs(rcs); >> @@ -359,22 +367,6 @@ static boolean >> radeon_drm_cs_memory_below_limit(struct radeon_winsys_cs *rcs, ui >> return status; >> } >> -static void radeon_drm_cs_write_reloc(struct radeon_winsys_cs *rcs, >> - struct radeon_winsys_cs_handle >> *buf) >> -{ >> - struct radeon_drm_cs *cs = radeon_drm_cs(rcs); >> - struct radeon_bo *bo = (struct radeon_bo*)buf; >> - unsigned index = radeon_get_reloc(cs->csc, bo, NULL); >> - >> - if (index == -1) { >> - fprintf(stderr, "radeon: Cannot get a relocation in %s.\n", >> __func__); >> - return; >> - } >> - >> - OUT_CS(&cs->base, 0xc0001000); >> - OUT_CS(&cs->base, index * RELOC_DWORDS); >> -} >> - >> void radeon_drm_cs_emit_ioctl_oneshot(struct radeon_drm_cs *cs, struct >> radeon_cs_context *csc) >> { >> unsigned i; >> @@ -650,9 +642,9 @@ void radeon_drm_cs_init_functions(struct >> radeon_drm_winsys *ws) >> ws->base.cs_create = radeon_drm_cs_create; >> ws->base.cs_destroy = radeon_drm_cs_destroy; >> ws->base.cs_add_reloc = radeon_drm_cs_add_reloc; >> + ws->base.cs_get_reloc = radeon_drm_cs_get_reloc; >> ws->base.cs_validate = radeon_drm_cs_validate; >> ws->base.cs_memory_below_limit = radeon_drm_cs_memory_below_limit; >> - ws->base.cs_write_reloc = radeon_drm_cs_write_reloc; >> ws->base.cs_flush = radeon_drm_cs_flush; >> ws->base.cs_set_flush_callback = radeon_drm_cs_set_flush; >> ws->base.cs_is_buffer_referenced = radeon_bo_is_referenced; >> diff --git a/src/gallium/winsys/radeon/drm/radeon_winsys.h >> b/src/gallium/winsys/radeon/drm/radeon_winsys.h >> index 485e925..320989c 100644 >> --- a/src/gallium/winsys/radeon/drm/radeon_winsys.h >> +++ b/src/gallium/winsys/radeon/drm/radeon_winsys.h >> @@ -450,6 +450,16 @@ struct radeon_winsys { >> enum radeon_bo_priority priority); >> /** >> + * Return the index of an already-added buffer. >> + * >> + * \param cs Command stream >> + * \param buf Buffer >> + * \return The buffer index, or -1 if the buffer has not >> been added. >> + */ >> + int (*cs_get_reloc)(struct radeon_winsys_cs *cs, >> + struct radeon_winsys_cs_handle *buf); >> + >> + /** >> * Return TRUE if there is enough memory in VRAM and GTT for the >> relocs >> * added so far. If the validation fails, all the relocations which >> have >> * been added since the last call of cs_validate will be removed and >> @@ -470,15 +480,6 @@ struct radeon_winsys { >> boolean (*cs_memory_below_limit)(struct radeon_winsys_cs *cs, >> uint64_t vram, uint64_t gtt); >> /** >> - * Write a relocated dword to a command buffer. >> - * >> - * \param cs A command stream the relocation is written to. >> - * \param buf A winsys buffer to write the relocation for. >> - */ >> - void (*cs_write_reloc)(struct radeon_winsys_cs *cs, >> - struct radeon_winsys_cs_handle *buf); >> - >> - /** >> * Flush a command stream. >> * >> * \param cs A command stream to flush. > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev