2014-07-12 22:37:15 +02:00
|
|
|
[-] Draw rotated pixels in src order -> cache write miss
|
2014-06-26 21:28:34 +02:00
|
|
|
[X] Use atan2 at beginning and end of line.
|
|
|
|
Interpolation in-between values
|
|
|
|
[X] Test pixel perfect 90
|
2014-06-26 23:45:02 +02:00
|
|
|
[ ] Fix out-of-bounds pixel set
|
|
|
|
|
2014-06-26 21:28:34 +02:00
|
|
|
[ ] Optimization for square images?
|
2014-07-12 22:37:15 +02:00
|
|
|
[X] Fixed point computation
|
|
|
|
[-] -funroll-loops -> no gain
|
|
|
|
[-] restrict qualifier -> unavailable in C++
|
2014-06-28 13:52:24 +02:00
|
|
|
|
|
|
|
# Cache
|
2014-07-04 00:23:21 +02:00
|
|
|
[-] Rotate per channel -> no gain
|
|
|
|
[X] Cut image in tiles
|
2014-07-10 19:40:51 +02:00
|
|
|
[X] Overlap
|
2014-07-08 08:48:17 +02:00
|
|
|
[-] Rotate in one temp tile then copy/move it
|
2014-07-09 07:50:09 +02:00
|
|
|
[X] Align tiles in memory
|
2014-07-16 20:44:32 +02:00
|
|
|
[ ] Touch beginning of tile
|
2014-07-12 22:37:15 +02:00
|
|
|
|
|
|
|
## Alignement
|
|
|
|
[X] RGBX format (create pixel structure) on 8 bytes (can do computation in-place)
|
2014-07-16 02:08:32 +02:00
|
|
|
[X] Load pixels in 64-bit variable
|
|
|
|
[X] Directly load in SIMD 128-bit variable
|
|
|
|
[ ] Align memory on 16 bytes (would require padding)
|
2014-07-16 20:44:32 +02:00
|
|
|
[X] RGBX tiles
|
2014-07-12 22:37:15 +02:00
|
|
|
|
|
|
|
## Layout
|
|
|
|
[ ] Pack 4 neighbors in 16B structure (aligned)
|
|
|
|
Each point is followed by the point below
|
2014-07-10 19:40:51 +02:00
|
|
|
[ ] Spiral layout?
|
2014-06-28 13:52:24 +02:00
|
|
|
|
|
|
|
# Quality
|
2014-07-16 20:44:32 +02:00
|
|
|
[X] Interpolate using SIMD, SSE
|
2014-07-04 00:23:21 +02:00
|
|
|
[ ] Image borders
|