diff options
author | frosch <frosch@openttd.org> | 2018-11-15 23:12:37 +0100 |
---|---|---|
committer | Niels Martin Hansen <nielsm@indvikleren.dk> | 2018-11-18 17:30:28 +0100 |
commit | 1a1204472e4d047de824686e9f606d7c832ec698 (patch) | |
tree | bc96001568b0d3380eb54b296345e42a0f22b78d /src/viewport_sprite_sorter_sse4.cpp | |
parent | 68e6b5531a85788edef87140db33fee821df02a6 (diff) | |
download | openttd-1a1204472e4d047de824686e9f606d7c832ec698.tar.xz |
Revert: Sprite sorting optimisation sorted incorrectly.
This reverts commit 25ab9c1997f770f4a8a66bb3ad4b82ba87e3a977.
Diffstat (limited to 'src/viewport_sprite_sorter_sse4.cpp')
-rw-r--r-- | src/viewport_sprite_sorter_sse4.cpp | 25 |
1 files changed, 3 insertions, 22 deletions
diff --git a/src/viewport_sprite_sorter_sse4.cpp b/src/viewport_sprite_sorter_sse4.cpp index cd898f00e..fb78c51c8 100644 --- a/src/viewport_sprite_sorter_sse4.cpp +++ b/src/viewport_sprite_sorter_sse4.cpp @@ -15,7 +15,6 @@ #include "cpu.h" #include "smmintrin.h" #include "viewport_sprite_sorter.h" -#include "core/sort_func.hpp" #include "safeguards.h" @@ -26,24 +25,12 @@ #define LOAD_128 _mm_loadu_si128 #endif -static int CDECL CompareParentSprites(ParentSpriteToDraw * const *psd, ParentSpriteToDraw * const *psd2) -{ - const ParentSpriteToDraw *ps = *psd; - const ParentSpriteToDraw *ps2 = *psd2; - return ps->xmin - ps2->xmin; -} - /** Sort parent sprites pointer array using SSE4.1 optimizations. */ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv) { - const __m128i mask_ptest = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0); - const __m128i mask_ptest2 = _mm_setr_epi8(-1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + const __m128i mask_ptest = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0); ParentSpriteToDraw ** const psdvend = psdv->End(); ParentSpriteToDraw **psd = psdv->Begin(); - - /* pre-sort by xmin in ascending order */ - QSortT(psd, psdvend - psd, CompareParentSprites); - while (psd != psdvend) { ParentSpriteToDraw * const ps = *psd; @@ -77,14 +64,8 @@ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv) __m128i ps1_max = LOAD_128((__m128i*) &ps->xmax); __m128i ps2_min = LOAD_128((__m128i*) &ps2->xmin); __m128i rslt1 = _mm_cmplt_epi32(ps1_max, ps2_min); - if (!_mm_testz_si128(mask_ptest, rslt1)) { - if (!_mm_testz_si128(mask_ptest2, rslt1) /* ps->xmax < ps2->xmin */) { - /* all following sprites have xmin >= ps2->xmin */ - break; - } else { - continue; - } - } + if (!_mm_testz_si128(mask_ptest, rslt1)) + continue; __m128i ps1_min = LOAD_128((__m128i*) &ps->xmin); __m128i ps2_max = LOAD_128((__m128i*) &ps2->xmax); |