I used to promote VLC at every corner, until they dropped the ball on 4K support big time. Even with a good mid-price graphics card, they're unable to utilize the GPU hardware effectively, and if you don't have a good amount of CPU power, the app chokes when it's asked to play 4K video. Ridiculous, since even the integrated Intel graphics on CPUs are now capable of playing 4K without any trouble.
I can only comment on the Linux side of GPU accelerated video decoding as that's where my experience is: Pretty much _the_ standard for GPU accelerated video decoding is VDPAU, originally an nvidia project, now open source. Support for intel integrated GPUs came a little later in Linux under the guise of VAAPI (technically a subset of VDPAU). ATI/AMD also have a proprietary API called XVBA via their catalyst drivers but I haven't had much interaction with ATI hardware on Linux for a long time.
VDPAU allows my 7 year old weedy 1.6ghz atom to play 1080p without breaking a sweat (around 2% CPU usage).
VLC lagged behind a lot of other players (e.g mplayer, my personal favourite player; which added support in ~2009 or so), but has had decent VDPAU/VAAPI support since 2.1 (2013?).
In the case of VDPAU on nvidia, support for 4K is a hardware limitation (the purevideo chip that actually does the decoding). It's supported on purevideo 5 and later (present on some later fermi and most Kepler architecture cards).
It's the same story with Intel. Generally speaking, only Haswell and later architecture CPUs have support for 4K.
mpv is fast and plays just about everything, but it takes a bit getting used to, since its GUI is very minimalistic (by design). Configuration is via text files, and it is scriptable in Lua.