diff options
author | wm4 <wm4@nowhere> | 2015-09-10 20:53:47 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-09-10 20:53:47 +0200 |
commit | a8eae12af5064a823976e264b33c5a37bd447ef8 (patch) | |
tree | 2163cfd3924a79816bd00244cbf2419f13668e57 /video | |
parent | e2139488ff79c667e32b1eaf9984c5342eae0132 (diff) | |
download | mpv-a8eae12af5064a823976e264b33c5a37bd447ef8.tar.bz2 mpv-a8eae12af5064a823976e264b33c5a37bd447ef8.tar.xz |
vo_opengl: fix shader compilation with debanding and OSX hwdec
2 things are being stupid here: Apple for requiring rectangle textures
with their IOSurface interop for no reason, and OpenGL having a
different sampler type for rectangle textures.
Diffstat (limited to 'video')
-rw-r--r-- | video/out/opengl/video.c | 7 | ||||
-rw-r--r-- | video/out/opengl/video_shaders.c | 7 | ||||
-rw-r--r-- | video/out/opengl/video_shaders.h | 4 |
3 files changed, 10 insertions, 8 deletions
diff --git a/video/out/opengl/video.c b/video/out/opengl/video.c index 5305239c43..8d6776ce0e 100644 --- a/video/out/opengl/video.c +++ b/video/out/opengl/video.c @@ -1128,8 +1128,9 @@ static void pass_read_video(struct gl_video *p) } if (p->opts.deband) { - pass_sample_deband(p->sc, p->opts.deband_opts, 1, merged ? 1.0 : tex_mul, - p->image_w, p->image_h, &p->lfg); + pass_sample_deband(p->sc, p->opts.deband_opts, 1, p->gl_target, + merged ? 1.0 : tex_mul, p->image_w, p->image_h, + &p->lfg); GLSL(color.zw = vec2(0.0, 1.0);) // skip unused finish_pass_fbo(p, &p->chroma_deband_fbo, c_w, c_h, 1, 0); p->use_normalized_range = true; @@ -1163,7 +1164,7 @@ static void pass_read_video(struct gl_video *p) GLSL(vec4 main;) GLSLF("{\n"); if (p->opts.deband) { - pass_sample_deband(p->sc, p->opts.deband_opts, 0, tex_mul, + pass_sample_deband(p->sc, p->opts.deband_opts, 0, p->gl_target, tex_mul, p->image_w, p->image_h, &p->lfg); p->use_normalized_range = true; } else { diff --git a/video/out/opengl/video_shaders.c b/video/out/opengl/video_shaders.c index e517977b00..16ea2784cf 100644 --- a/video/out/opengl/video_shaders.c +++ b/video/out/opengl/video_shaders.c @@ -378,8 +378,8 @@ const struct m_sub_options deband_conf = { // Stochastically sample a debanded result from a given texture void pass_sample_deband(struct gl_shader_cache *sc, struct deband_opts *opts, - int tex_num, float tex_mul, float img_w, float img_h, - AVLFG *lfg) + int tex_num, GLenum tex_target, float tex_mul, + float img_w, float img_h, AVLFG *lfg) { // Set up common variables and initialize the PRNG GLSLF("// debanding (tex %d)\n", tex_num); @@ -388,7 +388,8 @@ void pass_sample_deband(struct gl_shader_cache *sc, struct deband_opts *opts, // Helper: Compute a stochastic approximation of the avg color around a // pixel - GLSLH(vec4 average(sampler2D tex, vec2 pos, float range, inout float h) {) + GLSLHF("vec4 average(%s tex, vec2 pos, float range, inout float h) {", + mp_sampler_type(tex_target)); // Compute a random rangle and distance GLSLH(float dist = rand(h) * range; h = permute(h);) GLSLH(float dir = rand(h) * 6.2831853; h = permute(h);) diff --git a/video/out/opengl/video_shaders.h b/video/out/opengl/video_shaders.h index 81094e4c39..aa4afa2289 100644 --- a/video/out/opengl/video_shaders.h +++ b/video/out/opengl/video_shaders.h @@ -46,7 +46,7 @@ void pass_linearize(struct gl_shader_cache *sc, enum mp_csp_trc trc); void pass_delinearize(struct gl_shader_cache *sc, enum mp_csp_trc trc); void pass_sample_deband(struct gl_shader_cache *sc, struct deband_opts *opts, - int tex_num, float tex_mul, float img_w, float img_h, - AVLFG *lfg); + int tex_num, GLenum tex_target, float tex_mul, + float img_w, float img_h, AVLFG *lfg); #endif |