From 7cfb124c2e151f492b1c40a806cf0f0d83806210 Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg Date: Mon, 20 Jun 2022 21:40:09 -0500 Subject: [PATCH] simpler + bugfix + test --- src/pixie/masks.nim | 21 ++++++++------------- tests/masks/drawPolygonMagnified.png | Bin 0 -> 1173 bytes tests/test_masks.nim | 10 ++++++++++ 3 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 tests/masks/drawPolygonMagnified.png diff --git a/src/pixie/masks.nim b/src/pixie/masks.nim index 6a45862..bff1c81 100644 --- a/src/pixie/masks.nim +++ b/src/pixie/masks.nim @@ -172,17 +172,14 @@ proc magnifyBy2*(mask: Mask, power = 1): Mask {.raises: [PixieError].} = when defined(amd64) and allowSimd: if scale == 2: while x <= mask.width - 16: - let - values = mm_loadu_si128(mask.data[mask.dataIndex(x, y)].addr) - lo = mm_unpacklo_epi8(values, mm_setzero_si128()) - hi = mm_unpacklo_epi8(values, mm_setzero_si128()) + let values = mm_loadu_si128(mask.unsafe[x, y].addr) mm_storeu_si128( result.data[result.dataIndex(x * scale + 0, y * scale)].addr, - mm_or_si128(lo, mm_slli_si128(lo, 1)) + mm_unpacklo_epi8(values, values) ) mm_storeu_si128( result.data[result.dataIndex(x * scale + 16, y * scale)].addr, - mm_or_si128(hi, mm_slli_si128(hi, 1)) + mm_unpackhi_epi8(values, values) ) x += 16 for x in x ..< mask.width: @@ -237,17 +234,15 @@ proc invert*(mask: Mask) {.raises: [].} = ## Inverts all of the values - creates a negative of the mask. var i: int when defined(amd64) and allowSimd: - let vec255 = mm_set1_epi8(cast[int8](255)) - let byteLen = mask.data.len - for _ in 0 ..< byteLen div 16: - let index = i - var values = mm_loadu_si128(mask.data[index].addr) + let vec255 = mm_set1_epi8(255) + for _ in 0 ..< mask.data.len div 16: + var values = mm_loadu_si128(mask.data[i].addr) values = mm_sub_epi8(vec255, values) - mm_storeu_si128(mask.data[index].addr, values) + mm_storeu_si128(mask.data[i].addr, values) i += 16 for j in i ..< mask.data.len: - mask.data[j] = (255 - mask.data[j]).uint8 + mask.data[j] = 255 - mask.data[j] proc spread*(mask: Mask, spread: float32) {.raises: [PixieError].} = ## Grows the mask by spread. diff --git a/tests/masks/drawPolygonMagnified.png b/tests/masks/drawPolygonMagnified.png new file mode 100644 index 0000000000000000000000000000000000000000..a79b040c9b9e4259d61e923ce8e778d994363405 GIT binary patch literal 1173 zcmeAS@N?(olHy`uVBq!ia0vp^CqS43NHBC5e{^DCV2SZ`aSW+oe0$N~V{$#i@sBGz zJ5;&kTAGp;&&+dW$`)POnbE*8b=cPsGKiA5AziEAUijoBjZ});k zK@**(HrERqIHbfJ4=ZIv;1ygn?dq$qReQr$-})T2u|sO-&bMz5E;#+Ph_(6c+nqbJ z=3VS^74r06y}H{)O4`_Xx_?@lnVFkXX=!HW>G>%M6Te!{ef;?DT~^kQ%elCA?LK~d z?ztb?#}X%QeS5>uz`*25fyUedi?+63zqjXy?^@2^t#SHfW-f25-@K50yB}RyS^hpM zs;DT;PO{Z?%9SfVesMb|&0SlfA6NG6>gxCR!^4lqU+#7d)7F)hto)Gh`r6g&*Ei)x z$KO9a{rC6vrST%&N3?a`ysiEE>cPPu*;!Mj_V(W09UigbS&ov9(B!FC@BDdq_~zz~ z=NDyVAAaaPebXkF`O&?uVId(cPUd+z_x619oUI#u>(;$}wuMf&FB|G48Qpwa_kXc_ zTJan6i-(gWWoo{i$-DlquYRvbU0wL~BS$7G->N^jf9iC0rt)`Bp8v0P@2%f?Vwta; zze&}RB@y*T8Usk^O-P*q3lEIVb=g;|V{`u~1{Qe%fty`{KO*Jbo)6?zT zA9+~7N2>kI855H!Q*7$XAdZN2rmQ^HK;CXei;>)|0+ZduvS&$#lZ#@jpa;^FqrbDahy z9!8QjPkw*TzTVZ%&US6~mHYd%uYY}QU$>^*ZO%dGN$!Ux^vnCtx2v%b2#^xxu$UVf zI^Rz7?q#6(lL;m%6&3gQ{rdIt<&VJ2m%o0k{=Tn5u>P#Yq_!NJOy|1)?_O?p zpYE=!S5^|CV{3c5{vd$@?2>><% BI)wlL literal 0 HcmV?d00001 diff --git a/tests/test_masks.nim b/tests/test_masks.nim index 0b9d105..0be2fc1 100644 --- a/tests/test_masks.nim +++ b/tests/test_masks.nim @@ -205,3 +205,13 @@ block: let minified = mask.minifyBy2() minified.writeFile("tests/masks/minifiedBlur.png") + +block: + let path = newPath() + path.polygon(vec2(50, 50), 30, 6) + + let mask = newMask(100, 100) + mask.fillPath(path) + + let magnified = mask.magnifyBy2() + magnified.writeFile("tests/masks/drawPolygonMagnified.png")