On Mon, Jul 06, 2015 at 04:29:49PM +0300, Martin Peres wrote: > > > On 06/07/15 13:33, Chris Wilson wrote: > >Since the workaround bo is used strictly as a write-only buffer, we need > >only allocate one per screen and use the same one from all contexts. > > > >(The caveat here is during extension initialisation, where we write into > >and read back register values from the buffer, but that is performed only > >once for the first context - and baring synchronisation issues should not > >be a problem. Safer would be to move that also to the screen.) > > > >Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> > >--- > > src/mesa/drivers/dri/i965/brw_pipe_control.c | 6 +++--- > > src/mesa/drivers/dri/i965/intel_screen.c | 4 ++++ > > src/mesa/drivers/dri/i965/intel_screen.h | 1 + > > 3 files changed, 8 insertions(+), 3 deletions(-) > > > >diff --git a/src/mesa/drivers/dri/i965/brw_pipe_control.c > >b/src/mesa/drivers/dri/i965/brw_pipe_control.c > >index 7ee3cb6..05e14cd 100644 > >--- a/src/mesa/drivers/dri/i965/brw_pipe_control.c > >+++ b/src/mesa/drivers/dri/i965/brw_pipe_control.c > >@@ -341,12 +341,12 @@ brw_init_pipe_control(struct brw_context *brw, > > * the gen6 workaround because it involves actually writing to > > * the buffer, and the kernel doesn't let us write to the batch. > > */ > >- brw->workaround_bo = drm_intel_bo_alloc(brw->bufmgr, > >- "pipe_control workaround", > >- 4096, 4096); > >+ brw->workaround_bo = brw->intelScreen->workaround_bo; > > if (brw->workaround_bo == NULL) > > return -ENOMEM; > >+ drm_intel_bo_reference(brw->workaround_bo); > >+ > > brw->pipe_controls_since_last_cs_stall = 0; > > return 0; > >diff --git a/src/mesa/drivers/dri/i965/intel_screen.c > >b/src/mesa/drivers/dri/i965/intel_screen.c > >index 839a984..cd8e6eb 100644 > >--- a/src/mesa/drivers/dri/i965/intel_screen.c > >+++ b/src/mesa/drivers/dri/i965/intel_screen.c > >@@ -961,6 +961,7 @@ intelDestroyScreen(__DRIscreen * sPriv) > > { > > struct intel_screen *intelScreen = sPriv->driverPrivate; > >+ drm_intel_bo_unreference(intelScreen->workaround_bo); > > I guess this is OK because after the last context got destroyed the > screen would get destroyed?
Sure, but not taking a reference for each would get a little strange and you would still need a comment to explain why not following the standard idiom is safe. Then when we introduce context local brw_bo, the conversion from reference to local is much cleaner with the existing ref. -Chris -- Chris Wilson, Intel Open Source Technology Centre _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev