vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sun Feb 25 21:30:40 2018 +0200| [1d95200c2fc7481852c913708c17f1a9bb7e68c1] | committer: Rémi Denis-Courmont
opengl: use ctz() instead of ffsll() When manipulating bit fields, zero-based ctz() is generally simpler than one-based ffs(). By definition: ffs(x) = x ? (ctz(x) + 1) : 0 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1d95200c2fc7481852c913708c17f1a9bb7e68c1 --- modules/video_output/opengl/converter_sw.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/modules/video_output/opengl/converter_sw.c b/modules/video_output/opengl/converter_sw.c index 78d6843fb5..16ebf0cb3c 100644 --- a/modules/video_output/opengl/converter_sw.c +++ b/modules/video_output/opengl/converter_sw.c @@ -276,26 +276,19 @@ persistent_map(const opengl_tex_converter_t *tc, picture_t *pic) return VLC_SUCCESS; } -/** Find next (bit) set */ -static int fnsll(unsigned long long x, unsigned i) -{ - if (i >= CHAR_BIT * sizeof (x)) - return 0; - return ffsll(x & ~((1ULL << i) - 1)); -} - static void persistent_release_gpupics(const opengl_tex_converter_t *tc, bool force) { struct priv *priv = tc->priv; + unsigned long long list = priv->persistent.list; /* Release all pictures that are not used by the GPU anymore */ - for (unsigned i = ffsll(priv->persistent.list); i; - i = fnsll(priv->persistent.list, i)) + while (list != 0) { - assert(priv->persistent.pics[i - 1] != NULL); + int i = ctz(list); + assert(priv->persistent.pics[i] != NULL); - picture_t *pic = priv->persistent.pics[i - 1]; + picture_t *pic = priv->persistent.pics[i]; picture_sys_t *picsys = pic->p_sys; assert(picsys->fence != NULL); @@ -307,10 +300,11 @@ persistent_release_gpupics(const opengl_tex_converter_t *tc, bool force) tc->vt->DeleteSync(picsys->fence); picsys->fence = NULL; - priv->persistent.list &= ~(1ULL << (i - 1)); - priv->persistent.pics[i - 1] = NULL; + priv->persistent.list &= ~(1ULL << i); + priv->persistent.pics[i] = NULL; picture_Release(pic); } + list &= ~(1ULL << i); } } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
