newImageFromMaskSimd newMaskFromImageSimd
This commit is contained in:
parent
c4eadf31ed
commit
5d27c93f68
2 changed files with 8 additions and 24 deletions
|
@ -33,11 +33,7 @@ proc newImage*(mask: Mask): Image {.raises: [PixieError].} =
|
||||||
result = newImage(mask.width, mask.height)
|
result = newImage(mask.width, mask.height)
|
||||||
|
|
||||||
when allowSimd and compiles(newImageFromMaskSimd):
|
when allowSimd and compiles(newImageFromMaskSimd):
|
||||||
newImageFromMaskSimd(
|
newImageFromMaskSimd(result.data, mask.data)
|
||||||
cast[ptr UncheckedArray[ColorRGBX]](result.data[0].addr),
|
|
||||||
cast[ptr UncheckedArray[uint8]](mask.data[0].addr),
|
|
||||||
mask.data.len
|
|
||||||
)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
for i in 0 ..< mask.data.len:
|
for i in 0 ..< mask.data.len:
|
||||||
|
@ -458,11 +454,7 @@ proc newMask*(image: Image): Mask {.raises: [PixieError].} =
|
||||||
result = newMask(image.width, image.height)
|
result = newMask(image.width, image.height)
|
||||||
|
|
||||||
when allowSimd and compiles(newMaskFromImageSimd):
|
when allowSimd and compiles(newMaskFromImageSimd):
|
||||||
newMaskFromImageSimd(
|
newMaskFromImageSimd(result.data, image.data)
|
||||||
cast[ptr UncheckedArray[uint8]](result.data[0].addr),
|
|
||||||
cast[ptr UncheckedArray[ColorRGBX]](image.data[0].addr),
|
|
||||||
image.data.len
|
|
||||||
)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
for i in 0 ..< image.data.len:
|
for i in 0 ..< image.data.len:
|
||||||
|
|
|
@ -220,13 +220,9 @@ when defined(amd64):
|
||||||
c.b = ((c.b.uint32 * c.a) div 255).uint8
|
c.b = ((c.b.uint32 * c.a) div 255).uint8
|
||||||
data[i] = c
|
data[i] = c
|
||||||
|
|
||||||
proc newImageFromMaskSimd*(
|
proc newImageFromMaskSimd*(dst: var seq[ColorRGBX], src: var seq[uint8]) =
|
||||||
dst: ptr UncheckedArray[ColorRGBX],
|
|
||||||
src: ptr UncheckedArray[uint8],
|
|
||||||
len: int
|
|
||||||
) =
|
|
||||||
var i: int
|
var i: int
|
||||||
for _ in 0 ..< len div 16:
|
for _ in 0 ..< src.len div 16:
|
||||||
var alphas = mm_loadu_si128(src[i].addr)
|
var alphas = mm_loadu_si128(src[i].addr)
|
||||||
for j in 0 ..< 4:
|
for j in 0 ..< 4:
|
||||||
var unpacked = unpackAlphaValues(alphas)
|
var unpacked = unpackAlphaValues(alphas)
|
||||||
|
@ -236,17 +232,13 @@ when defined(amd64):
|
||||||
alphas = mm_srli_si128(alphas, 4)
|
alphas = mm_srli_si128(alphas, 4)
|
||||||
i += 16
|
i += 16
|
||||||
|
|
||||||
for i in i ..< len:
|
for i in i ..< src.len:
|
||||||
let v = src[i]
|
let v = src[i]
|
||||||
dst[i] = rgbx(v, v, v, v)
|
dst[i] = rgbx(v, v, v, v)
|
||||||
|
|
||||||
proc newMaskFromImageSimd*(
|
proc newMaskFromImageSimd*(dst: var seq[uint8], src: var seq[ColorRGBX]) =
|
||||||
dst: ptr UncheckedArray[uint8],
|
|
||||||
src: ptr UncheckedArray[ColorRGBX],
|
|
||||||
len: int
|
|
||||||
) =
|
|
||||||
var i: int
|
var i: int
|
||||||
for _ in 0 ..< len div 16:
|
for _ in 0 ..< src.len div 16:
|
||||||
let
|
let
|
||||||
a = mm_loadu_si128(src[i + 0].addr)
|
a = mm_loadu_si128(src[i + 0].addr)
|
||||||
b = mm_loadu_si128(src[i + 4].addr)
|
b = mm_loadu_si128(src[i + 4].addr)
|
||||||
|
@ -258,7 +250,7 @@ when defined(amd64):
|
||||||
)
|
)
|
||||||
i += 16
|
i += 16
|
||||||
|
|
||||||
for i in i ..< len:
|
for i in i ..< src.len:
|
||||||
dst[i] = src[i].a
|
dst[i] = src[i].a
|
||||||
|
|
||||||
proc invertImageSimd*(data: var seq[ColorRGBX]) =
|
proc invertImageSimd*(data: var seq[ColorRGBX]) =
|
||||||
|
|
Loading…
Reference in a new issue