Commit graph

340 commits

Author SHA1 Message Date
Hermet Park
7289116227 remove std async usage.
we can't control any threads count that could drop the performance.

remove async() and will come back with fine-tuned threading-pool.

Change-Id: I17c39792234acfce6db334abc0ce12da23978a9a
2020-08-14 17:41:44 +09:00
Hermet Park
ac4405a4ec sw_engine: fix potential data overflow.
Change-Id: Ie800fda74d44ad3741f7a92f12681f7f753ee50c
2020-08-13 19:50:46 +09:00
Hermet Park
8abef404cf sw_engine: remove unnecessary assert() call
Change-Id: I8cb249b6b7f32992f7ce9c86e408546c14856330
2020-08-13 19:29:23 +09:00
Hermet Park
3dc3cfd8c0 sw_engine: fix data overflow case.
Change-Id: I01f90a8a6b3bca38142c8c16d1990b5b1a09d081
2020-08-13 19:27:02 +09:00
Hermet Park
7b004363f9 sw_engine renderer: initialize member data in default.
static analizyer bothers us due to this.
we'd rather initialize members for free of them.

Change-Id: I23b769b94be7514a8bf6e6d683ddb90b3cd613c4
2020-08-13 19:15:33 +09:00
Hermet Park
a12f346425 sw_engine: remove unnecessary assert() call
Change-Id: I7c665bab4ef867f912ea738480e6d9b2b63e014e
2020-08-13 19:00:09 +09:00
Hermet Park
9893af979f replace license from Apache 2.0 to MIT
Change-Id: I61f7cb2b0e407bc035f3b2ec7da9b7f230057e24
2020-08-13 16:53:38 +09:00
Hermet Park
7839c662d7 sw_engine: fix one last compile warning.
casting to loss data in converting data type.

Change-Id: I4c9b45b1c015579807a2d44e0ff2734bd2f655f3
2020-08-06 20:17:34 +09:00
Hermet Park
ef11d500ba common: fix compiler warnings that loss data by mis-matched converision
these conversions are intented, we explicity use casting so that compiler doesn't
catch them anymore.

Change-Id: I9d905c7562c43929b040d034e5ee0d14c6750a80
2020-08-06 20:01:37 +09:00
Hermet Park
2555e82f0d fix compile warnings
comparison of unsigned expression < 0 is always false [-Werror=type-limits]

Change-Id: I8cee625056bcde1f2a3cb2b9ce704b33be5bd725
2020-08-06 17:06:36 +09:00
Hermet Park
7214559ad9 common: fix compile warnings.
--Werror=unused-parameter

Change-Id: If4c04e3e20b67be62b50c3b1e2e909dbd848eccc
2020-08-06 16:48:26 +09:00
Hermet Park
9f6b5eb59e common: changed premultiplied color policy.
Some user have no idea of premultiplied alpha concept,
We suggest more user-friendly interfaces so that they don't confuse it.

Now, this pre-multipying is acommplished by backend engines.

Change-Id: Ifd84d56361cb56a8b98240bbd16690accf370bad
2020-08-06 13:54:51 +09:00
Hermet Park
8a924cbd78 sw_engine: fix out of cell memory.
we can adjust cell size if the cell memory is out.
the main rle logic missed the exception handling.

Change-Id: I4419eefefccafd788729111eafeb65aa4e6a20e9
2020-07-29 13:40:11 +09:00
Hermet Park
bee94d48fe sw_engine gradient: support x/y scale for linear gradient
Change-Id: Ic58e7cc61a3c90307b6cfb629eb8af69b75fb903
2020-07-24 21:09:24 +09:00
Hermet Park
76a7c900be sw_engine gradient: support x/y scale for radial gradient
Change-Id: Id725637e261642d0e92d100c73841278b7f44c1c
2020-07-24 16:48:41 +09:00
Hermet Park
5fdc1f7fc8 sw_engine: revise stroke scaling logic.
previous fast track logic is useless,
it actually doesn't helpful for performance, just increase the code complexity.

Change-Id: Ib6ad204edfb241d74c41413dfec7ab42fb02af81
2020-07-24 11:03:20 +09:00
Hermet Park
f1aab52958 sw_engine: support bidirectional stroke scaling.
if the transform scale factor for x/y is not identical,
it keeps its both xy scale factor then apply them
for stroking calculation.

Change-Id: I519dfce3ce7b4a12c13da1801d6a00e139e7400f
2020-07-23 17:36:54 +09:00
Hermet Park
4d72eeda15 sw_engine: revise scale transform logic.
Basically, stroke width size is linear,

engine couldn't apply scale factor from the matrix which contains 2 dimensional values.

