Filth (18) ***

Lupita Nyongo as Nakia, Chadwick Boseman as Black Panther (TChalla) and Danai Gurira as Okoye.

Movies AND TRAILER: Black Panther stars on the latest Marvel blockbuster

Have your say

Everyone is above the law, not least the police, in Jon S Baird’s giddy and grim black comedy adapted from Irvine Welsh’s 1998 novel of the same name.

Infused with directorial brio and no-holds-barred performances from an excellent ensemble cast, Filth mixes an unpleasant cocktail of sex, drugs and wanton violence then spikes the noxious brew with a generous dash of racism and homophobia.

James MacAvoy as Bruce Robertson in Filth. Picture: PA Photo/Lionsgate.

James MacAvoy as Bruce Robertson in Filth. Picture: PA Photo/Lionsgate.

Those of a nervous disposition will be fortunate to survive the opening five minutes unscathed, as Baird paints a wickedly funny portrait of Edinburgh’s police force as a boy’s club of degenerates, who commit adultery and gleefully sabotage a colleague’s chances of promotion.

Not since Danny Boyle’s breathless screen version of Trainspotting more than 15 years ago has a film realised Welsh’s distinctive voice so closely.

By necessity, some of the book’s devices, including a tapeworm, have been sacrificed to construct a narrative thread that we can cling to through the madness and debauchery.

But the author’s twisted humour defiantly sticks up two fingers in almost every frame.

Glasgow’s golden boy James McAvoy takes the sheen off his nice-guy screen image as misanthropic schemer, DS Bruce Robertson, who lords over his colleagues and shamelessly sucks up to his superior, Chief Inspector Bob Toal (John Sessions).

When Toal dangles a promotion in front of Bruce, the DS ruthlessly targets his five rivals - Peter Inglis (Emun Elliott), Amanda Drummond (Imogen Poots), Dougie Gillman (Brian McCardie), Ray Lennox (Jamie Bell) and Gus Bain (Gary Lewis) - by exploiting their insecurities.

Unfortunately, Bruce’s corrupt lifestyle and weak mental state is lead him to suffer a series of nightmarish visions involving a psychiatrist Dr Rossi (Jim Broadbent) with a freakishly large forehead.

The only glimmer of hope is a young widow, Mary (Joanne Froggatt), whose innate kindness might not be enough to drag Bruce back from the abyss.

Filth is anchored by a forceful central turn from McAvoy, who has gained a few pounds for the role and looks sweaty and exhausted by the gloomy closing frames.

Supporting performances are equally colourful, including Starsky & Hutch star, David Soul, in a hallucinogenic cameo, leading a boozy sing-along to his song Silver Lady.

Baird makes light work of the trim running time, delivering a sledgehammer to the guts with a resolution that tries to makes us empathise with Bruce, despite his heinous, self-serving actions.