diff --git a/video/out/gl_video.c b/video/out/gl_video.c index 5cf832d201..e2b64968ce 100644 --- a/video/out/gl_video.c +++ b/video/out/gl_video.c @@ -826,9 +826,9 @@ static void shader_setup_scaler(char **shader, struct scaler *scaler, int pass) { const char *target = scaler->index == 0 ? "SAMPLE_L" : "SAMPLE_C"; if (!scaler->kernel) { - *shader = talloc_asprintf_append(*shader, "#define %s sample_%s_%c\n", - target, scaler->name, - "lc"[scaler->index]); + *shader = talloc_asprintf_append(*shader, "#define %s(p0, p1, p2) " + "sample_%s(p0, p1, p2, filter_param1_%c)\n", + target, scaler->name, "lc"[scaler->index]); } else { int size = scaler->kernel->size; if (pass != -1) { @@ -1033,13 +1033,13 @@ static void compile_shaders(struct gl_video *p) // Force using the luma scaler on chroma. If the "indirect" stage is // used, the actual scaling will happen in the next stage. shader_def(&header_conv, "SAMPLE_C", - use_indirect ? "sample_bilinear_l" : "SAMPLE_L"); + use_indirect ? "SAMPLE_BILINEAR" : "SAMPLE_L"); } if (use_indirect) { // We don't use filtering for the Y-plane (luma), because it's never // scaled in this scenario. - shader_def(&header_conv, "SAMPLE_L", "sample_bilinear_l"); + shader_def(&header_conv, "SAMPLE_L", "SAMPLE_BILINEAR"); shader_def_opt(&header_conv, "FIXED_SCALE", true); header_conv = t_concat(tmp, header, header_conv); p->indirect_program = diff --git a/video/out/gl_video_shaders.glsl b/video/out/gl_video_shaders.glsl index 6e135f0d11..7b6a1f07fa 100644 --- a/video/out/gl_video_shaders.glsl +++ b/video/out/gl_video_shaders.glsl @@ -172,6 +172,8 @@ vec4 sample_bilinear(VIDEO_SAMPLER tex, vec2 texsize, vec2 texcoord, float param return texture(tex, texcoord); } +#define SAMPLE_BILINEAR(p0, p1, p2) sample_bilinear(p0, p1, p2, 0) + // Explanation how bicubic scaling with only 4 texel fetches is done: // http://www.mate.tue.nl/mate/pdfs/10318.pdf // 'Efficient GPU-Based Texture Interpolation using Uniform B-Splines' @@ -352,22 +354,6 @@ vec4 sample_sharpen5(VIDEO_SAMPLER tex, vec2 texsize, vec2 texcoord, float param return p + t * param1; } -#define CONCAT(a, b) a ## b - -#define SAMPLE_FILTER_LC(NAME) \ - vec4 CONCAT(NAME, _l)(VIDEO_SAMPLER tex, vec2 texsize, vec2 texcoord) { \ - return NAME(tex, texsize, texcoord, filter_param1_l); \ - } \ - \ - vec4 CONCAT(NAME, _c)(VIDEO_SAMPLER tex, vec2 texsize, vec2 texcoord) { \ - return NAME(tex, texsize, texcoord, filter_param1_c); \ - } - -SAMPLE_FILTER_LC(sample_bilinear) -SAMPLE_FILTER_LC(sample_bicubic_fast) -SAMPLE_FILTER_LC(sample_sharpen3) -SAMPLE_FILTER_LC(sample_sharpen5) - void main() { vec2 chr_texcoord = texcoord; #ifdef USE_RECTANGLE