Thus, we can apply it if the scale factor of x/y is identical.

Otherwise, we should transform every stroke points in the stroking process.
That scenario can be improved with another patch.

Change-Id: I070dcf29d2e42f21e182bdf4239781464158ef73
2020-07-22 20:59:52 +09:00
Hermet Park
96477c0a24 sw_engine: revise outline transform
sw_engine simulates floating point by integer bit shifting,
it loses the accuracy while converting the number data.

This occurs the inacculated curve points result if it scales up very large size.

So we transform points before converting data in order to avoid losing the numbers less decimal point.

Change-Id: I0172e83f06b1a19143a2f65f667dc193e9a4396a
2020-07-21 18:44:27 +09:00
Hermet Park
2ba529c8fb common transformation: fix transformation multiply
Change-Id: Ibc95fab0abfc07aa7f0c4ff6c74785d4f73d02c7
2020-07-17 17:54:21 +09:00
Hermet Park
a6344daa66 sw_engine: fix wrong gradient fill transform.
it missed the offset when transformed gradient positions.

now it's fixed.

Change-Id: I916bd88b40bc29ca57d31411b92e10fe357d720e
2020-07-16 13:45:27 +09:00
Hermet Park
9e1ba8d2c0 sw_engine: introduce avx simd instruction
avx is the cutting edge method for intel & amd cpus simd instruction.
We are going to support this feature for the desktop environment (instead of sse)

You can turn on this with configuration something like this:

$meson . build -Dvectors=avx

Current patch supports only for raster solid color

Change-Id: I068ba30a1f63d480415e2762f8021fc8d6d28a39
2020-07-11 20:58:09 +09:00
Hermet Park
99428ee80a build: support features toggling in meson option.
Change-Id: Id1ebda70fe8380aaa913f79af26e5c39893a6df5
2020-07-08 15:30:12 +09:00
Hermet Park
cfa17c6df6 svg_engine: fix infinit loop dead in stroke rendering.
here logic was wrongly introducedd, we fix the condition check properly.

Change-Id: I97f18f68290c61096f4e7fe54bd6f6fde51e175b
2020-07-07 11:26:28 +09:00
Hermet Park
2929fa5c57 sw_engine: optimize rle rendering.
we don't need to apply anti-aliasing if stroke is there.
here turns off anti-alias if stroke width is more than 2.
magic number 2 is experimentally confirmed.

Change-Id: I09031dc2a0a84f31c5904651ed1e62004645ba9a
2020-07-03 18:32:50 +09:00
Hermet Park
add79b07cd sw_engine: Draw shapes even though there is no explict closed command.
This behavior is not confiremd but it's beneficial for svg spec.

Change-Id: Ia711c057811ae51e472b4e164b36f3dd6af9893f
2020-07-01 16:51:53 +09:00
Hermet Park
322174d778 sw_engine: optimize othogonal rectangle drawing.
if the rectangle is not transformed, we don't need to use rle method.
we can directly raster pixels onto the bounding box.

Change-Id: I4e8b57149c0bcd78124d09388bf5115093a43bee
2020-07-01 15:53:47 +09:00
Hermet Park
5faa94340f sw_engine: fix a regression bug.
Shape must have closed path for filling color.
if closed is skipped, it would take it's a line.

Change-Id: Ie1dcde9edbfc6501a34d6cb9ce54184ade6864db
2020-07-01 12:53:01 +09:00
Hermet Park
f377f33993 sw_engine: fix to update stroking transform
when shape doesn't have fill color, stroking is missed in update.

this fixs that issue.

Change-Id: I49292475e56caa834e79497a16db705b965bcf5f
2020-06-30 17:24:14 +09:00
Hermet Park
4bc0b584f3 sw_engine: flush all processing data when clear() is requested.
there was a missing point which occured corrupted data in multi-processing.

Change-Id: Ifb28ee82852e488d23d45b4b75f0a6c70bb428b2
2020-06-30 12:38:01 +09:00
Hermet Park
ad5f147c74 sw_engine: fix a regression bug.
this matrix data is volatile since it's coming from stack memory.
thus engine should record its own memory space for keeping it.

Change-Id: I664dd56412f4d236ad04c312220c67da226274e5
2020-06-25 13:31:45 +09:00
Hermet Park
4156de72f1 sw_engine: optimize rasterizey by threading it.
Also, newly introduced render interfaces: preRender(), postRender(), flush()

Change-Id: If506fa27e3c7dbd89f6734cad4774c1d151b88aa
2020-06-24 18:43:11 +09:00
Hermet Park
36c76ca73c sw_engine: threading optimization
make it prepare step asynchronously.

