From fb6ed8b8b59e9dd18801afef5d7c62042ad176d7 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 9 Apr 2008 09:58:44 -0500 Subject: [PATCH] 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. --- src/exa_wm_yuv_rgb.g4a | 68 +++++++++++++++++++++++++----------------- src/exa_wm_yuv_rgb.g4b | 40 ++++++++++++------------- 2 files changed, 60 insertions(+), 48 deletions(-) diff --git a/src/exa_wm_yuv_rgb.g4a b/src/exa_wm_yuv_rgb.g4a index 0c7525d1..327a8083 100644 --- a/src/exa_wm_yuv_rgb.g4a +++ b/src/exa_wm_yuv_rgb.g4a @@ -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 }; diff --git a/src/exa_wm_yuv_rgb.g4b b/src/exa_wm_yuv_rgb.g4b index 017186a6..be72e549 100644 --- a/src/exa_wm_yuv_rgb.g4b +++ b/src/exa_wm_yuv_rgb.g4b @@ -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 },