Hi all,<div><br></div><div>Recently I&#39;ve profiled several applications using pixman.</div><div>(Webkit cairo port is my major concern)</div><div>Most of cases are covered by C, SSE2 and NEON fast paths now.</div><div>However siarhei&#39;s slow-path-reporter still reports some non-optimized general_composite_rect().</div>
<div>One of them is PIXMAN_REPEAT_NORMAL.</div><div>This repeat mode is used for drawing tiled background or some gradient patterns.</div><div><br></div><div>I&#39;ve modified nearest/bilinear fast path macro templates to support NORMAL repeat.</div>
<div>The basic idea is breaking down one scanline composition into several NONE_REPEAT scanline compositions.</div><div>So we can use already implemented scanline functions.</div><div>This approach does not increase binary size much and gives us reasonable speed up.</div>
<div><br></div><div>When width of src image is very small, too frequent function call can decrease performance.</div><div>In this case, pre-repeating src scanline into temporary buffer can reduce the function calls.</div>
<div>Bilinear may require last and first pixels to interpolate.</div><div>Temporary wrap-around buffer can resolve this case.</div><div><br></div><div>I want to know whether this approach is proper way to go.</div><div>Maybe you guys are thinking of handling repeat mode inside scanline functions??</div>
<div>(Some scanline functions take max_vx though it is not used yet).</div><div><br></div><div>Any kind of comments would be appreciated.</div><div><br></div><div><br></div><div>Here&#39;re some benchmark results of SSE2 and NEON fast paths.</div>
<div><br></div><div><div>&lt;&lt; SSE2 Fast Paths &gt;&gt;</div><div>OP=SRC Bilinear Scaling 8888_8888</div><div>sse2_src_8888_8888 for comparison : 122.40 MPix/s</div><div><br></div><div>width = 1 to 512</div><div>Before  : 28.21 MPix/s</div>
<div>After   : 74.27 MPix/s (37.18 MPix/s without pre-repeating)</div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div><br></div><div>width = 15 to 512</div><div>Before  : 24.73 MPix/s</div><div>After   : 92.72 MPix/s</div>
<div><br></div><div>width = 63 to 512</div><div>Before  : 24.88 MPix/s</div><div>After   : 114.11 MPix/s</div><div><br></div><div>&lt;&lt; NEON Fast Paths &gt;&gt;</div><div>OP=SRC Bilinear Scaling 8888_8888</div><div>neon_src_8888_8888 for comparison : 99.56 MPix/s</div>
<div><br></div><div>width = 1 to 512</div><div>Before  : 5.48 MPix/s</div><div>After   : 30.66 MPix/s (10.13 MPix/s without pre-repeating)</div><div><br></div><div>width = 15 to 512</div><div>Before  : 3.81 MPix/s</div><div>
After   : 43.95 MPix/s</div><div><br></div><div>width = 63 to 512</div><div>Before  : 4.16 MPix/s</div><div>After   : 78.93 MPix/s</div><div><br></div>-- <br>Best Regards,<div>Taekyun Kim</div><br>
</div>