Red Hat Bugzilla – Bug 678569
SDL_BlitCopyOverlap assumes memcpy operates in order while SSE3 version operates from back to front
Last modified: 2012-04-03 11:20:31 EDT
+++ This bug was initially created as a clone of Bug #669844 +++
I guess simple switching SDL_memcpy to memmove would fix the problem even tough that would add one extra branch for each line that is copied. But in end switching both branches to use simple memmove would be big gain as C library would have CPU specific optimizations that are missing from SDL.
Fix provided by upstream, SDL version in RHEL-6 is affected and fixable. Reproduction depends on glibc version (memcpy() implementation), CPU and memory mapping.
Created attachment 479499 [details]
Fix from upstream
Created attachment 479500 [details]
Requires new glibc, SSE3 CPU, and little of luck.
Current glibc-2.12-1.19.el6.x86_64 does not provided affected memcpy(), so the SDL bug does not exhibit now.
This request was evaluated by Red Hat Product Management for
inclusion in the current release of Red Hat Enterprise Linux.
Because the affected component is not scheduled to be updated
in the current release, Red Hat is unfortunately unable to
address this request at this time. Red Hat invites you to
ask your support representative to propose this request, if
appropriate and relevant, in the next release of Red Hat
Enterprise Linux. If you would like it considered as an
exception in the current release, please ask your support
Technical note added. If any revisions are required, please edit the "Technical Notes" field
accordingly. All revisions will be proofread by the Engineering Content Services team.
Calling SDL_BlitSurface() on overlaping rectangles while
running on SSE3 optimized standard C library.
Rectangle bitmaps content is corrupted what produces
garbage on the screen.
Internal SDL_BlitCopyOverlap() function has been fixed to
copy bitmaps between overlapping areas correctly.
SDL_BlitSurface() function performs correctly even if
standard C library does not implement memcpy() safely for
operation on overlapping memory areas.
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.
For information on the advisory, and where to find the updated
files, follow the link below.
If the solution does not work for you, open a new bug report.