summaryrefslogtreecommitdiffstats
path: root/libvo/gl_common.c
diff options
context:
space:
mode:
authorwm4 <wm4@mplayer2.org>2011-10-24 00:43:12 +0200
committerUoti Urpala <uau@mplayer2.org>2011-10-24 08:36:17 +0300
commit2123bff6fa24d43dfc5768ddc0ca855819f0b1b0 (patch)
tree67f42ded0992478c72f06d486d244c703a6fbbf9 /libvo/gl_common.c
parent23fa8e99643e020c2f637e0da7e61b312176b966 (diff)
downloadmpv-2123bff6fa24d43dfc5768ddc0ca855819f0b1b0.tar.bz2
mpv-2123bff6fa24d43dfc5768ddc0ca855819f0b1b0.tar.xz
vo_gl: remove support for nvidia register combiners (yuv=1)
The register combiner color conversion is broken and seems to use a slightly incorrect color matrix (the image looks gray-ish). Completely remove all code related to nVidia register combiners. Unless you have an ancient nVidia GPU, there's no reason to prefer register combiners over fragment shaders. Users with ancient GPUs without fragment shader support can just use -vo xv. Passing yuv=1 (register combiners) as sub option will print a warning and use yuv=2 (fragment shaders) instead.
Diffstat (limited to 'libvo/gl_common.c')
-rw-r--r--libvo/gl_common.c109
1 files changed, 0 insertions, 109 deletions
diff --git a/libvo/gl_common.c b/libvo/gl_common.c
index 310d31f7b3..bbcbeb2f3b 100644
--- a/libvo/gl_common.c
+++ b/libvo/gl_common.c
@@ -371,14 +371,6 @@ static const extfunc_desc_t extfuncs[] = {
("glUnmapBuffer", "glUnmapBufferARB")),
DEF_EXT_DESC(BufferData, NULL,
("glBufferData", "glBufferDataARB")),
- DEF_EXT_DESC(CombinerParameterfv, "NV_register_combiners",
- ("glCombinerParameterfv", "glCombinerParameterfvNV")),
- DEF_EXT_DESC(CombinerParameteri, "NV_register_combiners",
- ("glCombinerParameteri", "glCombinerParameteriNV")),
- DEF_EXT_DESC(CombinerInput, "NV_register_combiners",
- ("glCombinerInput", "glCombinerInputNV")),
- DEF_EXT_DESC(CombinerOutput, "NV_register_combiners",
- ("glCombinerOutput", "glCombinerOutputNV")),
DEF_EXT_DESC(BeginFragmentShader, "ATI_fragment_shader",
("glBeginFragmentShaderATI")),
DEF_EXT_DESC(EndFragmentShader, "ATI_fragment_shader",
@@ -642,86 +634,6 @@ void glUploadTex(GL *gl, GLenum target, GLenum format, GLenum type,
gl->TexSubImage2D(target, 0, x, y, w, y_max - y, format, type, data);
}
-static void fillUVcoeff(GLfloat *ucoef, GLfloat *vcoef,
- float uvcos, float uvsin)
-{
- int i;
- ucoef[0] = 0 * uvcos + 1.403 * uvsin;
- vcoef[0] = 0 * uvsin + 1.403 * uvcos;
- ucoef[1] = -0.344 * uvcos + -0.714 * uvsin;
- vcoef[1] = -0.344 * uvsin + -0.714 * uvcos;
- ucoef[2] = 1.770 * uvcos + 0 * uvsin;
- vcoef[2] = 1.770 * uvsin + 0 * uvcos;
- ucoef[3] = 0;
- vcoef[3] = 0;
- // Coefficients (probably) must be in [0, 1] range, whereas they originally
- // are in [-2, 2] range, so here comes the trick:
- // First put them in the [-0.5, 0.5] range, then add 0.5.
- // This can be undone with the HALF_BIAS and SCALE_BY_FOUR arguments
- // for CombinerInput and CombinerOutput (or the respective ATI variants)
- for (i = 0; i < 4; i++) {
- ucoef[i] = ucoef[i] * 0.25 + 0.5;
- vcoef[i] = vcoef[i] * 0.25 + 0.5;
- }
-}
-
-/**
- * \brief Setup register combiners for YUV to RGB conversion.
- * \param uvcos used for saturation and hue adjustment
- * \param uvsin used for saturation and hue adjustment
- */
-static void glSetupYUVCombiners(GL *gl, float uvcos, float uvsin)
-{
- GLfloat ucoef[4];
- GLfloat vcoef[4];
- GLint i;
- if (!gl->CombinerInput || !gl->CombinerOutput ||
- !gl->CombinerParameterfv || !gl->CombinerParameteri) {
- mp_msg(MSGT_VO, MSGL_FATAL, "[gl] Combiner functions missing!\n");
- return;
- }
- gl->GetIntegerv(GL_MAX_GENERAL_COMBINERS_NV, &i);
- if (i < 2)
- mp_msg(MSGT_VO, MSGL_ERR,
- "[gl] 2 general combiners needed for YUV combiner support (found %i)\n", i);
- gl->GetIntegerv(GL_MAX_TEXTURE_UNITS, &i);
- if (i < 3)
- mp_msg(MSGT_VO, MSGL_ERR,
- "[gl] 3 texture units needed for YUV combiner support (found %i)\n", i);
- fillUVcoeff(ucoef, vcoef, uvcos, uvsin);
- gl->CombinerParameterfv(GL_CONSTANT_COLOR0_NV, ucoef);
- gl->CombinerParameterfv(GL_CONSTANT_COLOR1_NV, vcoef);
-
- // UV first, like this green component cannot overflow
- gl->CombinerInput(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_A_NV,
- GL_TEXTURE1, GL_HALF_BIAS_NORMAL_NV, GL_RGB);
- gl->CombinerInput(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_B_NV,
- GL_CONSTANT_COLOR0_NV, GL_HALF_BIAS_NORMAL_NV, GL_RGB);
- gl->CombinerInput(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_C_NV,
- GL_TEXTURE2, GL_HALF_BIAS_NORMAL_NV, GL_RGB);
- gl->CombinerInput(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_D_NV,
- GL_CONSTANT_COLOR1_NV, GL_HALF_BIAS_NORMAL_NV, GL_RGB);
- gl->CombinerOutput(GL_COMBINER0_NV, GL_RGB, GL_DISCARD_NV, GL_DISCARD_NV,
- GL_SPARE0_NV, GL_SCALE_BY_FOUR_NV, GL_NONE, GL_FALSE,
- GL_FALSE, GL_FALSE);
-
- // stage 2
- gl->CombinerInput(GL_COMBINER1_NV, GL_RGB, GL_VARIABLE_A_NV, GL_SPARE0_NV,
- GL_SIGNED_IDENTITY_NV, GL_RGB);
- gl->CombinerInput(GL_COMBINER1_NV, GL_RGB, GL_VARIABLE_B_NV, GL_ZERO,
- GL_UNSIGNED_INVERT_NV, GL_RGB);
- gl->CombinerInput(GL_COMBINER1_NV, GL_RGB, GL_VARIABLE_C_NV,
- GL_TEXTURE0, GL_SIGNED_IDENTITY_NV, GL_RGB);
- gl->CombinerInput(GL_COMBINER1_NV, GL_RGB, GL_VARIABLE_D_NV, GL_ZERO,
- GL_UNSIGNED_INVERT_NV, GL_RGB);
- gl->CombinerOutput(GL_COMBINER1_NV, GL_RGB, GL_DISCARD_NV, GL_DISCARD_NV,
- GL_SPARE0_NV, GL_NONE, GL_NONE, GL_FALSE,
- GL_FALSE, GL_FALSE);
-
- // leave final combiner stage in default mode
- gl->CombinerParameteri(GL_NUM_GENERAL_COMBINERS_NV, 2);
-}
-
/**
* \brief Setup ATI version of register combiners for YUV to RGB conversion.
* \param csp_params parameters used for colorspace conversion
@@ -1386,16 +1298,11 @@ int glAutodetectYUVConversion(GL *gl)
*/
void glSetupYUVConversion(GL *gl, gl_conversion_params_t *params)
{
- float uvcos = params->csp_params.saturation * cos(params->csp_params.hue);
- float uvsin = params->csp_params.saturation * sin(params->csp_params.hue);
if (params->chrom_texw == 0)
params->chrom_texw = 1;
if (params->chrom_texh == 0)
params->chrom_texh = 1;
switch (YUV_CONVERSION(params->type)) {
- case YUV_CONVERSION_COMBINERS:
- glSetupYUVCombiners(gl, uvcos, uvsin);
- break;
case YUV_CONVERSION_COMBINERS_ATI:
glSetupYUVFragmentATI(gl, &params->csp_params, 0);
break;
@@ -1425,14 +1332,6 @@ void glSetupYUVConversion(GL *gl, gl_conversion_params_t *params)
void glEnableYUVConversion(GL *gl, GLenum target, int type)
{
switch (YUV_CONVERSION(type)) {
- case YUV_CONVERSION_COMBINERS:
- gl->ActiveTexture(GL_TEXTURE1);
- gl->Enable(target);
- gl->ActiveTexture(GL_TEXTURE2);
- gl->Enable(target);
- gl->ActiveTexture(GL_TEXTURE0);
- gl->Enable(GL_REGISTER_COMBINERS_NV);
- break;
case YUV_CONVERSION_COMBINERS_ATI:
gl->ActiveTexture(GL_TEXTURE1);
gl->Enable(target);
@@ -1468,14 +1367,6 @@ void glEnableYUVConversion(GL *gl, GLenum target, int type)
void glDisableYUVConversion(GL *gl, GLenum target, int type)
{
switch (YUV_CONVERSION(type)) {
- case YUV_CONVERSION_COMBINERS:
- gl->ActiveTexture(GL_TEXTURE1);
- gl->Disable(target);
- gl->ActiveTexture(GL_TEXTURE2);
- gl->Disable(target);
- gl->ActiveTexture(GL_TEXTURE0);
- gl->Disable(GL_REGISTER_COMBINERS_NV);
- break;
case YUV_CONVERSION_COMBINERS_ATI:
gl->ActiveTexture(GL_TEXTURE1);
gl->Disable(target);