Bizarre low-level io-graphics optimizations!

Hello, All!

I’ve added debug output to all my “core” functions in the graphics driver,
and here is in the attachment sloginfo output, which shows photon problem,
and some comments here:

  1. I never saw any pat8x1, pat8x8, trans8x1, trans8x8 function calls in the
    log, even after I started each photon application which is exist in the
    default QNX6.3SP2 installation. Could anyone tell me is it exists any photon
    application in world, which will use “pattern” core functions by indirection
    ?

Here we go.

  1. io-graphics calls few hundreds per second update_pattern function in
    graphics driver core module (see the log attached), but why it is doing that
    if pattern functions are never called ?

  2. Furthermore, update_pattern function in core module designed to reduce
    amount of pio/mmio registers access to gain more graphics productivity, to
    save CPU ticks while updating the same pattern in consecutive
    pattern_fill/span calls. Really it became graphics inhibitor. It has been
    called more than thousand times during photon loading process without any
    needings. Instead of helping to optimize pio/mmio registers access it raises
    pio/mmio usage in incredible ways!!!

  3. It’s a sample from the attached log of 13 consecutive update_pattern
    calls while 8x1 pattern even has not been changed !!!:

Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00
Dec 12 20:26:17 6 8 0 xxxxxx_update_pattern():
pattern_format=0001 pat_xoff=0 pat_yoff=0 pat=FF 00 00 00 01 00 00 00

And that’s only for photon loading process, when I drag the window over
screen or just scrolling text in pterm - it becames nightmare thousand of
thousands calls !

Cost to doing mmio operations in my case is big, using simple calculation
I’ve found that update_pattern call eats near 10-15% of my 2D accelerator
maximum output. And that for pattern functions which are never called !

Any other suprises, guys ?

With best regards, Mike Gorchak. E-mail: mike@malva.com.ua


begin 666 coreupdate.zip
M4$L#!!0(`&&0C#5G-WR]>P0``-M#`@`.`"0`8V]R975P9&%T92YT>'0* M`" ```````$`& ".!LO_!A['`8X&R_\&'L<!O/YI1 (>QP'MV4%OVE@4!M!] M?\5;3J5&&%HR#1*+2%7435>=/7*P`3=@(_N1=/[]!)1VIJ.H2D-5U.<311%% M@:_'W[W/4?)7M2G#?S\^EK?A0_ZI:<.'JK[_>MDNNQ?ORGD8CL(HFXS.)\/A M_OO.#]_]]O U"Y\/'[.NC+--4Y1_O)R$^\=AV>;;537OPO[))[_+;EODL9P5 M;7XWZW;M(I_?O^%CKQY_\^K+&//YJBS"H"AO!U5S]B5]<-NL\[;*7H6J"-.0 M_>A_9)O'6+;U'O7P<+9HVDT>IUF6#??/S3XWB\4T.SS\^^O#Z=55R+(OG\.O MCW]J_NC[^8]]\O/S\S_DC_X]2B\>\C_&O(V3,-AU[6"[:F)3#ZZK>G^N5F>K MJMW5X>:Z"(LBG!6'PW;_KVTW"IMFUY7W3X3_1;P^\24^+O_X2_SFQ/[C\OGY M^?GY^?GY^?GY^?GY^?GY^?GY^?GY^5/SN_[\_/S\_/S\_/S\_/S\_/S\_/S\ M_/S\_/S\*?GEFS]^\Z]__>N?G]_^ZU__^N?O@]_Y(]_^\YM__>M?__S\]E__ M^M<_?_I^YX]\^\]O_O6O?_WS\]M__>M?__SI^YT_\NT_O_G7O_[US\]O__6O M?_WSI^]W_LBW__SF7__ZUS\_O_W7O_[USY^^W_DCW_[SFW_]ZU___/SV7__Z MUS]_^G[GCWS[SV_^]:]__?/SVW_]ZU___.G[G3_R[3^_^=>__O7/SV__]:]_ M_?.G[W?^R+?__.9?__K7/S^__=>__O7/G[[?^2/?_O.;?_WK7__\_/9?__K7 M/W_Z?N>/?/O/;_[UKW_]\_/;?_WK7__\Z?N=/_+M/[_YU[_^]<_/;__UKW_] M\Z?O=_[(M__\YE__^M<_/[_]U[_^]<^?OM_Y(]_^\YM__>M?__S\]E__^M<_ M?_I^YX]\^\]O_O6O?_WS\]M__>M?__SI^YT_\NT_O_G7O_[US\]O__6O?_WS MI^]W_LBW__SF7__ZUS\_O_W7O_[USY^^W_7GY^?GY^?W\[=\\\=O_O6O?_WS M\]M__>M?__Q^_^W\D2]?OGSY\N7+]_,GO_F3+U^^?/GN?ZZ_?/GRY<MW_^/G MMW_RY<N7+]_]S_67+U^^?/GN?_S\_/S\_/S\_/S\_/S\_/S\_/S\_/S\_/S\ M_/S\_/S\_/S\_/S\_/S\_/S\_/S\_/+-'[_YT[_KKW]^?ONG?]=?__S\KK]\ M^\]O_O6O?_WS\]M__>M?__Q]\+O^_/S\_/S\_/S\_/S\_/S\_/S\_/S\_/RI M_?U!OGSYO_/Y-SZQ_[C\OOOERY<OOZ_YSG_7GY^?GY^?GY^?G_]7^>7+ER]? MOM]_N/_S\_/S\_/S\S_%?WYB_W'Y???+ER]?OOQ^YKO_\_/S\_/S\_/S]\DO M7[Y\^?+]_N-Y][\_3^P_+K_O?OGRY<N7W\]\]W]^?GY^?G[^9_K'W^0OFCIV MZW(75Y.PJZ_7S?RFJI=AOJ[*.C[V\M'AA1</+W]?Q7!7Q57HJF6=KR=A.'X5 MNM4NQOV[%,U=_>(?4$L!`AD`% @89",-6<W?+U[! ``VT,"``X````` M```````@`````````&-O<F5U<&1A=&4N='AT4$L%!@`````!``$/ ```,L$
$````````
`
end