This commit is contained in:
Ryan Oldenburg 2022-07-30 01:46:46 -05:00
parent aa4d126a42
commit 1e7ed451af

View file

@ -1,40 +1,5 @@
import benchy, cairo, pixie, pixie/blends, pixie/internal import benchy, cairo, pixie, pixie/blends, pixie/internal
when defined(amd64) and not defined(pixieNoSimd):
import nimsimd/sse2
when defined(release):
{.push checks: off.}
proc drawBasic(backdrop, source: Image) =
for y in 0 ..< min(backdrop.height, source.height):
if isOpaque(source.data, source.dataIndex(0, y), source.width):
copyMem(
backdrop.data[backdrop.dataIndex(0, y)].addr,
source.data[source.dataIndex(0, y)].addr,
min(backdrop.width, source.width) * 4
)
else:
var x: int
when defined(amd64) and not defined(pixieNoSimd):
let vec255 = mm_set1_epi32(cast[int32](uint32.high))
for _ in 0 ..< min(backdrop.width, source.width) div 4:
let sourceVec = mm_loadu_si128(source.data[source.dataIndex(x, y)].addr)
if mm_movemask_epi8(mm_cmpeq_epi8(sourceVec, mm_setzero_si128())) != 0xffff:
if (mm_movemask_epi8(mm_cmpeq_epi8(sourceVec, vec255)) and 0x8888) == 0x8888:
mm_storeu_si128(backdrop.data[backdrop.dataIndex(x, y)].addr, sourceVec)
else:
let backdropVec = mm_loadu_si128(backdrop.data[backdrop.dataIndex(x, y)].addr)
mm_storeu_si128(
backdrop.data[backdrop.dataIndex(x, y)].addr,
blendNormalInlineSimd(backdropVec, sourceVec)
)
x += 4
# No scalar for now
when defined(release):
{.pop.}
block: block:
let let
backdrop = imageSurfaceCreateFromPng("tests/fileformats/svg/masters/dragon2.png") backdrop = imageSurfaceCreateFromPng("tests/fileformats/svg/masters/dragon2.png")
@ -83,19 +48,6 @@ block:
# tmp.writeFile("tmp2.png") # tmp.writeFile("tmp2.png")
block:
let
backdrop = readImage("tests/fileformats/svg/masters/dragon2.png")
source = readImage("tests/fileformats/svg/masters/Ghostscript_Tiger.png")
tmp = newImage(1568, 940)
timeIt "pixie draw basic":
# tmp.fill(rgbx(127, 127, 127, 255))
tmp.drawBasic(backdrop)
tmp.drawBasic(source)
# tmp.writeFile("tmp2.png")
block: block:
let let
backdrop = imageSurfaceCreateFromPng("tests/fileformats/svg/masters/dragon2.png") backdrop = imageSurfaceCreateFromPng("tests/fileformats/svg/masters/dragon2.png")