Fix #254: AdjustBrightnessOfTwoPixels used in 32bpp-sse2 but requires SSE3

This commit is contained in:
Jonathan G Rennison
2021-05-06 21:26:15 +01:00
parent 9bfcea0397
commit 9900adae70

View File

@@ -412,8 +412,14 @@ bmcr_alpha_blend_single:
case BM_NORMAL_WITH_BRIGHTNESS:
for (uint x = (uint) effective_width / 2; x > 0; x--) {
#if (SSE_VERSION >= 3)
__m128i srcABCD = _mm_loadl_epi64((const __m128i*) src);
srcABCD = AdjustBrightnessOfTwoPixels(srcABCD, bm_normal_brightness);
#else
uint64 srcpx = AdjustBrightneSSE(src->data, DEFAULT_BRIGHTNESS + bp->brightness_adjust).data;
srcpx |= ((uint64)(AdjustBrightneSSE((src + 1)->data, DEFAULT_BRIGHTNESS + bp->brightness_adjust).data)) << 32;
__m128i srcABCD = _mm_cvtsi64_si128(srcpx);
#endif
__m128i dstABCD = _mm_loadl_epi64((__m128i*) dst);
_mm_storel_epi64((__m128i*) dst, AlphaBlendTwoPixels(srcABCD, dstABCD, ALPHA_BLEND_PARAM_1, ALPHA_BLEND_PARAM_2));
src += 2;
@@ -421,8 +427,7 @@ bmcr_alpha_blend_single:
}
if ((bt_last == BT_NONE && effective_width & 1) || bt_last == BT_ODD) {
__m128i srcABCD = _mm_cvtsi32_si128(src->data);
srcABCD = AdjustBrightnessOfTwoPixels(srcABCD, bm_normal_brightness);
__m128i srcABCD = _mm_cvtsi32_si128(AdjustBrightneSSE(src->data, DEFAULT_BRIGHTNESS + bp->brightness_adjust).data);
__m128i dstABCD = _mm_cvtsi32_si128(dst->data);
dst->data = _mm_cvtsi128_si32(AlphaBlendTwoPixels(srcABCD, dstABCD, ALPHA_BLEND_PARAM_1, ALPHA_BLEND_PARAM_2));
}