Change-Id: Ifb85f01d579cf1c111558842496b93fcaef74cd9
2020-06-24 14:35:23 +09:00
Hermet Park
9ffc1d40f6 sw_engine: optimize memory allocation.
there are a logical wrong that memory increase size,
it correct that also tune the number to reduce memory allocation time.

Now scene transform test works smoothly.

Change-Id: If0674e33426d794546801a96ad9de711b5de0dcd
2020-06-23 18:59:12 +09:00
Hermet Park
b212df1061 sw_engine stroke: initialize a missing variable.
Change-Id: I1c3d83d56045f592ff89a5462d4de494e50c9d34
2020-06-23 17:38:59 +09:00
Hermet Park
55e215e6ea sw_engine: optimize span generation.
there are unnecessary partial spans generated in orthogonal rectangle.

we can merge those partial spans to others if they are on the same scanline...

Change-Id: I35a437a4f2eec106bd50f46f0390c652e617311d
2020-06-23 17:29:28 +09:00
Hermet Park
86300c5fc0 sw_engine: optimize raster.
memset() is more than 10x faster than manual loop.

Thus we replace it to manipulate buffer pixels.

Change-Id: If0f255578f7d49ff6704c4f15e2eefe435cc3c15
2020-06-23 16:55:06 +09:00
Hermet Park
4f48c856f6 sw_engie: fix wrong boundary check.
this bounding box max indicates absolute positions,
not width/height size.

because of this, shape couldn't rendered properly,
when it's clipped out.

Change-Id: I0afb0d6e63d1b511b83716c55f55e3fd5370fdb8
2020-06-23 14:15:47 +09:00
Hermet Park
a9d712e06e Merge "common transform: support matrix transform interface." into tizen 2020-06-23 02:31:23 +00:00
Hermet Park
c6742e9590 common transform: support matrix transform interface.
this interface is designed for user-defined arbitrary affine-transform paints.

required by svg loader.

Change-Id: I7f08023605d224e36cef3770098d3757aee81848
2020-06-23 11:28:20 +09:00
Hermet Park
ab5c1bc441 common bezier: code refactoring.
Organize bezier functions for internal share.

this bezier can be used in svg loader.

Change-Id: I78acd3273c0528688ca46ff7c29d78607bd729bd
2020-06-22 17:07:53 +09:00
Hermet Park
01e52c7c7a common loader: build up loader infrastructure.
Change-Id: I62aaed43015301ec39e414833f37d6c5485d8043
2020-06-19 15:46:02 +09:00
Hermet Park
ec03afa83a sw_engine renderer: accept stroke less 1 width size.
Change-Id: I5fe6a0993ab5c1abc79d89834ea04c25b059c320
2020-06-18 10:41:58 +09:00
Hermet Park
7435b5b414 sw_engine: support gradient transformation properly
added testGradientTransform

Change-Id: I29037d08ce951e5ceb2eef31cb414efc25296417
2020-06-15 20:14:37 +09:00
Hermet Park
7366e8949b sw_engine: implement gradial gradient feature
also added testRadialGradient

Change-Id: If4a278cb4667c38c7842ad30edf5aa2fdd56fff7
2020-06-15 17:43:52 +09:00
Hermet Park
5c988d01a5 sw_engine: implement linear gradient feature
also added testLinearGradient

Change-Id: I9cce74b9fc40c4ebd978939ee50955e44e7f44f2
2020-06-13 12:09:39 +09:00
Hermet Park
f3afd2a636 common fill: added spread mode.
Change-Id: I95d47bc492d5a22326a745a591d243e56a26bae4
2020-06-11 14:27:20 +09:00
Hermet Park
498a024df8 common: ++optimization
replace dynamic_cast to static_cast,

This can be a controversial choice between optmization and clean code.

Obviously we know the converting types,
try avoiding a bit heavier casting some cases.

Change-Id: Id763e6d1db449a229a492ab5b1a901a195936152
2020-06-09 20:32:22 +09:00
Hermet Park
58de99aea3 common interface: replace arguements size_t to uint32_t
We prefer to build up a tiny compact engine at memory rather than compatibility,
this engine is not considerd for end-users but designed for middle-level framework
and some low-level users.

Thus, we won't consider 64bits data size,
use explicit 32 bits data until coming next upgrade...

Change-Id: I0704d5f1e0eb909cccc10922bc5972e115fbbcc0
2020-06-09 15:36:34 +09:00
Hermet Park
33e1d4b170 common interface: concrete return type.
Introduce Result type for notifying caller more detailed info.

We should implement the result values for each apis, with practical values.

Change-Id: Ia47abcb56a8efca7094ac3eed0178aeac8aa2910
2020-06-09 15:16:25 +09:00