@@ -215,25 +215,43 @@ SoftBlitPyGame(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst,
215
215
src -> format -> Rmask == dst -> format -> Rmask &&
216
216
src -> format -> Gmask == dst -> format -> Gmask &&
217
217
src -> format -> Bmask == dst -> format -> Bmask ) {
218
- /* If our source and destination are the same ARGB 32bit
219
- format we can use SSE2/NEON to speed up the blend */
218
+ /* If our source and destination are the same ARGB
219
+ 32bit format we can use SSE2/NEON/AVX2 to speed
220
+ up the blend */
221
+ if (pg_has_avx2 () && (src != dst )) {
222
+ if (info .src_blanket_alpha != 255 ) {
223
+ alphablit_alpha_avx2_argb_surf_alpha (
224
+ & info );
225
+ }
226
+ else if (SDL_ISPIXELFORMAT_ALPHA (
227
+ dst -> format -> format ) &&
228
+ info .dst_blend !=
229
+ SDL_BLENDMODE_NONE ) {
230
+ alphablit_alpha_avx2_argb_no_surf_alpha (
231
+ & info );
232
+ }
233
+ else {
234
+ alphablit_alpha_avx2_argb_no_surf_alpha_opaque_dst (
235
+ & info );
236
+ }
237
+ break ;
238
+ }
220
239
#if PG_ENABLE_SSE_NEON
221
240
if ((pg_HasSSE_NEON ()) && (src != dst )) {
222
241
if (info .src_blanket_alpha != 255 ) {
223
242
alphablit_alpha_sse2_argb_surf_alpha (
224
243
& info );
225
244
}
245
+ else if (SDL_ISPIXELFORMAT_ALPHA (
246
+ dst -> format -> format ) &&
247
+ info .dst_blend !=
248
+ SDL_BLENDMODE_NONE ) {
249
+ alphablit_alpha_sse2_argb_no_surf_alpha (
250
+ & info );
251
+ }
226
252
else {
227
- if (SDL_ISPIXELFORMAT_ALPHA (
228
- dst -> format -> format ) &&
229
- info .dst_blend != SDL_BLENDMODE_NONE ) {
230
- alphablit_alpha_sse2_argb_no_surf_alpha (
231
- & info );
232
- }
233
- else {
234
- alphablit_alpha_sse2_argb_no_surf_alpha_opaque_dst (
235
- & info );
236
- }
253
+ alphablit_alpha_sse2_argb_no_surf_alpha_opaque_dst (
254
+ & info );
237
255
}
238
256
break ;
239
257
}
0 commit comments