vo_gpu: sync duplicated condition on peak computation

pass_color_map() (in video_shaders.c) and pass_colormanage() (video.c)
both duplicate the condition on whether to do peak computation. Peak
computation requires a compute shader, so if the duplicated conditions
don't match, video_shaders.c will generate a compute shader, but video.c
will try to run it as fragment shader. This leads to a "blue screen".

This can be reproduced by playing a HDTV video with --target-peak=99.

It's not clear how to fix this. Should pass_tone_map() be only invoked
if mp_trc_is_hdr() == true (what pass_colormanage() uses to decide
whether to enable peak computation), or should pass_colormanage() just
tell pass_color_map() to skip peak computation? Decide for the latter,
as it's more robust.

Even if not correct, at least it gets rid of the blue shit.

Fixes: #7149
This commit is contained in:
wm4 2019-11-16 19:02:36 +01:00
parent b2006eeb74
commit 73c3dc0a7b
1 changed files with 2 additions and 0 deletions

View File

@ -2629,6 +2629,8 @@ static void pass_colormanage(struct gl_video *p, struct mp_colorspace src,
"uint frame_max;" "uint frame_max;"
"uint counter;" "uint counter;"
); );
} else {
tone_map.compute_peak = -1;
} }
// Adapt from src to dst as necessary // Adapt from src to dst as necessary