morepretty
This commit is contained in:
parent
60f5801b71
commit
c765026b67
3 changed files with 18 additions and 13 deletions
|
@ -81,7 +81,9 @@ proc minifyBy2*(mask: Mask, power = 1): Mask =
|
||||||
when defined(amd64) and not defined(pixieNoSimd):
|
when defined(amd64) and not defined(pixieNoSimd):
|
||||||
let
|
let
|
||||||
oddMask = mm_set1_epi16(cast[int16](0xff00))
|
oddMask = mm_set1_epi16(cast[int16](0xff00))
|
||||||
first8 = cast[M128i]([uint8.high, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
|
firstByte = cast[M128i](
|
||||||
|
[uint8.high, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||||
|
)
|
||||||
for _ in countup(0, result.width - 16, 8):
|
for _ in countup(0, result.width - 16, 8):
|
||||||
let
|
let
|
||||||
top = mm_loadu_si128(src.data[src.dataIndex(x * 2, y * 2 + 0)].addr)
|
top = mm_loadu_si128(src.data[src.dataIndex(x * 2, y * 2 + 0)].addr)
|
||||||
|
@ -114,14 +116,14 @@ proc minifyBy2*(mask: Mask, power = 1): Mask =
|
||||||
|
|
||||||
# merged has the correct values in the even indices
|
# merged has the correct values in the even indices
|
||||||
|
|
||||||
a = mm_and_si128(merged, first8)
|
a = mm_and_si128(merged, firstByte)
|
||||||
b = mm_and_si128(mm_srli_si128(merged, 2), first8)
|
b = mm_and_si128(mm_srli_si128(merged, 2), firstByte)
|
||||||
c = mm_and_si128(mm_srli_si128(merged, 4), first8)
|
c = mm_and_si128(mm_srli_si128(merged, 4), firstByte)
|
||||||
d = mm_and_si128(mm_srli_si128(merged, 6), first8)
|
d = mm_and_si128(mm_srli_si128(merged, 6), firstByte)
|
||||||
e = mm_and_si128(mm_srli_si128(merged, 8), first8)
|
e = mm_and_si128(mm_srli_si128(merged, 8), firstByte)
|
||||||
f = mm_and_si128(mm_srli_si128(merged, 10), first8)
|
f = mm_and_si128(mm_srli_si128(merged, 10), firstByte)
|
||||||
g = mm_and_si128(mm_srli_si128(merged, 12), first8)
|
g = mm_and_si128(mm_srli_si128(merged, 12), firstByte)
|
||||||
h = mm_and_si128(mm_srli_si128(merged, 14), first8)
|
h = mm_and_si128(mm_srli_si128(merged, 14), firstByte)
|
||||||
|
|
||||||
ab = mm_or_si128(a, mm_slli_si128(b, 1))
|
ab = mm_or_si128(a, mm_slli_si128(b, 1))
|
||||||
cd = mm_or_si128(c, mm_slli_si128(d, 1))
|
cd = mm_or_si128(c, mm_slli_si128(d, 1))
|
||||||
|
|
|
@ -1206,12 +1206,14 @@ proc computeCoverages(
|
||||||
at - prevAt
|
at - prevAt
|
||||||
if leftCover != 0:
|
if leftCover != 0:
|
||||||
inc fillStart
|
inc fillStart
|
||||||
coverages[prevAt.int - startX] += (leftCover * sampleCoverage.float32).uint8
|
coverages[prevAt.int - startX] +=
|
||||||
|
(leftCover * sampleCoverage.float32).uint8
|
||||||
|
|
||||||
if pixelCrossed:
|
if pixelCrossed:
|
||||||
let rightCover = at - trunc(at)
|
let rightCover = at - trunc(at)
|
||||||
if rightCover > 0:
|
if rightCover > 0:
|
||||||
coverages[at.int - startX] += (rightCover * sampleCoverage.float32).uint8
|
coverages[at.int - startX] +=
|
||||||
|
(rightCover * sampleCoverage.float32).uint8
|
||||||
|
|
||||||
let fillLen = at.int - fillStart
|
let fillLen = at.int - fillStart
|
||||||
if fillLen > 0:
|
if fillLen > 0:
|
||||||
|
|
|
@ -46,7 +46,8 @@ timeIt "cairo decode":
|
||||||
timeIt "cairo encode":
|
timeIt "cairo encode":
|
||||||
let decoded = imageSurfaceCreateFromPng(filePath)
|
let decoded = imageSurfaceCreateFromPng(filePath)
|
||||||
|
|
||||||
var write: WriteFunc = proc(closure: pointer, data: cstring, len: int32): Status {.cdecl.} =
|
var write: WriteFunc =
|
||||||
|
proc(closure: pointer, data: cstring, len: int32): Status {.cdecl.} =
|
||||||
StatusSuccess
|
StatusSuccess
|
||||||
|
|
||||||
discard decoded.writeToPng(write, nil)
|
discard decoded.writeToPng(write, nil)
|
||||||
|
|
Loading…
Reference in a new issue