summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/en/vo.rst9
-rw-r--r--video/out/d3d_shader_yuv.hlsl15
-rw-r--r--video/out/d3d_shader_yuv_2ch.h170
-rw-r--r--video/out/vo_direct3d.c81
4 files changed, 5 insertions, 270 deletions
diff --git a/DOCS/man/en/vo.rst b/DOCS/man/en/vo.rst
index 0af4d6bd03..824342b279 100644
--- a/DOCS/man/en/vo.rst
+++ b/DOCS/man/en/vo.rst
@@ -212,15 +212,6 @@ direct3d_shaders (Windows only)
exact-backbuffer
Always resize the backbuffer to window size.
- no16bit-textures
- Don't use textures with a 16 bit color channel for YUV formats that
- use more than 8 bits per component. Instead, use D3DFMT_A8L8 textures
- and compute the values sampled from the 2 channels back into one.
- Might be slower, since the shader becomes slightly more complicated.
- Might work better, if your drivers either don't support D3DFMT_L16,
- or if either the texture unit or the shaders don't operate in at least
- 16 bit precision.
-
direct3d (Windows only)
Same as ``direct3d_shaders``, but with the options ``disable-textures``
and ``disable-shaders`` forced.
diff --git a/video/out/d3d_shader_yuv.hlsl b/video/out/d3d_shader_yuv.hlsl
index b17e257210..0e78554254 100644
--- a/video/out/d3d_shader_yuv.hlsl
+++ b/video/out/d3d_shader_yuv.hlsl
@@ -1,6 +1,5 @@
// Compile with:
// fxc.exe /Tps_2_0 /Fhd3d_shader_yuv.h d3d_shader_yuv.hlsl /Vnd3d_shader_yuv
-// fxc.exe /Tps_2_0 /Fhd3d_shader_yuv_2ch.h d3d_shader_yuv.hlsl /Vnd3d_shader_yuv_2ch /DUSE_2CH=1
// Be careful with this shader. You can't use constant slots, since we don't
// load the shader with D3DX. All uniform variables are mapped to hardcoded
@@ -11,26 +10,12 @@ sampler2D tex1 : register(s1);
sampler2D tex2 : register(s2);
uniform float4x4 colormatrix : register(c0);
-uniform float2 depth : register(c5);
-
-#ifdef USE_2CH
-
-float1 sample(sampler2D tex, float2 t)
-{
- // Sample from A8L8 format as if we sampled a single value from L16.
- // We compute the 2 channel values back into one.
- return dot(tex2D(tex, t).xw, depth);
-}
-
-#else
float1 sample(sampler2D tex, float2 t)
{
return tex2D(tex, t).x;
}
-#endif
-
float4 main(float2 t0 : TEXCOORD0,
float2 t1 : TEXCOORD1,
float2 t2 : TEXCOORD2)
diff --git a/video/out/d3d_shader_yuv_2ch.h b/video/out/d3d_shader_yuv_2ch.h
deleted file mode 100644
index 45dcc73992..0000000000
--- a/video/out/d3d_shader_yuv_2ch.h
+++ /dev/null
@@ -1,170 +0,0 @@
-#if 0
-//
-// Generated by Microsoft (R) HLSL Shader Compiler 9.27.952.3022
-//
-// fxc /Tps_2_0 /Fhz:\tmp\mplayer\libvo\d3d_shader_yuv_2ch.h
-// z:\tmp\mplayer\libvo\d3d_shader_yuv.hlsl /Vnd3d_shader_yuv_2ch
-// /DUSE_2CH=1
-//
-//
-// Parameters:
-//
-// float4x4 colormatrix;
-// float2 depth;
-// sampler2D tex0;
-// sampler2D tex1;
-// sampler2D tex2;
-//
-//
-// Registers:
-//
-// Name Reg Size
-// ------------ ----- ----
-// colormatrix c0 4
-// depth c5 1
-// tex0 s0 1
-// tex1 s1 1
-// tex2 s2 1
-//
-
- ps_2_0
- def c4, 1, 0, 0, 0
- dcl t0.xy
- dcl t1.xy
- dcl t2.xy
- dcl_2d s0
- dcl_2d s1
- dcl_2d s2
- texld r0, t0, s0
- texld r1, t1, s1
- texld r2, t2, s2
- mul r0.x, r0.x, c5.x
- mad r0.x, r0.w, c5.y, r0.x
- mul r1.x, r1.x, c5.x
- mad r0.y, r1.w, c5.y, r1.x
- mul r1.x, r2.x, c5.x
- mad r0.z, r2.w, c5.y, r1.x
- mov r0.w, c4.x
- dp4 r1.x, r0, c0
- dp4 r1.y, r0, c1
- dp4 r1.z, r0, c2
- dp4 r1.w, r0, c3
- mov oC0, r1
-
-// approximately 15 instruction slots used (3 texture, 12 arithmetic)
-#endif
-
-const BYTE d3d_shader_yuv_2ch[] =
-{
- 0, 2, 255, 255, 254, 255,
- 78, 0, 67, 84, 65, 66,
- 28, 0, 0, 0, 3, 1,
- 0, 0, 0, 2, 255, 255,
- 5, 0, 0, 0, 28, 0,
- 0, 0, 0, 1, 0, 0,
- 252, 0, 0, 0, 128, 0,
- 0, 0, 2, 0, 0, 0,
- 4, 0, 2, 0, 140, 0,
- 0, 0, 0, 0, 0, 0,
- 156, 0, 0, 0, 2, 0,
- 5, 0, 1, 0, 22, 0,
- 164, 0, 0, 0, 0, 0,
- 0, 0, 180, 0, 0, 0,
- 3, 0, 0, 0, 1, 0,
- 2, 0, 188, 0, 0, 0,
- 0, 0, 0, 0, 204, 0,
- 0, 0, 3, 0, 1, 0,
- 1, 0, 6, 0, 212, 0,
- 0, 0, 0, 0, 0, 0,
- 228, 0, 0, 0, 3, 0,
- 2, 0, 1, 0, 10, 0,
- 236, 0, 0, 0, 0, 0,
- 0, 0, 99, 111, 108, 111,
- 114, 109, 97, 116, 114, 105,
- 120, 0, 3, 0, 3, 0,
- 4, 0, 4, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 100, 101, 112, 116, 104, 0,
- 171, 171, 1, 0, 3, 0,
- 1, 0, 2, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 116, 101, 120, 48, 0, 171,
- 171, 171, 4, 0, 12, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 116, 101, 120, 49, 0, 171,
- 171, 171, 4, 0, 12, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 116, 101, 120, 50, 0, 171,
- 171, 171, 4, 0, 12, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 112, 115, 95, 50, 95, 48,
- 0, 77, 105, 99, 114, 111,
- 115, 111, 102, 116, 32, 40,
- 82, 41, 32, 72, 76, 83,
- 76, 32, 83, 104, 97, 100,
- 101, 114, 32, 67, 111, 109,
- 112, 105, 108, 101, 114, 32,
- 57, 46, 50, 55, 46, 57,
- 53, 50, 46, 51, 48, 50,
- 50, 0, 81, 0, 0, 5,
- 4, 0, 15, 160, 0, 0,
- 128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 31, 0, 0, 2,
- 0, 0, 0, 128, 0, 0,
- 3, 176, 31, 0, 0, 2,
- 0, 0, 0, 128, 1, 0,
- 3, 176, 31, 0, 0, 2,
- 0, 0, 0, 128, 2, 0,
- 3, 176, 31, 0, 0, 2,
- 0, 0, 0, 144, 0, 8,
- 15, 160, 31, 0, 0, 2,
- 0, 0, 0, 144, 1, 8,
- 15, 160, 31, 0, 0, 2,
- 0, 0, 0, 144, 2, 8,
- 15, 160, 66, 0, 0, 3,
- 0, 0, 15, 128, 0, 0,
- 228, 176, 0, 8, 228, 160,
- 66, 0, 0, 3, 1, 0,
- 15, 128, 1, 0, 228, 176,
- 1, 8, 228, 160, 66, 0,
- 0, 3, 2, 0, 15, 128,
- 2, 0, 228, 176, 2, 8,
- 228, 160, 5, 0, 0, 3,
- 0, 0, 1, 128, 0, 0,
- 0, 128, 5, 0, 0, 160,
- 4, 0, 0, 4, 0, 0,
- 1, 128, 0, 0, 255, 128,
- 5, 0, 85, 160, 0, 0,
- 0, 128, 5, 0, 0, 3,
- 1, 0, 1, 128, 1, 0,
- 0, 128, 5, 0, 0, 160,
- 4, 0, 0, 4, 0, 0,
- 2, 128, 1, 0, 255, 128,
- 5, 0, 85, 160, 1, 0,
- 0, 128, 5, 0, 0, 3,
- 1, 0, 1, 128, 2, 0,
- 0, 128, 5, 0, 0, 160,
- 4, 0, 0, 4, 0, 0,
- 4, 128, 2, 0, 255, 128,
- 5, 0, 85, 160, 1, 0,
- 0, 128, 1, 0, 0, 2,
- 0, 0, 8, 128, 4, 0,
- 0, 160, 9, 0, 0, 3,
- 1, 0, 1, 128, 0, 0,
- 228, 128, 0, 0, 228, 160,
- 9, 0, 0, 3, 1, 0,
- 2, 128, 0, 0, 228, 128,
- 1, 0, 228, 160, 9, 0,
- 0, 3, 1, 0, 4, 128,
- 0, 0, 228, 128, 2, 0,
- 228, 160, 9, 0, 0, 3,
- 1, 0, 8, 128, 0, 0,
- 228, 128, 3, 0, 228, 160,
- 1, 0, 0, 2, 0, 8,
- 15, 128, 1, 0, 228, 128,
- 255, 255, 0, 0
-};
diff --git a/video/out/vo_direct3d.c b/video/out/vo_direct3d.c
index 6b9ca7e32b..0b9317f22e 100644
--- a/video/out/vo_direct3d.c
+++ b/video/out/vo_direct3d.c
@@ -45,13 +45,9 @@
// shaders generated by fxc.exe from d3d_shader_yuv.hlsl
#include "d3d_shader_yuv.h"
-#include "d3d_shader_yuv_2ch.h"
-// TODO: beg someone to add this (there is already IMGFMT_Y8)
-#define IMGFMT_A8Y8 MAKEFOURCC('A', '8', 'Y', '8')
-
-#define IMGFMT_IS_Y(x) ((x) == IMGFMT_Y8 || (x) == IMGFMT_Y16 || (x) == IMGFMT_A8Y8)
+#define IMGFMT_IS_Y(x) ((x) == IMGFMT_Y8 || (x) == IMGFMT_Y16)
#define IMGFMT_Y_DEPTH(x) ((x) == IMGFMT_Y8 ? 8 : 16)
#define DEVTYPE D3DDEVTYPE_HAL
@@ -130,7 +126,6 @@ typedef struct d3d_priv {
int opt_texture_memory;
int opt_swap_discard;
int opt_exact_backbuffer;
- int opt_16bit_textures;
struct vo *vo;
@@ -149,7 +144,6 @@ typedef struct d3d_priv {
StretchRect */
bool use_shaders; /**< use shader for YUV color conversion
(or possibly for RGB video equalizers) */
- bool use_2ch_hack; /**< 2 byte YUV formats use 2 channel hack */
int plane_count;
struct texplane planes[3];
@@ -185,7 +179,6 @@ typedef struct d3d_priv {
int max_texture_height; /**< from the device capabilities */
D3DMATRIX d3d_colormatrix;
- float d3d_depth_vector[4];
struct mp_csp_details colorspace;
struct mp_csp_equalizer video_eq;
@@ -219,7 +212,6 @@ static const struct fmt_entry fmt_table[] = {
// grayscale (can be considered both packed and planar)
{IMGFMT_Y8, D3DFMT_L8},
{IMGFMT_Y16, D3DFMT_L16},
- {IMGFMT_A8Y8, D3DFMT_A8L8},
{0},
};
@@ -921,9 +913,6 @@ static uint32_t d3d_draw_frame(d3d_priv *priv)
IDirect3DDevice9_SetPixelShaderConstantF(priv->d3d_device, 0,
&priv->d3d_colormatrix._11,
4);
- IDirect3DDevice9_SetPixelShaderConstantF(priv->d3d_device, 5,
- priv->d3d_depth_vector,
- 1);
}
IDirect3DDevice9_SetFVF(priv->d3d_device, D3DFVF_VIDEO_VERTEX);
@@ -1042,13 +1031,7 @@ static D3DFORMAT check_shader_conversion(d3d_priv *priv, uint32_t fmt)
bool is_8bit = component_bits == 8;
if (!is_8bit && priv->opt_only_8bit)
return 0;
- int texfmt = IMGFMT_Y8;
- if (!is_8bit) {
- if (priv->opt_16bit_textures)
- texfmt = IMGFMT_Y16;
- else
- texfmt = IMGFMT_A8Y8;
- }
+ int texfmt = is_8bit ? IMGFMT_Y8 : IMGFMT_Y16;
return check_format(priv, texfmt, true);
}
@@ -1084,7 +1067,6 @@ static bool init_rendering_mode(d3d_priv *priv, uint32_t fmt, bool initialize)
priv->use_shaders = false;
priv->use_textures = false;
- priv->use_2ch_hack = false;
priv->movie_src_fmt = 0;
priv->pixel_shader_data = NULL;
priv->plane_count = 0;
@@ -1127,14 +1109,7 @@ static bool init_rendering_mode(d3d_priv *priv, uint32_t fmt, bool initialize)
if (n > 0)
planes[n].clearval = get_chroma_clear_val(desc.plane_bits);
}
- if (shader_d3dfmt != D3DFMT_A8L8) {
- priv->pixel_shader_data = d3d_shader_yuv;
- } else {
- mp_msg(MSGT_VO, MSGL_WARN, "<vo_direct3d>Using YUV 2ch hack.\n");
-
- priv->pixel_shader_data = d3d_shader_yuv_2ch;
- priv->use_2ch_hack = true;
- }
+ priv->pixel_shader_data = d3d_shader_yuv;
}
for (n = 0; n < priv->plane_count; n++) {
@@ -1178,30 +1153,6 @@ static int query_format(struct vo *vo, uint32_t movie_fmt)
* *
****************************************************************************/
-static void get_2ch_depth_multiplier(int depth, float *out_f1, float *out_f2) {
- // How to get these values:
- // The suffix i8 and i16 is for values with 8/16 bit fixed point numbers.
- // The suffix f is for float, ideally in the range 0.0-1.0.
- // c_i8 is a two component vector, sampled from a two channel texture.
- // (c_i8.x is the low byte, c_i8.y is the high byte)
- // r_f is the resulting color scalar value.
- //
- // c_i8 = c_f * (2^8-1)
- // r_i16 = c_i8.x + c_i8.y * 2^8
- // r_f = r_i16 / (2^16-1)
- // = c_f.x * (2^8-1) / (2^16-1) + c_f.y * (2^8-1) * 2^8 / (2^16-1)
- // = c_f.x * ((2^8-1) / (2^16-1)) + c_f.y * (2^8 * ((2^8-1) / (2^16-1)))
- // out = ((2^8-1) / (2^16-1), 2^8 * ((2^8-1) / (2^16-1)))
- // The result color is r_f = dot(c_f, out).
- // Same goes for other bit depth, such as 10 bit. Assuming (2^depth-1) is
- // the maximum possible value at that depth, you have to scale the value
- // r_i16 with it, the factor (2^16-1) in the formula above has to be
- // replaced with (2^depth-1).
- float factor = (float)((1 << 8) - 1) / (float)((1 << depth) - 1);
- *out_f1 = factor;
- *out_f2 = 256.0 * factor;
-}
-
static void update_colorspace(d3d_priv *priv)
{
float coeff[3][4];
@@ -1209,19 +1160,8 @@ static void update_colorspace(d3d_priv *priv)
mp_csp_copy_equalizer_values(&csp, &priv->video_eq);
if (priv->use_shaders) {
- if (!priv->use_2ch_hack) {
- csp.input_bits = priv->planes[0].bits_per_pixel;
- csp.texture_bits = (csp.input_bits + 7) & ~7;
- } else {
- float f1, f2;
- get_2ch_depth_multiplier(priv->planes[0].bits_per_pixel, &f1, &f2);
- priv->d3d_depth_vector[0] = f1;
- priv->d3d_depth_vector[1] = f2;
- priv->d3d_depth_vector[2] = priv->d3d_depth_vector[3] = 0;
- // no change
- csp.input_bits = 8;
- csp.texture_bits = 8;
- }
+ csp.input_bits = priv->planes[0].bits_per_pixel;
+ csp.texture_bits = (csp.input_bits + 7) & ~7;
mp_get_yuv2rgb_coeffs(&csp, coeff);
for (int row = 0; row < 3; row++) {
@@ -1274,14 +1214,6 @@ const char *options_help_text = "-vo direct3d command line help:\n"
" Might be slower too, as it must (?) clear every frame.\n"
" exact-backbuffer\n"
" Always resize the backbuffer to window size.\n"
-" no16bit-textures\n"
-" Don't use textures with a 16 bit color channel for YUV formats that\n"
-" use more than 8 bits per component. Instead, use D3DFMT_A8L8 textures\n"
-" and compute the values sampled from the 2 channels back into one.\n"
-" Might be slower, since the shader becomes slightly more complicated.\n"
-" Might work better, if your drivers either don't support D3DFMT_L16,\n"
-" or if either the texture unit or the shaders don't operate in at least\n"
-" 16 bit precision.\n"
"";
/** @brief libvo Callback: Preinitialize the video card.
@@ -1299,8 +1231,6 @@ static int preinit_internal(struct vo *vo, const char *arg, bool allow_shaders)
*priv = (d3d_priv) {
.vo = vo,
- .opt_16bit_textures = true,
-
.colorspace = MP_CSP_DETAILS_DEFAULTS,
.video_eq = { MP_CSP_EQ_CAPS_COLORMATRIX },
};
@@ -1329,7 +1259,6 @@ static int preinit_internal(struct vo *vo, const char *arg, bool allow_shaders)
{"texture-memory", OPT_ARG_INT, &priv->opt_texture_memory},
{"swap-discard", OPT_ARG_BOOL, &priv->opt_swap_discard},
{"exact-backbuffer", OPT_ARG_BOOL, &priv->opt_exact_backbuffer},
- {"16bit-textures", OPT_ARG_BOOL, &priv->opt_16bit_textures},
{NULL}
};
if (subopt_parse(arg, subopts) != 0) {