Update yuv->rgb conversion programs to write to src_sample regs

The YUV->RGB code was written to write directly to the dataport registers,
but that didn't work for the compositing functions (cause still unknown).
This change makes that code write RGB values to the src_sample registers as
with the other sample computation fragments.
This commit is contained in:
Keith Packard 2008-04-09 09:58:44 -05:00
parent b01d582e23
commit fb6ed8b8b5
2 changed files with 60 additions and 48 deletions

View File

@ -30,18 +30,30 @@ include(`exa_wm.g4i')
define(`YCbCr_base', `src_sample_base')
define(`Cr', `src_sample_r')
define(`Cr', `src_sample_r_01')
define(`Cr_01', `src_sample_r_01')
define(`Cr_23', `src_sample_r_23')
define(`Y', `src_sample_g')
define(`Y', `src_sample_g_01')
define(`Y_01', `src_sample_g_01')
define(`Y_23', `src_sample_g_23')
define(`Cb', `src_sample_b')
define(`Cb', `src_sample_b_01')
define(`Cb_01', `src_sample_b_01')
define(`Cb_23', `src_sample_b_23')
define(`Crn', `mask_sample_r_01')
define(`Crn_01', `mask_sample_r_01')
define(`Crn_23', `mask_sample_r_23')
define(`Yn', `mask_sample_g_01')
define(`Yn_01', `mask_sample_g_01')
define(`Yn_23', `mask_sample_g_23')
define(`Cbn', `mask_sample_b_01')
define(`Cbn_01', `mask_sample_b_01')
define(`Cbn_23', `mask_sample_b_23')
/* color space conversion function:
* R = Clamp ( 1.164(Y-16/255) + 1.596(Cr-128/255), 0, 1)
* G = Clamp ( 1.164(Y-16/255) - 0.813(Cr-128/255) - 0.392(Cb-128/255), 0, 1)
@ -58,45 +70,45 @@ define(`Cb_23', `src_sample_b_23')
/* Normalize Y, Cb and Cr:
*
* Y = (Y - 16/255) * 1.164
* Cr = Cr - 128 / 255
* Cb = Cb - 128 / 255
* Yn = (Y - 16/255) * 1.164
* Crn = Cr - 128 / 255
* Cbn = Cb - 128 / 255
*/
add (16) Y<1>F Y<8,8,1>F -0.0627451F { compr align1 };
mul (16) Y<1>F Y<8,8,1>F 1.164F { compr align1 };
add (16) Yn<1>F Y<8,8,1>F -0.0627451F { compr align1 };
mul (16) Yn<1>F Yn<8,8,1>F 1.164F { compr align1 };
add (16) Cr<1>F Cr<8,8,1>F -0.501961F { compr align1 };
add (16) Crn<1>F Cr<8,8,1>F -0.501961F { compr align1 };
add (16) Cb<1>F Cb<8,8,1>F -0.501961F { compr align1 };
add (16) Cbn<1>F Cb<8,8,1>F -0.501961F { compr align1 };
/*
* R = Y + Cr * 1.596
*/
mul (8) null Cr_01<8,8,1>F 1.596F { align1 };
mac.sat (8) data_port_r_01<1>F Y_01<8,8,1>F 1F { align1 };
mul (8) null Cr_23<8,8,1>F 1.596F { align1 };
mac.sat (8) data_port_r_23<1>F Y_23<8,8,1>F 1F { align1 };
mul (8) null Crn_01<8,8,1>F 1.596F { align1 };
mac.sat (8) src_sample_r_01<1>F Yn_01<8,8,1>F 1F { align1 };
mul (8) null Crn_23<8,8,1>F 1.596F { align1 };
mac.sat (8) src_sample_r_23<1>F Yn_23<8,8,1>F 1F { align1 };
/*
* G = Cr * -0.813 + Cb * -0.392 + Y
* G = Crn * -0.813 + Cbn * -0.392 + Y
*/
mul (8) null Cr_01<8,8,1>F -0.813F { align1 };
mac (8) null Cb_01<8,8,1>F -0.392F { align1 };
mac.sat (8) data_port_g_01<1>F Y_01<8,8,1>F 1F { align1 };
mul (8) null Cr_23<8,8,1>F -0.813F { align1 };
mac (8) null Cb_23<8,8,1>F -0.392F { align1 };
mac.sat (8) data_port_g_23<1>F Y_23<8,8,1>F 1F { align1 };
mul (8) null Crn_01<8,8,1>F -0.813F { align1 };
mac (8) null Cbn_01<8,8,1>F -0.392F { align1 };
mac.sat (8) src_sample_g_01<1>F Yn_01<8,8,1>F 1F { align1 };
mul (8) null Crn_23<8,8,1>F -0.813F { align1 };
mac (8) null Cbn_23<8,8,1>F -0.392F { align1 };
mac.sat (8) src_sample_g_23<1>F Yn_23<8,8,1>F 1F { align1 };
/*
* B = Cb * 2.017 + Y
* B = Cbn * 2.017 + Y
*/
mul (8) null Cb_01<8,8,1>F 2.017F { align1 };
mac.sat (8) data_port_b_01<1>F Y_01<8,8,1>F 1F { align1 };
mul (8) null Cb_23<8,8,1>F 2.017F { align1 };
mac.sat (8) data_port_b_23<1>F Y_23<8,8,1>F 1F { align1 };
mul (8) null Cbn_01<8,8,1>F 2.017F { align1 };
mac.sat (8) src_sample_b_01<1>F Yn_01<8,8,1>F 1F { align1 };
mul (8) null Cbn_23<8,8,1>F 2.017F { align1 };
mac.sat (8) src_sample_b_23<1>F Yn_23<8,8,1>F 1F { align1 };
/*
* A = 1.0
*/
mov (8) data_port_a_01<1>F 1.0F { align1 };
mov (8) data_port_a_23<1>F 1.0F { align1 };
mov (8) src_sample_a_01<1>F 1.0F { align1 };
mov (8) src_sample_a_23<1>F 1.0F { align1 };

View File

@ -1,20 +1,20 @@
{ 0x00802040, 0x22007fbd, 0x008d0200, 0xbd808081 },
{ 0x00802041, 0x22007fbd, 0x008d0200, 0x3f94fdf4 },
{ 0x00802040, 0x21c07fbd, 0x008d01c0, 0xbf008084 },
{ 0x00802040, 0x22407fbd, 0x008d0240, 0xbf008084 },
{ 0x00600041, 0x20007fbc, 0x008d01c0, 0x3fcc49ba },
{ 0x80600048, 0x20407fbe, 0x008d0200, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d01e0, 0x3fcc49ba },
{ 0x80600048, 0x20c07fbe, 0x008d0220, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d01c0, 0xbf5020c5 },
{ 0x00600048, 0x20007fbc, 0x008d0240, 0xbec8b439 },
{ 0x80600048, 0x20607fbe, 0x008d0200, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d01e0, 0xbf5020c5 },
{ 0x00600048, 0x20007fbc, 0x008d0260, 0xbec8b439 },
{ 0x80600048, 0x20e07fbe, 0x008d0220, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d0240, 0x40011687 },
{ 0x80600048, 0x20807fbe, 0x008d0200, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d0260, 0x40011687 },
{ 0x80600048, 0x21007fbe, 0x008d0220, 0x3f800000 },
{ 0x00600001, 0x20a003fe, 0x00000000, 0x3f800000 },
{ 0x00600001, 0x212003fe, 0x00000000, 0x3f800000 },
{ 0x00802040, 0x23007fbd, 0x008d0200, 0xbd808081 },
{ 0x00802041, 0x23007fbd, 0x008d0300, 0x3f94fdf4 },
{ 0x00802040, 0x22c07fbd, 0x008d01c0, 0xbf008084 },
{ 0x00802040, 0x23407fbd, 0x008d0240, 0xbf008084 },
{ 0x00600041, 0x20007fbc, 0x008d02c0, 0x3fcc49ba },
{ 0x80600048, 0x21c07fbd, 0x008d0300, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d02e0, 0x3fcc49ba },
{ 0x80600048, 0x21e07fbd, 0x008d0320, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d02c0, 0xbf5020c5 },
{ 0x00600048, 0x20007fbc, 0x008d0340, 0xbec8b439 },
{ 0x80600048, 0x22007fbd, 0x008d0300, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d02e0, 0xbf5020c5 },
{ 0x00600048, 0x20007fbc, 0x008d0360, 0xbec8b439 },
{ 0x80600048, 0x22207fbd, 0x008d0320, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d0340, 0x40011687 },
{ 0x80600048, 0x22407fbd, 0x008d0300, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d0360, 0x40011687 },
{ 0x80600048, 0x22607fbd, 0x008d0320, 0x3f800000 },
{ 0x00600001, 0x228003fd, 0x00000000, 0x3f800000 },
{ 0x00600001, 0x22a003fd, 0x00000000, 0x3f800000 },