Use symbolic names for channels in YUV code

This commit is contained in:
Keith Packard 2008-04-08 16:09:00 -05:00
parent 781be9d472
commit b68d9f4245
2 changed files with 81 additions and 52 deletions

View File

@ -26,6 +26,19 @@
*
*/
include(`exa_wm.g4i')
define(`YCbCr_base', `g12')
define(`Cr', `g12')
define(`Cr_01', `g12')
define(`Cr_23', `g13')
define(`Y', `g14')
define(`Y_01', `g14')
define(`Y_23', `g15')
define(`Cb', `g16')
define(`Cb_01', `g16')
define(`Cb_23', `g17')
/* The initial payload of the thread is always g0.
* WM_URB (incoming URB entries) is g3
* X0_R is g4
@ -117,8 +130,12 @@ mov (8) m4<1>F g7<8,8,1>F { align1 };
* g0 holds the PS thread payload, which (oddly) contains
* precisely what the sampler wants to see in m0
*/
send (16) 0 g12<1>UW g0<8,8,1>UW sampler (1,0,F) mlen 5 rlen 8 { align1 };
mov (8) g19<1>UW g19<8,8,1>UW { align1 };
send (16)
0 /* load g0 to m0 */
YCbCr_base<1>UW
g0<8,8,1>UW
sampler (1,0,F)
mlen 5 rlen 8 { align1 };
/* color space conversion function:
* R = Clamp ( 1.164(Y-16/255) + 1.596(Cr-128/255), 0, 1)
@ -133,45 +150,60 @@ mov (8) g19<1>UW g19<8,8,1>UW { align1 };
* G is g3, g7.
* B is g4, g8.
*/
/* Y = Y - 16/255 */
add (8) g14<1>F g14<8,8,1>F -0.0627451F { align1 };
/* Cr = Cr - 128/255 */
add (8) g12<1>F g12<8,8,1>F -0.501961F { align1 };
/* Cb = Cb - 128 / 255 */
add (8) g16<1>F g16<8,8,1>F -0.501961F { align1 };
/* Y = Y * 1.164 */
mul (8) g14<1>F g14<8,8,1>F 1.164F { align1 };
/* acc = 1.596 * Cr */
mul (8) null g12<8,8,1>F 1.596F { align1 };
/* R = acc + Y */
mac.sat (8) m2<1>F g14<8,8,1>F 1F { align1 };
/* acc = Cr * -0.813 */
mul (8) null g12<8,8,1>F -0.813F { align1 };
/* acc += Cb * -0.392 */
mac (8) null g16<8,8,1>F -0.392F { align1 };
/* G = acc + Y */
mac.sat (8) m3<1>F g14<8,8,1>F 1F { align1 };
/* acc = Cb * 2.017 */
mul (8) null g16<8,8,1>F 2.017F { align1 };
/* B = acc + Y */
mac.sat (8) m4<1>F g14<8,8,1>F 1F { align1 };
/* and do it again */
add (8) g15<1>F g15<8,8,1>F -0.0627451F { align1 };
add (8) g13<1>F g13<8,8,1>F -0.501961F { align1 };
add (8) g17<1>F g17<8,8,1>F -0.501961F { align1 };
mul (8) g15<1>F g15<8,8,1>F 1.164F { align1 };
mul (8) null g13<8,8,1>F 1.596F { align1 };
mac.sat (8) m6<1>F g15<8,8,1>F 1F { align1 };
mul (8) null g13<8,8,1>F -0.813F { align1 };
mac (8) null g17<8,8,1>F -0.392F { align1 };
mac.sat (8) m7<1>F g15<8,8,1>F 1F { align1 };
mul (8) null g17<8,8,1>F 2.017F { align1 };
mac.sat (8) m8<1>F g15<8,8,1>F 1F { align1 };
/* Pass through control information:
/* Normalize Y, Cb and Cr:
*
* Y = (Y - 16/255) * 1.164
* Cr = Cr - 128 / 255
* Cb = 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) Cr<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 };
/*
* 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 };
/*
* G = Cr * -0.813 + Cb * -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 };
/*
* B = Cb * 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 };
/*
* 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 };
/*
* Pass through control information:
*/
mov (8) m1<1>UD g1<8,8,1>UD { align1 mask_disable };
/*
* Send framebuffer write message: XXX: acc0?
*/
mov (8) m1<1>UD g1<8,8,1>UD { align1 mask_disable };
/* Send framebuffer write message: XXX: acc0? */
send (16) 0 acc0<1>UW g0<8,8,1>UW write (
0, /* binding table index 0 */
8, /* pixel scoreboard clear */

View File

@ -47,29 +47,26 @@
{ 0x00600001, 0x206003be, 0x008d00c0, 0x00000000 },
{ 0x00600001, 0x208003be, 0x008d00e0, 0x00000000 },
{ 0x00800031, 0x21801d29, 0x008d0000, 0x02580001 },
{ 0x00600001, 0x22600129, 0x008d0260, 0x00000000 },
{ 0x00600040, 0x21c07fbd, 0x008d01c0, 0xbd808081 },
{ 0x00600040, 0x21807fbd, 0x008d0180, 0xbf008084 },
{ 0x00600040, 0x22007fbd, 0x008d0200, 0xbf008084 },
{ 0x00600041, 0x21c07fbd, 0x008d01c0, 0x3f94fdf4 },
{ 0x00802040, 0x21c07fbd, 0x008d01c0, 0xbd808081 },
{ 0x00802041, 0x21c07fbd, 0x008d01c0, 0x3f94fdf4 },
{ 0x00802040, 0x21807fbd, 0x008d0180, 0xbf008084 },
{ 0x00802040, 0x22007fbd, 0x008d0200, 0xbf008084 },
{ 0x00600041, 0x20007fbc, 0x008d0180, 0x3fcc49ba },
{ 0x80600048, 0x20407fbe, 0x008d01c0, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d01a0, 0x3fcc49ba },
{ 0x80600048, 0x20c07fbe, 0x008d01e0, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d0180, 0xbf5020c5 },
{ 0x00600048, 0x20007fbc, 0x008d0200, 0xbec8b439 },
{ 0x80600048, 0x20607fbe, 0x008d01c0, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d0200, 0x40011687 },
{ 0x80600048, 0x20807fbe, 0x008d01c0, 0x3f800000 },
{ 0x00600040, 0x21e07fbd, 0x008d01e0, 0xbd808081 },
{ 0x00600040, 0x21a07fbd, 0x008d01a0, 0xbf008084 },
{ 0x00600040, 0x22207fbd, 0x008d0220, 0xbf008084 },
{ 0x00600041, 0x21e07fbd, 0x008d01e0, 0x3f94fdf4 },
{ 0x00600041, 0x20007fbc, 0x008d01a0, 0x3fcc49ba },
{ 0x80600048, 0x20c07fbe, 0x008d01e0, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d01a0, 0xbf5020c5 },
{ 0x00600048, 0x20007fbc, 0x008d0220, 0xbec8b439 },
{ 0x80600048, 0x20e07fbe, 0x008d01e0, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d0200, 0x40011687 },
{ 0x80600048, 0x20807fbe, 0x008d01c0, 0x3f800000 },
{ 0x00600041, 0x20007fbc, 0x008d0220, 0x40011687 },
{ 0x80600048, 0x21007fbe, 0x008d01e0, 0x3f800000 },
{ 0x00600001, 0x20a003fe, 0x00000000, 0x3f800000 },
{ 0x00600001, 0x212003fe, 0x00000000, 0x3f800000 },
{ 0x00600201, 0x20200022, 0x008d0020, 0x00000000 },
{ 0x00800031, 0x24001d28, 0x008d0000, 0x85a04800 },
{ 0x0000007e, 0x00000000, 0x00000000, 0x00000000 },