diff options
author | Johnson Lin <[email protected]> | 2017-05-04 14:37:52 +0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2017-05-03 23:44:59 -0700 |
commit | a6fb943f3eb86ca501a7e7b8d4621ba215f91133 (patch) | |
tree | 8509c6cbadad0e0702e14b7e1dd3058774cec563 | |
parent | da665d22f55ba4af0f6f3c4fbea80a193e7028c1 (diff) |
nir/lower_tex: Fix minor error in YUV color conversion matrix
The matrix used for YCbCr to RGB is listed in:
https://en.wikipedia.org/wiki/YCbCr
There was an error in converting the offsets from integers to unorm
values: 0.0625=16/256 should be 16.0/255,and 0.5=128.0/256 should be
128.0/255. With this fix, the CSC result is bit aligned with wikipedia's
conversion result and FFMPeg's result.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100854
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Kristian H. Kristensen <[email protected]>
-rw-r--r-- | src/compiler/nir/nir_lower_tex.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/compiler/nir/nir_lower_tex.c b/src/compiler/nir/nir_lower_tex.c index 352d1499bc8..4ef81955513 100644 --- a/src/compiler/nir/nir_lower_tex.c +++ b/src/compiler/nir/nir_lower_tex.c @@ -244,9 +244,9 @@ convert_yuv_to_rgb(nir_builder *b, nir_tex_instr *tex, nir_ssa_def *yuv = nir_vec4(b, nir_fmul(b, nir_imm_float(b, 1.16438356f), - nir_fadd(b, y, nir_imm_float(b, -0.0625f))), - nir_channel(b, nir_fadd(b, u, nir_imm_float(b, -0.5f)), 0), - nir_channel(b, nir_fadd(b, v, nir_imm_float(b, -0.5f)), 0), + nir_fadd(b, y, nir_imm_float(b, -16.0f / 255.0f))), + nir_channel(b, nir_fadd(b, u, nir_imm_float(b, -128.0f / 255.0f)), 0), + nir_channel(b, nir_fadd(b, v, nir_imm_float(b, -128.0f / 255.0f)), 0), nir_imm_float(b, 0.0)); nir_ssa_def *red = nir_fdot4(b, yuv, nir_build_imm(b, 4, 32, m[0])); |