SSE2 anim blitter: fix edge case where medium path was used incorrectly.
This commit is contained in:
@@ -54,9 +54,11 @@ void Blitter_32bppSSE2_Anim::PaletteAnimate(const Palette &palette)
|
|||||||
__m128i colour_data = _mm_and_si128(data, colour_mask);
|
__m128i colour_data = _mm_and_si128(data, colour_mask);
|
||||||
|
|
||||||
/* test if any colour >= PALETTE_ANIM_START */
|
/* test if any colour >= PALETTE_ANIM_START */
|
||||||
if (unlikely(_mm_movemask_epi8(_mm_cmpgt_epi16(colour_data, anim_cmp)))) {
|
int colour_cmp_result = _mm_movemask_epi8(_mm_cmpgt_epi16(colour_data, anim_cmp));
|
||||||
|
if (unlikely(colour_cmp_result)) {
|
||||||
/* test if any brightness is unexpected */
|
/* test if any brightness is unexpected */
|
||||||
if (unlikely(x < 8 || _mm_movemask_epi8(_mm_cmpeq_epi16(_mm_srli_epi16(data, 8), brightness_cmp)) != 0xFFFF)) {
|
if (unlikely(x < 8 || colour_cmp_result != 0xFFFF ||
|
||||||
|
_mm_movemask_epi8(_mm_cmpeq_epi16(_mm_srli_epi16(data, 8), brightness_cmp)) != 0xFFFF)) {
|
||||||
/* slow path: < 8 pixels left or unexpected brightnesses */
|
/* slow path: < 8 pixels left or unexpected brightnesses */
|
||||||
for (int z = min<int>(x, 8); z != 0 ; z--) {
|
for (int z = min<int>(x, 8); z != 0 ; z--) {
|
||||||
int value = _mm_extract_epi16(data, 0);
|
int value = _mm_extract_epi16(data, 0);
|
||||||
|
Reference in New Issue
Block a user