summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiklas Haas <git@haasn.xyz>2017-07-06 11:27:24 +0200
committerNiklas Haas <git@haasn.xyz>2017-07-06 11:30:33 +0200
commitaa2bdec26cf2544cffa4b2613086f226127e2ea8 (patch)
tree30b981bef8c110d31aad02155ebb0205a87e9432
parentef43854b3439907fa8bf77e25d450f3c71395218 (diff)
downloadmpv-aa2bdec26cf2544cffa4b2613086f226127e2ea8.tar.bz2
mpv-aa2bdec26cf2544cffa4b2613086f226127e2ea8.tar.xz
vo_opengl: also expose NAME_mul for user shaders
This is exposed so that bjin/mpv-prescalers can use textureGatherOffset for performance. Since there are now quite a lot of parameters where it isn't quite clear why they're all defined, add a paragraph to the man page that explains them a bit.
-rw-r--r--DOCS/man/options.rst8
-rw-r--r--video/out/opengl/video.c5
2 files changed, 11 insertions, 2 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index 7e6199b5e3..2e48c51ffa 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -4274,10 +4274,18 @@ The following video options are currently all specific to ``--vo=opengl`` and
to texture coordinates)
vec2 NAME_pt
The (unrotated) size of a single pixel, range [0,1].
+ float NAME_mul
+ The coefficient that needs to be multiplied into the texture contents
+ in order to normalize it to the range [0,1].
sampler NAME_raw
The raw bound texture itself. The use of this should be avoided unless
absolutely necessary.
+ Normally, users should use either NAME_tex or NAME_texOff to read from the
+ texture. For some shaders however , it can be better for performance to do
+ custom sampling from NAME_raw, in which case care needs to be taken to
+ respect NAME_mul and NAME_rot.
+
In addition to these parameters, the following uniforms are also globally
available:
diff --git a/video/out/opengl/video.c b/video/out/opengl/video.c
index f2f5260c74..876da267a3 100644
--- a/video/out/opengl/video.c
+++ b/video/out/opengl/video.c
@@ -1171,10 +1171,11 @@ static void hook_prelude(struct gl_video *p, const char *name, int id,
GLSLHF("#define %s_size texture_size%d\n", name, id);
GLSLHF("#define %s_rot texture_rot%d\n", name, id);
GLSLHF("#define %s_pt pixel_size%d\n", name, id);
+ GLSLHF("#define %s_mul %f\n", name, tex.multiplier);
// Set up the sampling functions
- GLSLHF("#define %s_tex(pos) (%f * vec4(texture(%s_raw, pos)).%s)\n",
- name, tex.multiplier, name, get_tex_swizzle(&tex));
+ GLSLHF("#define %s_tex(pos) (%s_mul * vec4(texture(%s_raw, pos)).%s)\n",
+ name, name, name, get_tex_swizzle(&tex));
// Since the extra matrix multiplication impacts performance,
// skip it unless the texture was actually rotated