This commit is contained in:
Ryan Oldenburg 2021-11-18 19:02:40 -06:00
parent 8813d61dec
commit 6b78fca0dd

View file

@ -56,13 +56,11 @@ proc toPremultipliedAlpha*(data: var seq[ColorRGBA | ColorRGBX]) {.raises: [].}
oddMask = mm_set1_epi16(cast[int16](0xff00)) oddMask = mm_set1_epi16(cast[int16](0xff00))
div255 = mm_set1_epi16(cast[int16](0x8081)) div255 = mm_set1_epi16(cast[int16](0x8081))
for j in countup(i, data.len - 4, 4): for _ in countup(i, data.len - 4, 4):
var var
color = mm_loadu_si128(data[j].addr) color = mm_loadu_si128(data[i].addr)
alpha = mm_and_si128(color, alphaMask) alpha = mm_and_si128(color, alphaMask)
if mm_movemask_epi8(mm_cmpeq_epi16(alpha, alphaMask)) != 0xffff:
let eqOpaque = mm_cmpeq_epi16(alpha, alphaMask)
if mm_movemask_epi8(eqOpaque) != 0xffff:
# If not all of the alpha values are 255, premultiply # If not all of the alpha values are 255, premultiply
var var
colorEven = mm_slli_epi16(color, 8) colorEven = mm_slli_epi16(color, 8)
@ -81,8 +79,10 @@ proc toPremultipliedAlpha*(data: var seq[ColorRGBA | ColorRGBX]) {.raises: [].}
mm_and_si128(alpha, alphaMask), mm_and_si128(color, notAlphaMask) mm_and_si128(alpha, alphaMask), mm_and_si128(color, notAlphaMask)
) )
mm_storeu_si128(data[j].addr, color) mm_storeu_si128(data[i].addr, color)
i += 4 i += 4
# Convert whatever is left # Convert whatever is left
for j in i ..< data.len: for j in i ..< data.len:
var c = data[j] var c = data[j]