On Sat, 23 Jul 2016 08:36:29 -0500 Derek Foreman <der...@osg.samsung.com> said:

> On 22/07/16 10:52 PM, Carsten Haitzler (The Rasterman) wrote:
> > On Fri, 22 Jul 2016 12:34:59 -0700 Derek Foreman <der...@osg.samsung.com>
> > said:
> > 
> > oh really. this sounds bizarre to just magically have 2 funcs that map
> > either cached or uncached with nothing in their names to tell you that... :(
> 
> Indeed!  I think the gtt one is for mapping something specifically as a
> gpu source/target, but the mapping I changed is only using it as a
> target for software render.  It's not the compositor side mapping.
> 
> There are also ioctls for managing coherency manually that might improve
> performance even more (you can avoid the map/unmap entirely most of the
> time and just flush with an intel specific ioctl).
> 
> I'll mess with that sometime after the release.  But for now this seems
> to bring back all the lost performance from switching to dmabuf on
> software compositor, and should be a net win on hardware (though I've
> not measured it) because it saves a texture upload.

it will be a win. i remember an argument with a certain gpu vendor about hmmm 5
years ago asking to get zero copy gl texture access so we can just map, write
and unmap. they jumped up and down telling us how it'd be slower etc. etc. etc.
- i went "ummm no."... so with persistence such an extension was implemented
and guess what? like a 60% speedup for the test cases where we cpu-side
modified a texture every frame. :) if done right such things are a win. they
can be bigger wins indeed with special flush ioctl's to avoid the map/unmap and
even being able to flush ONLY the memory modified etc. :)

> >> derekf pushed a commit to branch master.
> >>
> >> http://git.enlightenment.org/core/efl.git/commit/?id=6108aa942cb933478fb1c72ab05d012fb9375276
> >>
> >> commit 6108aa942cb933478fb1c72ab05d012fb9375276
> >> Author: Derek Foreman <der...@osg.samsung.com>
> >> Date:   Fri Jul 22 14:32:37 2016 -0500
> >>
> >>     wayland_shm: Speed up dmabuf on intel
> >>     
> >>     using map_bo/unmap_bo instead of gem_map_bo_gtt/gem_unmap_bo_gtt
> >>     results in a cacheable mapping and a large performance boost.
> >>     
> >>     (dmabuf will still remain turned off by default for the release)
> >> ---
> >>  src/modules/evas/engines/wayland_shm/evas_dmabuf.c | 12 ++++++------
> >>  1 file changed, 6 insertions(+), 6 deletions(-)
> >>
> >> diff --git a/src/modules/evas/engines/wayland_shm/evas_dmabuf.c
> >> b/src/modules/evas/engines/wayland_shm/evas_dmabuf.c index 1f22626..ed8e1b1
> >> 100644
> >> --- a/src/modules/evas/engines/wayland_shm/evas_dmabuf.c
> >> +++ b/src/modules/evas/engines/wayland_shm/evas_dmabuf.c
> >> @@ -87,8 +87,8 @@ static Dmabuf_Buffer *_evas_dmabuf_buffer_init
> >> (Dmabuf_Surface *s, int w, int h); static void _evas_dmabuf_buffer_destroy
> >> (Dmabuf_Buffer *b); 
> >>  drm_intel_bufmgr *(*sym_drm_intel_bufmgr_gem_init)(int fd, int
> >> batch_size) = NULL; -int (*sym_drm_intel_gem_bo_unmap_gtt)(drm_intel_bo
> >> *bo) = NULL; -int (*sym_drm_intel_gem_bo_map_gtt)(drm_intel_bo *bo) = NULL;
> >> +int (*sym_drm_intel_bo_unmap)(drm_intel_bo *bo) = NULL;
> >> +int (*sym_drm_intel_bo_map)(drm_intel_bo *bo) = NULL;
> >>  drm_intel_bo *(*sym_drm_intel_bo_alloc_tiled)(drm_intel_bufmgr *mgr, const
> >> char *name, int x, int y, int cpp, uint32_t *tile, unsigned long *pitch,
> >> unsigned long flags) = NULL; void (*sym_drm_intel_bo_unreference)
> >> (drm_intel_bo *bo) = NULL; int (*sym_drmPrimeHandleToFD)(int fd, uint32_t
> >> handle, uint32_t flags, int *prime_fd) = NULL; @@ -136,7 +136,7 @@
> >> _intel_map (Dmabuf_Buffer *buf) drm_intel_bo *bo; 
> >>     bo = (drm_intel_bo *)buf->bh;
> >> -   if (sym_drm_intel_gem_bo_map_gtt(bo) != 0) return NULL;
> >> +   if (sym_drm_intel_bo_map(bo) != 0) return NULL;
> >>     return bo->virtual;
> >>  }
> >>  
> >> @@ -146,7 +146,7 @@ _intel_unmap(Dmabuf_Buffer *buf)
> >>     drm_intel_bo *bo;
> >>  
> >>     bo = (drm_intel_bo *)buf->bh;
> >> -   sym_drm_intel_gem_bo_unmap_gtt(bo);
> >> +   sym_drm_intel_bo_unmap(bo);
> >>  }
> >>  
> >>  static void
> >> @@ -174,8 +174,8 @@ _intel_buffer_manager_setup(int fd)
> >>     if (!drm_intel_lib) return EINA_FALSE;
> >>  
> >>     SYM(drm_intel_lib, drm_intel_bufmgr_gem_init);
> >> -   SYM(drm_intel_lib, drm_intel_gem_bo_unmap_gtt);
> >> -   SYM(drm_intel_lib, drm_intel_gem_bo_map_gtt);
> >> +   SYM(drm_intel_lib, drm_intel_bo_unmap);
> >> +   SYM(drm_intel_lib, drm_intel_bo_map);
> >>     SYM(drm_intel_lib, drm_intel_bo_alloc_tiled);
> >>     SYM(drm_intel_lib, drm_intel_bo_unreference);
> >>     SYM(drm_intel_lib, drm_intel_bufmgr_destroy);
> >>
> >> -- 
> >>
> >>
> > 
> > 
> 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports.http://sdm.link/zohodev2dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to