summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-09-10 20:53:47 +0200
committerwm4 <wm4@nowhere>2015-09-10 20:53:47 +0200
commita8eae12af5064a823976e264b33c5a37bd447ef8 (patch)
tree2163cfd3924a79816bd00244cbf2419f13668e57
parente2139488ff79c667e32b1eaf9984c5342eae0132 (diff)
downloadmpv-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.
-rw-r--r--video/out/opengl/video.c7
-rw-r--r--video/out/opengl/video_shaders.c7
-rw-r--r--video/out/opengl/video_shaders.h4
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